в случае со Smarty я в чанках сделал категорию tplTemplates, в которых добавляю чанки с опцией «статичный», «источник файлов» = медиасурс Templates и указываю в «Статичный файл» желаемое имя.tpl) в итоге — логика взаимодействия в админке с tpl как с чанками модыкса (особенно удобно тем, что tpl-чанки и php-шаблоны отображаются слева в одном дереве), логика хранения-использования — чистый смарти, т.е. на производительность не влияет.
Интересно было бы глянуть на build скрипт, для сборки.
заинтересован разобраться и сделать пакетом для modx. вопрос — это нужно заказчику (и соотв. есть жесткие сроки выполнения) или это для расширения функционала сборок клуба (и соотв. нет требований и ограничений)?
Specialy for Mark Hamstra на сайте я ввел сегодня мультиязычность, добавив для начала английский язык, но в дальнейшем можно будет добавить и другие языки.
Напомню, Марк — один из команды MODX, человеку, которому мы обязаны появлением во всех отношениях «классных» процессоров. Марк — очень позитивный человек и охотно идет на контакт, плюс к этому обладает отличными техническими знаниями. Думаю, будет правильно, чтобы хотя бы переводом основных пунктов меню и кнопок, мы облегчили ему процесс общения на нашем сайте. Ждем сегодня Марка на сайте :-) И будем надеяться, вслед за ним придут и другие мировые MODX-специалисты. По технической реализации (наверняка многим будет интересно, ведь мультиязычность — далеко не закрытый вопрос для MODX-еров).
На этом сайте используется modLivestreet (то есть связка MODX+Livestreet), потому практически для всего есть русский и английский словари. Остается только передать в конфиг текущий cultureKey. Для этого в stable-конфиг Livestreet пишем следующее:
switch($modx->getOption('cultureKey')){ case 'en': $config['lang']['current'] = 'english'; break; default:; }
Но теперь надо обеспечить постоянно актуальный и индивидуальный cultureKey, так как как наверняка многие заметили, у нас нет здесь уникальных УРЛ-ов типа en/ и т.п., есть только адрес смены языка ?cultureKey=ru/en. На днях я как-то ковырял механизм MODX-а по словарям, и нашел такой интересный кусочек кода в классе MODx:
protected function _initCulture($options = null) { $cultureKey = $this->getOption('cultureKey', $options, 'en'); if (!empty($_SESSION['cultureKey'])) $cultureKey = $_SESSION['cultureKey']; if (!empty($_REQUEST['cultureKey'])) $cultureKey = $_REQUEST['cultureKey']; $this->cultureKey = $cultureKey; if ($this->getOption('setlocale', $options, true)) { $locale = setlocale(LC_ALL, null); setlocale(LC_ALL, $this->getOption('locale', null, $locale)); } $this->getService('lexicon', $this->getOption('lexicon_class', $options, 'modLexicon'), '', is_array($options) ? $options : array()); $this->invokeEvent('OnInitCulture'); }
Что здесь примечательного? Как видим, MODX устанавливает значение переменной $this->cultureKey = $cultureKey, которое берет из массива $_SESSION или $_REQUEST. То есть эту переменную всегда можно перегрузить, просто отправив тот же GET-запрос cultureKEy=lang. Но что еще более интересно, то что эта переменная не используется больше нигде))) (только в одном системном процессоре). А $modx->config->cultureKey по прежнему берется из системных настроек. Но это все равно не мешает нам ее использовать в тех же плагинах. Я создал плагин на событие OnHandleRequest и написал:
<?php if($modx->context->key == "mgr"){return;} if(!empty($_REQUEST['cultureKey']) AND in_array($_REQUEST['cultureKey'], array('ru', 'en'))){ $_SESSION['cultureKey'] = $_REQUEST['cultureKey']; } $modx->setOption('cultureKey', $modx->cultureKey); $modx->setOption('cache_prefix', "cache_{$modx->cultureKey}");
То есть этот плагин каждый раз устанавливает актуальный cultureKey исходя из значения $modx->cultureKey. Плюс к этому смотрит, если передан языковой идентификатор, то пишет его в сессию.
UPD: Обновил код плагина, так как надо было учесть кеширование документов, поэтому в плагин добавил смену кеш-префикса.
Ох какая замечательная сборочка, особенно меня радует группа ресурсов «Технические страницы».) Спасибо, забираем)
В продолжение темы про modxcloud и siphonlabs.
Многие неправильно истолковали слова Марка, подумав, что он уходит делать новый форк и прекращает работу с MODX. Я сейчас с ним разговаривал на этот счет, и он очень сильно удивился, и поспешил опровергнуть эту информацию. По его словам, он ни в коем случае не прекращает работу над MODX (и над Revolution в частности). Он просто уходит делать свой собственный бизнес, чтобы быть финансово независимым, и сможет спокойно работать над MODX. И modmore — это не форк, это не отдельная ветка и т.п. Это просто бизнес. Но MODX дробить никто не собирается.
Так что многие могут успокоиться. То, что ребята ушли свой бизнес делать, Марк займется бизнесом и т.п., в этом нет ничего плохого. Про MODX никто не забудет. И с Джейсоном мы вчера один серьезный недочет обсуждали, и это будет обязательно пофиксено. Работа продолжится. И небо скоро опять будет чистым :-)
Нет, там на php+mysql все, node.js не используется. Сейчас создам снапшот и маякну.