Добрый день. Очень понравилась библиотека для работы с Базами данных — xPDO. Попробовал запустить ее работу на чистом PHP-коде, на основе тех статей, которые прочитал про xPDO. Вот так создал подключение (добавив только кодировку с БД): $xpdo = new xPDO('mysql:host=localhost;dbname=db',"user","pass", array ( XPDO::OPT_CACHE_PATH => 'cache/', XPDO::OPT_TABLE_PREFIX => '', XPDO::OPT_HYDRATE_FIELDS => true, XPDO::OPT_HYDRATE_RELATED_OBJECTS => true, XPDO::OPT_HYDRATE_ADHOC_FIELDS => true, XPDO::OPT_VALIDATE_ON_SAVE => true, ), array ( PDO::ATTR_ERRMODE => PDO_ERRMODE_SILENT, PDO::ATTR_PERSISTENT => false, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'" ) );
... И все заработало… include("dbConnection.php"); $content = $xpdo->getObject('MyContent', 1); if($page) { echo "Страница - ".$content->name; } else { echo "Ничего не найдено :("; } Получилось также работать с limit(), where(); Но при попытке создавать Join-запросы — ничего не выводиться. Т.к. проблема, как понимаю в том, что у меня есть названия таблиц — например вот такого формата — «table_name_users», т.е. с нижними подчеркиваниями. И соответственно в запросах надо где-то использовать TableNameUsers, а где то — (в join) — использовать — table_name_users и тогда запрос проходит успешно. Можно ли как-то настроить xPDO так, что бы можно было везде использовать один и тот же формат названия таблиц в запросах — TableNameUsers? — Спасибо.
В свое время мы с Ваней ака vanchelo работали над парочкой проектов, и там надо было использовать каптчу. Гугловую рекаптчу не охото было использовать, так как лень было регистрировать сайт в гугле, и Ваня там запилил свою каптчу. Но она не была оформлена в установочный пакет. Сегодня я подправил пару моментов, добавил системные настройки, чанк для вывода картинки, сниппет и процессор для проверки кода и оформил это в пакет modCaptcha. Все работает. Ване огромное спасибо за исходный код! Вызов каптчи: просто чанк modcaptcha. Проверка доступна двумя способами:
Кстати, есть еще вариант: если предполагается, что контент-менеджер будет работать только с одним конкретным разделом, можно в настройках пользователя задать tree_root_id = id раздела. Тогда он в дереве будет видеть только этот раздел и его дочерние документы. Указать сразу несколько разделов не получится.
Если делать по тому мануалу, и по общей системе, как это заведено в MODX-е, то только определив документы в различные группы ресурсов. Да, это крайне не удобно по многим причинам, но только так. Другой же, более разумный в этом случае способ — это разруливание на уровне плагина в момент попытки открытия документа для редактирования. Вот пример такого плагина: <?php
switch($modx->event->name){
case 'OnManagerPageBeforeRender':
switch($scriptProperties['controller']->config['controller']){
/*
Проверяем права на редактирование документов
*/
case 'resource/update':
// Проверяем наличие настройки allow_to_update (задается в настройках пользователя)
// В ней мы перечисляем, какие документы пользователю можно редактировать
// Если настройка задана, но id документа отсутствует в перечисленных разрешенных,
// То возвращаем ошибку доступа
if($allow_to_update = $modx->getOption('allow_to_update')){
if(!is_array($allow_to_update)){
$allow_to_update = explode(",", $allow_to_update);
$allow_to_update = array_map('trim', $allow_to_update);
}
//
if(!in_array($scriptProperties['controller']->scriptProperties['id'], $allow_to_update)){
$scriptProperties['controller']->failure('Доступ запрещен');
return;
}
}
break;
}
//print_r($scriptProperties['controller']->config);
//print_r($scriptProperties['controller']->scriptProperties);
break;
} Но это, что называется, «защита от дурака», то есть этот метод позволяет на уровне интерфейся рулить что можно открывать, а что нельзя (для удобства менеджера), но ничто не мешает ему отправлять Ajax-запрос на редактирование с указанием произвольного id. То есть этот метод не до конца защищает. Защита же на уровне разделения по группам ресурсов более надежная, ибо работает на уровне самого объекта ресурса, где би и как бы его не получили, а не просто на уровне рендеринга страницы редактирования. Для вас этот плагин просто как пример. Там вам придется свои более сложные условия писать, типа перебрать всех родителей ресурса, и если это новость, то ее редактировать можно. А так же не забудьте таким манагерам отключить разрешение быстрого редактирования страниц, ибо этот плагин там не сработает.
Всего-то навсего нужно API внимательно изучить, чтобы знать как что вызывать и что вообще можно вызвать, а далее уже прикручиваем все что вздумается Все так! С учетом того, что в Smarty-шаблонах нам полностью доступен объект $modx, делать там можно все, что угодно. До разраба мне конечно дaлеко, да и не за этим я здесь, просто захотел себе да и знакомым сайт создать, будучи даже и близко не шаря в программировании. А вот это уже чуть сложнее. Дело в том, что наши технологии как раз больше рассчитаны на программистов, и требуют хоть каких-то навыков в программировании.
Подскажите пожалуйста, как разрешить контент менеджеру редактирование только определённых ресурсов (и их подресурсов) в дереве. Например дать право управлять только новостями и не показывать разделы относящиеся к каталогу. Доступ контент менеджеру настроил по этому мануалу bayguzin.ru/main/uroki/uroki-modx-revolution/nastrojka-admin-paneli-klienta-modx-revo.html
Всего-то навсего нужно API внимательно изучить, чтобы знать как что вызывать и что вообще можно вызвать, а далее уже прикручиваем все что вздумается, MODX очень гибкий и вместе с тем отличная площадка для разработчиков. Тут даже думать интересно становиться) До разраба мне конечно дaлеко, да и не за этим я здесь, просто захотел себе да и знакомым сайт создать, будучи даже и близко не шаря в программировании. Считаю что у ModX хорошее будующее)
Добрый день. 1. Как я уже не однократно упоминал, не смешивайте вместе MODX- и Smarty- теги. Smarty отрабатывается сразу, а MODX-теги по сути только в конце, когда MODX-парсер полностью проходится по результату отработки шаблона. 2. Чего-то здесь не хватает. Вот в цикле отрабатывается, но в него не передается никакого меняющегося параметра. В чем логика? 3. Как-то вы все всё сильно усложняете… Почему не обработать просто значение MIGX-TV-параметра на уровне процессора и не набить все потом аккуратно в шаблоне? Вот пример процессора и шаблона. И никаких сниппетов.
Добрый день поскажите как заставить вывестишь migx в результатах выборки вот мой код {processor action="web/getdata" ns="modxsite" params=$params assign=result} {if $result.success}
{foreach $result.object as $object}
<li>
<span class="hideCollapseContent">{$object.pagetitle}</span>
<div class="collapseInnerWrap clearfix width25Wrap photoreportsItemWrapper">
{$object.content}
[[getImageList?&tvname=`expan`&tpl=`plus_foto`]]
</div>
</li>
{/foreach}
{/if} [[getImageList?&tvname=`expan`&tpl=`plus_foto`]] вот соотвественно и вывод migx
Странное дело… Ну я из репы вообще редко тяну пакеты. Я разворачиваю готовый сайт и все, там сразу все есть. И все работает.