Менюшки — Wayfinder
Вывод новостей — getResources
Просто правильно пропиши параметры вызовов и вставь в шаблон HTML — вот и готов сайт.
Но как только сайтостроителю надо сделать что-то чуть-чуть другое, он начинает писать свои сниппеты. Вот тут и возникают такие творения
Хотелось бы дать начинающим программистам пару советов. Надеюсь, в комментариях вы предложите еще советы, которые будут полезны. Да и сам я планирую этот топик расширять, добавлять в него решения, советы и прочее, чтобы качество кода на MODX отличалось от того же на Joomla и пр.
Не нужно подключаться к базе и писать свои запросы
MODX построен на xPDO. Это эдакая прослойка между кодом программиста и базой данных. PHP позволяет работать с MySQL, записывать в базу данные, брать их оттуда, но вам не нужно самостоятельно подключаться к базе, писать запросы и прочее. xPDO помимо фильтрации данных (что убережет вас от взлома с использованием SQL-инъекций) предоставляет еще и удобные функции для работы с данными. Для того, чтобы получить данные из базы используйте getObject и getCollection. Используйте API, задавайте вопросы, подскажем, расскажем. Вообще, думаю надо будет расписать в примерах, как использовать getObject и getCollection именно для начинающих.
Ваш сниппет должен что-то возвращать
Допустим, в сниппете вы просто проверяете какое-то значение и на основе его выводите текст:
// Плохо // Хорошо
if ($_SESSION['theme']) { if ($_SESSION['theme']) {
echo $_SESSION['theme']; $output = $_SESSION['theme'];
} else { } else {
echo "none"; $output = "none";
} }
return $output;Да, оба сниппета будут работать, но если код оформлен вторым способом, то этот сниппет можно будет использовать в любом другом месте, например:$fields = $profile->get('extended');
$fields['theme'] = $modx->runSnippet('getTheme'); // Здесь вызываем наш сниппет
$profile->set('extended',$fields);
$profile->save();Таким образом, сниппет getTheme может как выводить значение на страницу, так и подставлять его в значение переменной в любом другом сниппете. Все из-за волшебного слова return.О кешировании
Обязательно прочитайте еще и статью Вызов кешируемых и некешируемых сниппетов в примерах, чтобы понять, как нужно вызывать сниппеты: так [[snippet]] или так [[!snippet]]
P.S.
Предлагаю в комментариях приводить еще примеры наиболее часто встречающихся ошибок.
Оригинал статьи: community.modx-cms.ru/blog/9141.html
Объектная
на php то я знаю как это делается:
$sdd_db_host='localhost';//Имя хоста
$sdd_db_name='namebd';//Название бд
$sdd_db_user='user';//Пользователь
$sdd_db_pass='pass';//Пароль
@mysql_connect($sdd_db_host,$sdd_db_user,$sdd_db_pass);//Подключение
@mysql_select_db($sdd_db_name);//Выбор базы
Но как сделать тоже самое в MODX Revo, чтобы не светить данные для входа в БД в снипете?
Но в любом случае, в MODX можно и как обычно подключаться и выбирать, хоть это небезопасно и не принято так делать.
<?php if(!function_exists('myFunction')) { function myFunction () { return 'hello'; } } return $modx->getChunk('tpl', array('text' => myFunction()));$output = array(); foreach($data as $row) { $output[] = "<tr><td>{$row['name']}</td><td>{$row['price']}</td></tr>"; } return '<table>' . implode(PHP_EOL, $output) . '</table>';И там они будут доступны в соответствующих переменных ($first, $second)