Содержание
Пример разработки плагина ссылки
Суть нашего плагина будет во вставке часто используемых шаблонов описания ссылок, например: Ссылка на оригинальную статью, См. также и Читать далее…. Статья затронет добавление кнопки нашего плагина на панель инструментов редактора (toolbar), описание процесса разработки и закончим переводом нашего плагина на другие языки.
Подготовка папок и файлов
В папке lib/plugins создадим папку нашего плагина (например link или mylink). Я использую название mylink, т.к. более простые могут быть заняты. В нашей папке создадим файлы:
- plugin.info.txt
- README.md
- script.js
и папку:
- images
Файл plugin.info.txt
Каждый плагин должен предоставить некоторую базовую информацию о себе. Это делается через файл с именем, 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 | Техническое имя плагина. Менеджер расширений установит его в этот каталог. |
author | Полное имя автора плагина |
Электронная почта для связи с автором плагина по поводу этого плагина | |
date | Дата последнего обновления этого плагина в формате ГГГГ-ММ-ДД. Не забудьте обновить это, когда будете обновлять свой плагин! 13) |
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() теперь реализован в базовом классе и будет считывать всю информацию из этого файла. Его больше не нужно реализовывать в ваших подклассах.
Файл README.md
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 определен ли он. Если определен, вы можете добавить свою кнопку в конец массива.
- 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":"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":"]]" } ] }; }
«Подробности и пояснения»
- 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", // тип действия кнопки: 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, переходим в редактор страниц и видим нашу новую кнопку на панели инструментовЖ
При нажатии на кнопку проверяем открытие выпадающего списка кнопок и работу кода по выводу нашего текста:
Проверяем вторую кнопку:
Мы видим код, который мы разрезали на части в файле script.js
See also: [[http://example.com|]]
Пример вывода на странице нашего кода:
Ниже вы видите, как это отображается на этой странице, что говорит о том, что наш код работаетю
Link to the original article
See also: http://example.com
Регистрация в программе нашего плагина прошла автоматически,т.к. мы создавали наш проект в папке lib/plugins. При этом мы можем заорхивировать наш проект и установить через менеджер плагинов.
Просмотрим информацию о плагине в менеджере плагинов:
Если мы удалим наш проект из lib/plugins и заархивируем нашу папку в формате .zip, то сможем произвести установку плагина через менеджер управления дополнениями:
Перевод плагина на разные языки
Заходим в папку нашего проекта и создадим внутри папку lang
Внутри создадим папки с необходимыми нам языковыми пакетами (в нашем примере это папки: en - англиский и ru - русский)).
В каждой из папок создадим файл перевода lang.php
Примерное содержание файлов lang.php для русского и английского переводов:
- lang.php
<?php /** * English language file */ $lang['js']['mylink_picker'] = 'My links'; $lang['js']['tb_see_also'] = 'See also'; $lang['js']['tb_link_to_the_original'] = 'Link to the original article';
- lang.php
<?php /** * Russian language file */ $lang['js']['mylink_picker'] = 'Мои ссылки'; $lang['js']['tb_see_also'] = 'См. также'; $lang['js']['tb_link_to_the_original'] = 'Ссылка на оригинальную статью';
Атрибут | Значение |
---|---|
$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
- 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 в английский язык и проверим работу нашего плагина при английской локализации:
И то же самое при установленном русском языке в настройках Dokuwiki
Работа кода кнопки См. также и вывод в редакторе текста на русском языке
Пример вывода на страницу
Примеры работы нашего плагина и вывода наших ссылок на этой странице при английской и русской локализациях:
- See also: http://example.com
- См. также:http://example.com
Примеры использования
Как мы уже знает, переменные
- open - открывающий тег вики-разметки для вставки
- sample- код php
- close - закрывающий тег вики-разметки для вставки
Соответственно и вставлять мы можем любые шаблоны, например:
Ссылка на оригинальную статью
- index.php
Вставить код PHP
- style.css
Вставить код CSS
- script.js
Вставить код JS