Установка как ВикиФермы

Администрование ВикиФерма это два или более вики-сайта, запущенных на одном веб сервере и использующих одну и ту же кодовую базу. Другими словами, ВикиФермы — это группа сайтов, использующая один-единственный экземпляр кода ядра PmWiki, на котором они работают. Технически это означает, что движок разделяется на две части: «ядро» или «родительская ферма», содержащая проверенный стандартизированный и документированный код; и «дочерняя» вики содержащая только кастомизацию относительно ядра.

Зачем нужны ВикиФермы?

Использование ВикиФерм вместо нескольких независимых установок системы целесообразно для:

  • упрощения администрирования: при развитии близких проектов, вы внедряете новую фичу на родительскую ферму, и она автоматически начинает работать на всех дочерних;
  • упрощения поддержи и обновления проектов: фиксы багов, обновление ядра системы можно производить в одном месте;
  • поддержки самодисциплины при кодинге. Поскольку программирование под ВикиФермы требует более глубокого понимания архитектуры системы, вы скорее всего не сможете написать код неправильно: в дочерних вики он не заработает;
    • тут, видимо, понадобится пример: если у вас 4 сложных сайта, и вы внедряете в каждый их одну и ту же новую фичу, то фича должна быть написана так, чтобы на каждом проекте она различалась только своей конфигурацией, но не основным кодом; иначе дальнейшая поддержка превратится в муку. ВикиФермы — простейший способ создать необходимую экосистему и заодно систему самотестирования;
  • создания групп схожих сайтов отличающихся только контентом (см. www.memofilm.ru );
  • создания проектов с усложненной URL-структурой, например, трехуровневой.

ВикиФермы и Rext

Rext разработан с учетом и в максимальном согласии с концепцией ВикиФерм. Rext может использоваться в качестве «родительской» фермы, на ее основе могут создаваться «дочерние» вики. Код «дочерних» вики будет содержать почти только то, чем они отличаются о "родительской", а именно:

  • контент сайта, как минимум (иначе зачем вообще создавать сайт :));
  • html-код макета дизайна, только если требуется логическая модификация верстки;
  • css/less код, только если требуется художественная стилизация;
  • возможно какие-то свои Рецепты и функционалы, только если они нужны в контексте данного сайта.

При этом всё оригинальное ядро PmWiki, весь код Rext (включая режим редактирования) будут использовать размещены только на «родительской» ферме в единственном экземпляре.

Установка в качестве родительской ВикиФермы

Отличается от простой установки лишь тем, что необходимо добавить $rextMaster = true; в самое начало корневого index.php .

Пример. Предположим, вы собираетесь разработать два сайта example.com и example2.com, используя вики-фермы. Тогда по-умолчанию рекомендуется следующая конфигурация:

  • придумайте домен для родительской фермы, например farm.example.com. На хостинге этот домен должен быть размещен как отдельный независимый сайт в своей собственной директории. На этом домене разверните Rext и поправьте index.php;
    • в дальнейшем этот сайт может не использоваться, в принципе после первоначальной настройки системы, можно вообще отключить PHP для домена farm.example.com;
  • теперь создайте оставшиеся два домена example.com и example2.com. На хостинге они должны располагаться каждый в своей директории, соседствующих с farm.example.com;
  • теперь на каждом из созданных сайтов разверните Дочерние фермы (см. ниже).

В результате получится два независимых сайта, использующих один и тот же исходный код из farm.example.com.

Запуск Дочернего сайта фермы

Дочерние вики-сайты содержат в себе минимально необходимый набор файлов (например, два), основной массив кода они стремятся наследовать от родителя. Все необходимые для своей работы файлы Дочерняя ферма создаёт автоматически.

Дочерняя вики также может содержать свой собственный набор дополнительных Рецептов, кастомизацию функционала, дизайн и контент. Дочерняя вики в любой момент может быть легко отделена от родителя и стать отдельным независимым сайтом, или новой родительской фермой. Посмотрите официальную документацию чтобы узнать подробности.

Запуск дополнительного проекта с использованием первого в качестве фермы:

  1. создайте новый сайт на том же хостинге, где расположена ферма;
  2. в корневой директории Дочерней фермы создайте файл index.php примерно следующего содержания: <?php include_once('../farm.example.com/pmwiki.php'); . Это относительный путь до скрипта PmWiki основного сайта (farm.example.com);
  3. создайте файл .htaccess следующего содержания:
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Z0-9\xa0-\xff].*)$ index.php?n=$1  [QSA,L]

К ни странно, это всё! Изучите документацию, чтобы продолжить работу с созданным сайтом.

Ограничения:

Макет дизайна остается на родительской ферме и не может быть измененен

Чтобы снять это ограничение:

  • скопируйте из родительской фермы директорию pub/skins/thisSite и переименуйте ее и вложенные файлы, придумав новое уникальное имя;
  • в файле local/config.php подключите новый шаблон вот так: if (!$ph_keep_core && $GLOBALS['action'] != 'edit') $Skin = 'newskin'; , где "newskin" - это придуманное только что имя шаблона.

CSS/LESS код остается на родительской ферме и не может быть изменен, а less-компилятор будет работать только через родителькую ферму

Чтобы снять это ограничение и получить полный контроль над дизайном сайта, необходимо дополнительно скопировать LESS-код и LESS-компилятор из родительской фермы. Процесс выглядит примерно так:

  • скопируйте директорию /pub/!phph целиком
    • рекомендуется переименовать все файлы с "thisSite" в соответствии с именем вашего нового tmpl-макета
  • скопируйте директорию /phphp/less-compiler
  • в tmpl-макете дизайна замените все переменные $FarmPubDirUrl на $PubDirUrl