======Пример разработки плагина ссылки ====== Суть нашего плагина будет во вставке часто используемых шаблонов описания ссылок, например: //Ссылка на оригинальную статью//, //См. также// и //Читать далее...//. Статья затронет добавление кнопки нашего плагина на панель инструментов редактора (toolbar), описание процесса разработки и закончим переводом нашего плагина на другие языки. =====Подготовка папок и файлов===== В папке lib/plugins создадим папку нашего плагина (например link или mylink). Я использую название mylink, т.к. более простые могут быть заняты. В нашей папке создадим файлы: * plugin.info.txt * README.md * script.js и папку: * images {{:wiki:devel:devev_plugin_mylink_1.jpg?|}} =====Файл plugin.info.txt===== Каждый плагин должен предоставить некоторую базовую информацию о себе. Это делается через файл с именем, ''plugin.info.txt'' расположенный в каталоге плагина . Вот пример того, как должен выглядеть такой файл. base mylink author VladPolskiy email polskiyvn@gmail.com date 2025-01-09 name mylink syntax plugin desc Inserts frequently used link descriptions into Dokuwiki. url https://www.dokuwiki.org/plugin:mylink ^ Параметр ^ Описание ^ | base | Техническое имя плагина. **[[wiki:plugin:extension|Менеджер расширений]] установит его в этот каталог.**| | author | Полное имя автора плагина | | email | Электронная почта для связи с автором плагина по поводу этого плагина | | date | Дата последнего обновления этого плагина в формате ГГГГ-ММ-ДД. Не забудьте обновить это, когда будете обновлять свой плагин! ((**Эта дата должна быть равна дате «Последнее обновление» на странице плагинов в репозитории.** Это необходимо для автоматической маркировки обновлений, используемой Extension Manager, представленной в релизе Ponder Stibbons))| | name | Удобочитаемое имя плагина | | desc | Описание того, что делает плагин | | url | URL-адрес , по которому можно получить более подробную информацию о плагине | | minphp | Минимальная версия PHP, требуемая для этого плагина. Пусто для того же, что и DokuWiki. Только ''Major.Minor'' версия, например 8.2, не 8.2.3 может быть указана! | | maxphp | Максимальная версия PHP, поддерживаемая этим плагином. Пусто для того же, что и DokuWiki. Только ''Major.Minor'' версия, например 8.2, не 8.2.3может быть указана! | **Примечание:** ''plugin.info.txt'' заменяет старый вызов ''getInfo()'' в ваших компонентах плагина для DokuWiki 2009-12-25 «Lemming» и более поздних версий. getInfo() теперь реализован в базовом классе и будет считывать всю информацию из этого файла. Его больше не нужно реализовывать в ваших подклассах. {{:wiki:devel:devev_plugin_mylink_2.jpg?|}} =====Файл README.md===== README.md служит первым документом для пользователей и разработчиков, которые хотят понять назначение, настройку и использование проекта. # плагин моих ссылок Это плагин для [dokuwiki](https://www.dokuwiki.org/start).. См. [домашнюю страницу](https://www.dokuwiki.org/plugin:mylink) для получения подробной документации. Здесь мы приводим краткое описание требуемого синтаксиса: ``` {magnifier-lefticon}См. так-же [[:example|]] {blue-document--arrowicon}[[http://example.com| Ссылка на оригинальную статью]] ``` - Квадратные скобки обозначают ссылку. =====Файл script.js===== JavaScript файл с рабочим кодом нашего плагина (подключения кнопки и вывод описания нашей ссылки в тело редактируемой страницы. Поскольку пользовательские и плагинные скрипты загружаться при всех запросах, а панель инструментов инициализируется только при редактировании, нам нужно сначала убедиться, что массив панелей инструментов существует. Проверим это, window.toolbar определен ли он. Если определен, вы можете добавить свою кнопку в конец массива. /* JavaScript function to create mylink toolbar in Dokuwiki */ /* see http://www.dokuwiki.org/plugin:mylink for more info */ /* Путь к папке с иконками для кнопок панели */ mylink_icobase = "../../plugins/mylink/images/"; if(window.toolbar != undefined) { toolbar[toolbar.length] = { "type":"picker", "title":"My links", "icon":mylink_icobase+"toolbar_icon.png", "list":[{ "type":"format", "title":"Link to the original article", "icon":mylink_icobase+"blog.png", "open":"[[", "sample":"http://example.com|Link to the original article", "close":"]]" }, { "type":"format", "title":"See also", "icon":mylink_icobase+"magnifier-medium-left.png", "open":"See also: [[", "sample":"http://example.com|", "close":"]]" } ] }; }
«Подробности и пояснения» /* JavaScript function to create mylink toolbar in Dokuwiki */ /* see http://www.dokuwiki.org/plugin:mylink for more info */ /* Путь к папке с иконками для кнопок панели */ mylink_icobase = "../../plugins/mylink/images/"; if(window.toolbar != undefined) { // Проверка наличия массива панели инструментов toolbar[toolbar.length] = { // Кнопка верхнего уровня панели инструментов "type":"picker", // тип действия кнопки: picker⇒ меню выбора "title":"My links", // название кнопки, отображаемое при наведении курсора "icon":mylink_icobase+"toolbar_icon.png", //значок, используемый для кнопки "list":[{ //список выпадающего меню кнопок "type":"format", // 1я кнопка в выпадающем окне. тип действия кнопки: format⇒ вики-разметка "title":"Link to the original article", // название кнопки, отображаемое при наведении курсора "icon":mylink_icobase+"blog.png", //путь к иконке, используемой для кнопки "open":"[[", "sample":"http://example.com|Link to the original article", "close":"]]" }, { "type":"format", // 2я кнопка в выпадающем окне. тип действия кнопки: format⇒ вики-разметка "title":"See also", // название кнопки, отображаемое при наведении курсора "icon":mylink_icobase+"magnifier-medium-left.png", //путь к иконке, используемой для кнопки "open":"See also: [[", //открывающий тег вики-разметки для вставки "sample":"http://example.com|", "close":"]]" //закрывающий тег вики-разметки для вставки } ] }; }
в данном случае наш код "open":"See also: [[", //открывающий тег вики-разметки для вставки "sample":"http://example.com|", "close":"]]" //закрывающий тег вики-разметки для вставки представляют собою разрезанный код для вывода: See also: [[ http://example.com| ]] После редактирования и сохранения с нашим кодом файла script.js, переходим в редактор страниц и видим нашу новую кнопку на панели инструментовЖ {{:wiki:devel:devev_plugin_mylink_10.jpg?|}} При нажатии на кнопку проверяем открытие выпадающего списка кнопок и работу кода по выводу нашего текста: {{:wiki:devel:devev_plugin_mylink_11.jpg?|}} Проверяем вторую кнопку: {{:wiki:devel:devev_plugin_mylink_12.jpg?|}} Мы видим код, который мы разрезали на части в файле script.js See also: [[http://example.com|]] Пример вывода на странице нашего кода: {{:wiki:devel:devev_plugin_mylink_13.jpg?|}} Ниже вы видите, как это отображается на этой странице, что говорит о том, что наш код работаетю [[http://example.com|Link to the original article]]\\ See also: [[http://example.com|]]\\ Регистрация в программе нашего плагина прошла автоматически,т.к. мы создавали наш проект в папке lib/plugins. При этом мы можем заорхивировать наш проект и установить через менеджер плагинов.\\ Просмотрим информацию о плагине в менеджере плагинов: {{:wiki:devel:devev_plugin_mylink_9.jpg?|}} Если мы удалим наш проект из lib/plugins и заархивируем нашу папку в формате .zip, то сможем произвести установку плагина через менеджер управления дополнениями: {{:wiki:devel:devev_plugin_mylink_8.jpg?|}} =====Перевод плагина на разные языки===== Заходим в папку нашего проекта и создадим внутри папку lang {{:wiki:devel:devev_plugin_mylink_25.jpg?|}} Внутри создадим папки с необходимыми нам языковыми пакетами (в нашем примере это папки: en - англиский и ru - русский)). {{:wiki:devel:devev_plugin_mylink_26.jpg?|}} В каждой из папок создадим файл перевода lang.php {{:wiki:devel:devev_plugin_mylink_27.jpg?|}} Примерное содержание файлов lang.php для русского и английского переводов: {{tablelayout?rowsHeaderSource=Auto}} ^ Атрибут ^ Значение ^ | $lang['js']['mylink_picker'] = 'My links'; | **mylink_picker** - имя вехней кнопки, **My links** - название (при наведении мыши) на английском и **Мои ссылки** - название на русском языке. | |$lang['js']['tb_see_also'] = 'See also'; |тоже самое для 1й кнопки в раскравающемся списке| |$lang['js']['tb_link_to_the_original'] = 'Link to the original article'; |тоже самое для 2й кнопки в раскравающемся списке| Вносим правки в наш файл script.js /* JavaScript function to create mylink toolbar in Dokuwiki */ /* see http://www.dokuwiki.org/plugin:mylink for more info */ mylink_icobase = "../../plugins/mylink/images/"; if(window.toolbar != undefined) { toolbar[toolbar.length] = { "type":"picker", "title":LANG['plugins']['mylink']['mylink_picker'], "icon":mylink_icobase+"toolbar_icon.png", "list":[{ "type":"format", "title":LANG['plugins']['mylink']['tb_link_to_the_original'], "icon":mylink_icobase+"blog.png", "open":"[[http://example.com|", "sample":LANG['plugins']['mylink']['tb_link_to_the_original'], "close":"]]" }, { "type":"format", "title":LANG['plugins']['mylink']['tb_see_also'], "icon":mylink_icobase+"magnifier-medium-left.png", "open":LANG['plugins']['mylink']['tb_see_also'], "sample":":[[http://example.com|", "close":"]]" }, ] }; } Переведем Dokuwiki в английский язык и проверим работу нашего плагина при английской локализации: {{:wiki:devel:devev_plugin_mylink_12.jpg?|}} И то же самое при установленном русском языке в настройках Dokuwiki {{:wiki:devel:devev_plugin_mylink_14.jpg?|}} Работа кода кнопки См. также и вывод в редакторе текста на русском языке {{:wiki:devel:devev_plugin_mylink_16.jpg?|}} Пример вывода на страницу {{:wiki:devel:devev_plugin_mylink_17.jpg?|}} Примеры работы нашего плагина и вывода наших ссылок на этой странице при английской и русской локализациях: * [[http://example.com|Link to the original article]] * See also: [[http://example.com|]] * [[http://example.com|Ссылка на оригинальную статью]] * См. также:[[http://example.com|]] =====Примеры использования===== Как мы уже знает, переменные * open - открывающий тег вики-разметки для вставки * sample- код php * close - закрывающий тег вики-разметки для вставки Соответственно и вставлять мы можем любые шаблоны, например: {{:wiki:devel:plugin_link_exsample_1.png?|}} [[http://example.com|Ссылка на оригинальную статью]] Вставить код PHP Вставить код CSS Вставить код JS =====Дополнения и Файлы===== * {{ :wiki:devel:mylink.zip |Архив проекта mylink}} * {{ :wiki:devel:mylink1.zip |Архив проекта mylink (en/ru)}} * {{ :wiki:devel:mylink-master.zip |mylink-master.zip}}