Roadmap

Roadmap — это стратегический план развития системы. Здесь описаны общие цели развития проекта.

Определенно сделаем

Открыть сайт pmwiki.ru

PmWiki.ru позволит систематизировать работу над проектом, собрать всю информацию и исходный код в едином месте.

Перевести на Rext некоторые старые проекты

Позволит показать, на что способна связка PmWiki + Rext.

Прорекламировать разработку

Позволит получить feedback от реальных пользователей. Возможно, найти Инвестора.


Мы попробуем

Продолжать разработку системы есть смысл только в случае роста её популярности.

Разработать несколько готовых концепт-дистрибутивов

  • сайт-контент-дневник | позволяет фиксировать просмотренные фильмы, прочитанные книги, посещенные выставки
  • сайт-фотоархив | позволяет хранить, систематизировать, отбирать фотографии
  • сайт-путешественника | интерактивная карта мира, на которой фиксируют путешествия

Сайты будут распространяться бесплатно как целиком в виде готового дистрибутива, так и в виде Рецепты для встраивания.

Раскрыть исходный код

Выложить на Git исходный код ядра Rext, а также нескольких готовых проектов на базе Rext (таких, как http://www.memofilm.ru/ ) , чтобы все могли ими пользоваться.

Поддержка обновлений и рефакторинг

Создать механизм, позволяющий безопасно обновлять Rext на уже существующих проектах простой перезаписью файлов.

Что нужно для механизма обновлений?

Провести рефакторинг всех рецептов.
Цель рефакторинга: повсеместное разделение кода и конфигурации.

Примерные методы:

  • минимизация числа дополнительных CSS и JS-файлов: если кода мало, перетащить его в PHP;
  • вынесение конфигураций JS-файлов в отдельные файлы так, чтобы их можно было смело менять; вынесение JS-конфигурации в PHP
  • переименовать JS-переменные, они должны начинаться с большой, чтобы их можно было встроить в макет если что.
  • в PHP объявление всего, что относится к конфигурации через SDV()- и SDVA()-функции.

Рассмотрим на примере Wikirama как это должно выглядеть и какие есть проблемы:

1) в phWikirama.php (почти) вся конфигурация уже определена через SDV()- и SDVA()-функции. Это благо, и это позволяет переопределять PHP-конфигурацию из любых файлов основного конфига сайта, не трогая код самого Рецепта.

2) в файле fotorama-ph.js находится дефолтная JS-конфигурация Фоторамы, ее тоже нужно научиться хранить отдельно от кода ядра. Как?

{-а) вынести определение переменной в отдельный файл fotorama-ph-ThisSite.js , который можно опционально подключать через переопределение $Mini['LbFiles'] | плохо, т.к. это лишний запрос к серверу ради нескольких строк
б) ОК, тогда внести переменную в PHP, или тогда уж весь fotorama-ph.js есть смысл загрузить в PHP. Как? В mini.php не предусмотрен механизм добавления когда в $HTMLHeaderFmt / $HTMLFooterFmt , поэтому можно только лишь расширить эти массивы sitewide, т.е. для всего сайта во всех случаях. | тоже плохо, т.к. исходный код сайта замусоревается.-}

Итого: если рецепт предполагает использование собственного wiki-синтаксиса И в нём (в обработчике синтаксиса) не предусмотрена возможность расширения $HTMLHeaderFmt / $HTMLFooterFmt , нет хорошего способа разделить JS-конфиг и JS-код этого рецепта. Поэтому стоит ещё подумать, стоит ли вообще разделять его способами а) или б) ради гипотетических обновлений.

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

Доработать RextPacker
Научить RextPacker создавать "update-patсh", в котором не будет файлов конфигурации (т.е. будет проигнорировано всё с ThisSite в названии)


Всё это довольно сложно, и несколько не вписывается в архитектуру PnWiki. Поскольку необходимость комплексных регулярных обновлений совершенно не очевидна (этом вам не Windows 10), возможно, достаточно сделать полуавтоматический инструмент. Дата установки Rext просто фиксируется где-то в системе. Перед обновлением файлов, скрипт обновления сравнивает дату изменения файла с датой установки Rext. Если выясняется, что тот файл был обновлён, автоматическая замена не производится, предлагается обновить файлы вручную.

Было бы также здорово: