Программирование
Программирование PmWiki позволяет расширять функционал системы с помощью PHP-кода, а также настраивать массу параметров системы, см. PmWiki:Variables
FAQ
Где писать свой PHP-код?
Архитектура PmWiki предлагает следующие места для размещения PHP-кода:
1) В директории /local/ хранится код локальной конфигурации сайта. В Rext в этой директории уже добавлена некоторая конфигурация, поэтому свой код следует писать в следующие файлы:
а) /config-ThisSite.php — основная конфигурация вашего сайта;
б) /config-ThisSite-finality.php-- часть конфигурации вашего сайта, код которой нужно исполнить в самом конце
в) файлы вида Group.php и Group.Page.php — конфигурация, которая будет применена только к соответствующей Группе или Странице.
См. Конфиг, в нем приведена структура файловой системы и даны пояснения.
2) В директории /cookbook/ хранятся универсальные модули (Рецепты). Рецепты по возможности должны содержать строго ограниченный и хорошо определенный функционал, быть универсальными (т.е. совместимым с абстрактной установкой PmWiki), должны быть написаны в рамках Cookbook:ModuleGuidelines. См. статью Как разрабатывать Рецепты?.
3) В файле /pub/skins/mySkin/mySkin.php следует размещать код, имеющий смысл только в контексте применения скина «mySkin».
Если вы собрались изменить один из существующих файлов, скорее всего это ошибочно и делать этого не следует: при будущих обновлениях системы ваши изменения могут потеряться. Впрочем, на начальном этапе знакомства с PmWiki, компромиссным решением будет записать факт изменения в Историю Сайта. Во многих случаях сайты на PmWiki могут работать без обновления ядра годами.
Как добавлять новую HTML-разметку?
Разметка Rext хранится в файле /local/farmconfig-markup.php, там можно подсмотреть примеры. В Rext предложен следующий принцип ее расширения:
@%html_тег%@ ... @@
.
<new-tag>контент</new-tag>
, wiki-синтаксис должен быть: @new-tag@ контент @@
.
Этот принцип объясняется стремлением обеспечить схожесть с подходом WikiStyles, только вместо «%» использовать «@».
Как вставить блок HTML/JS-кода в контент страницы?
Определите этот код через новую разметку. Например, вот как задать код (:example:)
:
Markup('example', 'directives', '/\\(:example:\\)/', Keep("<div class='example'><p>Here is a <a target='_blank' href='http://www.example.com'>link</a> to <em>example.com</em></p></div>") );
Архитектура и интеграция
Поскольку Rext представляет собой комбинацию Cookbook, Cooks и косметической локальной настройки PmWiki, архитектура проекта не изменилась. Ознакомиться с ней можно в соседнем разделе: Варианты интеграции.
Единственное важное отличие, которое можно называть архитектурным, это наличие отдельного настраиваемого режима редактирования, что позволяет тонко подстраивать интерфейс под нужды именно вашего проекта.