======Пример разработки плагина ссылки ======
Суть нашего плагина будет во вставке часто используемых шаблонов описания ссылок, например: //Ссылка на оригинальную статью//, //См. также// и //Читать далее...//.
Статья затронет добавление кнопки нашего плагина на панель инструментов редактора (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}}