Создание своего расширения для MediaWiki. Часть 2 — Служебная страница

Итак, в первой части своих заметок про создание собственного расширения MediaWiki я добился того, что wiki признала мое расширение и стала выводит о нем информацию на странице Служебная:Версия. Но и все – больше ничего не происходит. Теперь, добьемся того, чтобы мое расширение зарегистрировало и показывало в системе свою собственную служебную страницу. Здесь уже придется приложить к мозгу немного языка php. Начнем, пожалуй.

Ready

Для начала, создадим в папке расширения папку src, в которой будем размещать php-код расширения. Это не обязательно, но я сделаю так чтобы не создавать в общей папке расширения мешанину из разнотипных файлов. Затем, создадим там файл, который будет обрабатывать вызов служебной страницы. Файл так и назовем: SpecialPage.php. Сначала приведу текст файла, потом поясню что да как:

Файл extensions/PhoneBook/src/SpecialPage.php:

Для начала немного расскажу про базовый класс SpecialPage (документация). Это базовый класс, реализующий функционал служебных страниц. Для создания собственной служебной страницы необходимо создать свой класс, унаследовав его от класса SpecialPage. В самом простом случае, как здесь, например, у наследника необходимо переопределить конструктор и метод execute ().

В конструкторе необходимо вызвать конструктор родителя и передать ему идентификатор создаваемой служебной страницы, в данном случае “Phones”. Идентификатор послужит как для вызова этой самой страницы, так и для локализации, что будет показано в следующей серии.

Метод execute () вызывается, когда происходит открытие служебной страницы (в моем случае http://моявики/Служебная:Телефоны). Этот метод обязателен к переопределению. В этом методе и происходит основная работа по формированию текста страницы. Вначале я получаю экземпляр класса OutputPage (документация). Этот класс используется для подготовки окончательного рендеринга страницы. Получаю я объект этого класса через вызов метода getOutput () родительского класса SpecialPage. Далее, я пользуюсь методами класса OutputPage, такими как setPageTitle () – чтобы установить заголовок страницы и addWikiText () чтобы добавить на страницу желаемый текст.

У классов SpecialPage и  OutputPage достаточно много полезных методов, рекомендую посмотреть документацию, чтобы знать что может пригодиться. Это одни из основных классов и должны быть прочитаны по крайней мере один раз любыми новыми разработчиками

Steady

Ну что, базовый функционал написан, однако, пока это работать не будет – Wiki не знает, что это этот класс необходимо загружать при подключении расширения. Об этом ей необходимо сообщить. Для этого внесем изменение в наш главный описательный файл расширения – extensions/PhoneBook/extension.json. Добавлю туда вот такие строки:

Конструкция AutoloadClasses указывает Wiki, какие классы необходимо автоматически подгружать при подключении расширения и в каком файле находятся эти классы. Теперь wiki будет знать, что при запуске необходимо подключить класс PhoneBookSpecialPage, который расположен в файле extensions/PhoneBook/src/SpecialPage.php.

Но и это еще не все. Класс-классом, однако этого мало. MediaWiki необходимо конкретно указать, что у расширения есть служебная страница, и какой класс ее обрабатывает. А для этого необходимо добавить в extension.json еще одно описание:

Эта конструкция важна именно для вывода служебной страницы. Здесь мы указываем системе идентификатор нашей страницы и какой класс ее обслуживает. Идентификатор должен совпадать с тем, который мы указали в нашем классе PhoneBookSpecialPage в вызове конструктора базового класса SpecialPage, т.е. “Phones”.

Приведу полный текст файла extensions/PhoneBook/extension.json после всех добавлений:

Go

Теперь пора приступать к тестированию того, что получилось. Открываем браузер и пишем http://моявики/Служебная:Phones. Почему Phones а не Телефоны? А потому, что локализация – тема следующей записки. А пока, система ничего про русский язык у нашего расширения не знает. Итак, переходим по адресу http://моявики/Служебная:Phones и, если все правильно сделано, видим радостную картинку:

2018-09-20_13-25-21

Свершилось! Наше расширение задышало. Если не заморачиваться с локализацией и оставить вызов страницы таким как есть сейчас, то можно сразу приступать к реализации основного функционала страницы. Для этого достаточно поменять, согласно необходимой логике, содержимое метода PhoneBookSpecialPage.execute () – добавить необходимые запросы, получить данные из базы, сформировать текст страницы и скормить этот текст методу $out->addWikiText (); Кстати, этот метод принимает на входе wiki-разметку! Так что можно написать (или сформировать программно), например так:

И в результате получить вот такую красивую страницу:

2018-09-20_14-43-54

На этом нетерпеливые могут убежать писать свои служебные страницы, а терпеливым могу предложить следующие части своих заметок – там будет рассмотрена локализация, которая позволит заходить на страницу по адресу http://моявики/Служебная:Телефоны. Что, согласитесь, гораздо приятнее и читабельнее. Так же там я расскажу, как через адрес передавать своей служебной странице параметры, чтобы управлять ею.


<<< Назад, к 1 части Далее, к 3 части >>>

Поделиться с друзьями:
  • Добавить ВКонтакте заметку об этой странице
  • Одноклассники
  • Facebook
  • В закладки Google
  • Мой Мир
  • Twitter
  • LiveJournal
  • Яндекс.Закладки
  • LinkedIn
  • Reddit
  • StumbleUpon
  • БобрДобр
  • Memori.ru
  • МоёМесто.ru

Добавить комментарий

Ваш e-mail не будет опубликован.