Как стать автором
Обновить

Комментарии 9

Подход я бы назвал заслуживающим право на жизнь, но очень уж кустарным. Не чувствуется в нем той легкости, которую дает MODX для программиста. Я бы поступил по-другому:
  1. Ставим расширение CMP Generator и натравливаем его на свои таблички в БД
  2. В сгенерированном пакете создаем процессоры для всех необходимых операций из CRUD (для списков например наследуем от modObjectGetListProcessor и заполняем classKey именем свой таблички).
  3. Накручиваем безопасность стандартными методами процессора.
  4. Если нужна статика: Зовем процессор из сниппета и отображаем результат чанками
  5. Если нужна динамика:
    1. Создаем сниппет чтобы JSON от запуска процессора отдавать как ответ. Сниппет на страницу с типом text/json
    2. Зовем страничку через AJAX и рендерим результат любым клиентским стеком (Backbone+Knockout+Knockback или Angular)


Это в моем понимании более MODX-way.
Безусловно, для стабильного проекта ваш вариант подходит лучше.
Но мой нынешний заказчик, к сожалению, не имеет четкого ТЗ и выдумывает функционал на ходу. Так что для меня была наиболее важна возможность быстро добавить/отредактировать/удалить функционал, что, имхо, в моем варианте делается проще, по крайней мере мне. Однако спасибо за указанный вариант, приму его к сведению и в более адекватных проектах буду применять.
Зря Вы упоминаете в статье xPDO, т.к. вы его не используете. xPDOCriteria() можно заменить на $this->modx->prepare() + bindValue() и всё будет работать. А использовать xPDO в данном случае было бы полезно.
Зря Вы упоминаете в статье xPDO, т.к. вы его не используете.

Но разве modx не является прямым наследником xPDO?
xPDOCriteria() можно заменить на $this->modx->prepare() + bindValue()

Способ использования выбран после долгого гугления как лучше составлять запросы к своим таблицам в базе, не связанным с modX, в большинстве мест советовали делать именно так )
А вообще, хотелось бы чего-то такого,
$sql="SELETCT * FROM ... WHERE a=:a AND b=:b";
if($result=$modx->prepare($sql)->execute([":a"=>1,":b"=>2])->fetch(PDO::FETCH_ASSOC))//и чтобы при неудавшемся создании  
{//какого-то объекта просто возвращалось false, а не исключение/ошибка
     ...//работа с бд
}

но у меня сроки, поэтому времени на поиски более оптимального варианта пока нет.
Вы используете чистый PDO. xPDOCriteria() это просто какая-то оберточная функция.
Вот тут про xPDO:
habrahabr.ru/post/127722/
habrahabr.ru/post/123072/
Но для создания модели таблицы можно использовать CMP Generator, как советовали выше.
Понятно. Ввели в заблуждение исходники класса modx:
...
/**
 * This is the MODX gateway class.
 *
 * It can be used to interact with the MODX framework and serves as a front
 * controller for handling requests to the virtual resources managed by the MODX
 * Content Management Framework.
 *
 * @package modx
 */
class modX extends xPDO {
    /**
...
Спасибо за статью, очень многим приходится обслуживать либо вносить изменения в сайты на ModX и при этом эта CMS не является основной или любимой, вот как раз такие пошаговые туториалы и позволяют глубже понять что и как делать широкой публике. Пусть даже задача не будет стоять именно такой как у вас, но примеры чанков, сниппетов и другого кода, я уверен, помогут многим.
Кстати, а вот такой код из статьи
$modx->sendRedirect($modx->makeUrl(14));//отправляем его на страницу номер 14, именно там у нас вход в систему.

его можно в ModX сделать менее «захардкоденым»?
В таком виде это наиболее универсальный вариант, ведь вряд ли вы удалите страницу авторизации напрямую, а вот дружественную ссылку на нее можете и поменять(например было /login, а стало /login-or-register), что никак не повлияет на этот код.
Однако, если у вас при любом запрете доступа(401) кидает на страницу логина(это надо прописать дополнительно в настройках админки), тогда достаточно написать
$modx->sendUnauthorizedPage(); 
*ошибка 403
Настраивается тут(unauthorized_page):
image

По сути, это ничем почти не отличается, параметр нужен точно так же, просто записан он в другом месте.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации