Инструменты пользователя

Инструменты сайта


wiki:devel:plugin_development_link

Пример разработки плагина ссылки

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

Примеры использования

Как мы уже знает, переменные

  • open - открывающий тег вики-разметки для вставки
  • sample- код php
  • close - закрывающий тег вики-разметки для вставки

Соответственно и вставлять мы можем любые шаблоны, например: Ссылка на оригинальную статью

index.php
Вставить код PHP
style.css
Вставить код CSS
script.js
Вставить код JS

Дополнения и Файлы

13)
Эта дата должна быть равна дате «Последнее обновление» на странице плагинов в репозитории. Это необходимо для автоматической маркировки обновлений, используемой Extension Manager, представленной в релизе Ponder Stibbons
Только авторизованные участники могут оставлять комментарии.
wiki/devel/plugin_development_link.txt · Последнее изменение: 2025/02/21 06:53 — vladpolskiy