Менюшки — 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 можно и как обычно подключаться и выбирать, хоть это небезопасно и не принято так делать.
И там они будут доступны в соответствующих переменных ($first, $second)