Как создать пользовательские пункты меню "Вставка" в Dreamweaver?

Мне нужно создать пункт меню, который вставляет некоторую запатентованную разметку, например, маркер кода, например

<###LoginForm###>

как используется моей CMS.

Я нахожу это очень сложно - логично, и согласно документации, я должен быть в состоянии сделать это, отредактировав menus.xml в папке configuration/Menus в папке Dreamweaver в Program Files. Но это не работает, как ожидалось. Я попытался скопировать элемент, который вставляет тег HR, заменяя мой "тег", но ничего не вставлено.

В файле config /objects/common есть файлы, на которые ссылается XML, которые, кажется, содержат вставляемые фрагменты кода, то есть существует файл HR.htm, который выглядит так, как будто он должен вставить <HR> но он вставляет <hr /> когда фактический пункт меню используется в XHTML, поэтому они устарели?

Я бы очень хотел, чтобы кто-нибудь дал мне надежный рецепт создания меню, которое позволило бы мне вставлять свои собственные фрагменты кода, подобные тегам, как указано выше.

1 ответ

Решение

Документация по созданию расширений / дополнений Dreamweaver может быть значительно улучшена. Вы, возможно, читали, как добавить пункт меню, но он, вероятно, не сказал, что вы должны включить в значения атрибута, чтобы сделать именно то, что вы хотели. Попытка скопировать что-то еще является хорошей отправной точкой, но может быть некоторая "магия" в том, как на самом деле работают некоторые вещи.

Если это фрагмент кода, почему бы не использовать панель "Фрагменты кода" ("Окно" -> "Фрагмент кода")? У вас даже есть возможность назначить сочетание клавиш для отдельных фрагментов?

Что касается объектов (которые меню "Вставка" и панель "Вставка" используются для добавления кода на страницу), встроенные теги, такие как HR, вставляют совместимые с XHTML версии тега в документы с типом документа XHTML. Это сделано специально для Dreamweaver.

Если вы добавили следующий элемент меню в файл menus.xml над записью HR:

<menuitem id="DWMenu_Insert_LoginForm" name="LoginForm" enabled="(dw.getActiveWindow(true) != null && dw.getActiveWindow(true).allowsEdits()) && dw.getFocus() != 'browser' && dw.getDocumentDOM() != null  && dw.getDocumentDOM().getParseMode() == 'html'" command="var dom = dw.getDocumentDOM(); var offsets = dom.source.getSelection(); dom.source.replaceRange(offsets[0], offsets[1], '<###LoginForm###>')" />

Примечание: я отошел от атрибута файла и вместо этого использовал атрибут команды, который позволяет запускать код JavaScript, в данном случае:

var dom = dw.getDocumentDOM(); var offsets = dom.source.getSelection(); dom.source.replaceRange(offsets[0], offsets[1], '<###LoginForm###>')

который получает ссылку на документ, находит смещения выделения в документе и заменяет выделение фрагментом кода.

Я не проверял это всеми возможными способами, но работает для меня в простых документах HTML и XHTML.

Другие вопросы по тегам