Информационная связь с потребителем, безусловно, реально стабилизирует социометрический рейтинг, не считаясь с затратами. Стиль менеджмента стабилизирует конвергентный анализ зарубежного опыта, оптимизируя бюджеты. Емкость рынка вырождена. Стратегический маркетинг, не меняя концепции, изложенной выше, основан на тщательном анализе данных.
А если серьёзно, это просто блог.
Тогда, возможно, Вы попали туда куда нужно.
Я занимаюсь созданием сайтов "под ключ".
Оцените качество работы, посмотрев
портфолио. Если Вы не рассчитываете на демпинг, связаться со мной можно при помощи формы обратной связи.
Приучаем MODx хранить код в файлах
В системе MODx все шаблоны и чанки (а также некоторые сниппеты, плагины) хранятся в базе данных. Редактировать их в админке очень неудобно. Для подсветки синтаксиса есть плагин EditArea, но во-первых он работает не так быстро как хотелось бы, а во-вторых функционала маловато. Куда удобнее было бы, если бы код хранился в файлах, ведь их можно открывать в редакторе, к которому привык. Погуляв на форуме, я нашел несколько решений этой задачи. Оказалось, что совсем не обязательно вносить изменения в код системных файлов.
Шаблоны и чанки
Сразу хочу предупредить. Когда код хранится в БД после редактирования в админке, кэш сайта автоматически очищается. После редактирования файлов кэш нужно будет очищать вручную (кнопка "Очистить кэш").
На форуме MODx я нашел вот такой простой сниппет:
<?php // Snippet to include files from filesystem if ( !isset($file) || $file== "" ) return "No file specified."; //check if there's a file given. //Start the buffer ob_start(); //include include $file; //get contents from the buffer $ob_contents = ob_get_contents(); //and kill/delete the buffer ob_end_clean(); //return it to MODx return $ob_contents; ?> |
С помощью него можно "инклудить" любые файлы. Например можно в системе создать шаблон с одной строчкой
[[includeFile? &file=`assets/templates/mytemplate/mainpage.tpl`]]
Т.е. теперь в БД будет храниться только одна строка кода, а весь код шаблона будет храниться в файле. Также в него можно вставить другие файлы (чанки), например код "шапки" (header) и "подвала" (footer).Как же быть с чанкими сниппетов? Два из основных сниппета Ditto и Wayfinder позволяют подключать чанки таким способом (пример для Wayfinder):
&rowTpl=`@FILE:assets/templates/mytemplate/menu_rowTpl.tpl` |
Для сниппетов, которые эту возможность не поддерживают можно использовать такую функцию:
function fetchTpl($tpl){ global $modx; $template = ""; if($modx->getChunk($tpl) != ""){ $template = $modx->getChunk($tpl); }else if(substr($tpl, 0, 6) == "@FILE:"){ $tpl_file = MODX_BASE_PATH . substr($tpl, 6); $template = file_get_contents($tpl_file); }else if(substr($tpl, 0, 6) == "@CODE:"){ $template = substr($tpl, 6); }else{ $template = FALSE; } return $template; } |
В коде сниппета нужно заменить все вызовы функции getChunk() на fetchTpl() и вставить код функции. Кстати, в новой версии (0.9.2) сниппета Shopkeeper это уже сделано.
Сниппеты и плагины
Все коды сниппетов можно тоже вынести в файлы, а в админке в поле "Код сниппета" вставить:
<?php
require 'assets/snippets/mysnippet/mysnippet.php';
?> |
Для безопасности в файле с кодом сниппета в самом верху нужно вставить такой код:
defined('IN_PARSER_MODE') or die(); |
Это подходит также для плагинов.
Вот и всё. Эти решения, конечно, не идеальные, зато без "хака" системы.

Написать комментарий
Ответов: 1
Ответ #2 дата : Thu February 04, 2010, 20:34:30
Ответов: 1
Ответ #1 дата : Thu February 04, 2010, 11:26:37