Программирование

Программирование 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_тег%@ ... @@.

Например: для такого 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, архитектура проекта не изменилась. Ознакомиться с ней можно в соседнем разделе: Варианты интеграции.

Единственное важное отличие, которое можно называть архитектурным, это наличие отдельного настраиваемого режима редактирования, что позволяет тонко подстраивать интерфейс под нужды именно вашего проекта.

Связанные статьи: