Комментарии 9
Подход я бы назвал заслуживающим право на жизнь, но очень уж кустарным. Не чувствуется в нем той легкости, которую дает MODX для программиста. Я бы поступил по-другому:
Это в моем понимании более MODX-way.
- Ставим расширение CMP Generator и натравливаем его на свои таблички в БД
- В сгенерированном пакете создаем процессоры для всех необходимых операций из CRUD (для списков например наследуем от modObjectGetListProcessor и заполняем classKey именем свой таблички).
- Накручиваем безопасность стандартными методами процессора.
- Если нужна статика: Зовем процессор из сниппета и отображаем результат чанками
- Если нужна динамика:
- Создаем сниппет чтобы JSON от запуска процессора отдавать как ответ. Сниппет на страницу с типом text/json
- Зовем страничку через AJAX и рендерим результат любым клиентским стеком (Backbone+Knockout+Knockback или Angular)
Это в моем понимании более MODX-way.
+2
Безусловно, для стабильного проекта ваш вариант подходит лучше.
Но мой нынешний заказчик, к сожалению, не имеет четкого ТЗ и выдумывает функционал на ходу. Так что для меня была наиболее важна возможность быстро добавить/отредактировать/удалить функционал, что, имхо, в моем варианте делается проще, по крайней мере мне. Однако спасибо за указанный вариант, приму его к сведению и в более адекватных проектах буду применять.
Но мой нынешний заказчик, к сожалению, не имеет четкого ТЗ и выдумывает функционал на ходу. Так что для меня была наиболее важна возможность быстро добавить/отредактировать/удалить функционал, что, имхо, в моем варианте делается проще, по крайней мере мне. Однако спасибо за указанный вариант, приму его к сведению и в более адекватных проектах буду применять.
0
Зря Вы упоминаете в статье xPDO, т.к. вы его не используете. xPDOCriteria() можно заменить на $this->modx->prepare() + bindValue() и всё будет работать. А использовать xPDO в данном случае было бы полезно.
0
Зря Вы упоминаете в статье 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, а не исключение/ошибка
...//работа с бд
}
но у меня сроки, поэтому времени на поиски более оптимального варианта пока нет.
0
Вы используете чистый PDO. xPDOCriteria() это просто какая-то оберточная функция.
Вот тут про xPDO:
habrahabr.ru/post/127722/
habrahabr.ru/post/123072/
Но для создания модели таблицы можно использовать CMP Generator, как советовали выше.
Вот тут про xPDO:
habrahabr.ru/post/127722/
habrahabr.ru/post/123072/
Но для создания модели таблицы можно использовать CMP Generator, как советовали выше.
0
Понятно. Ввели в заблуждение исходники класса 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 {
/**
...
0
Спасибо за статью, очень многим приходится обслуживать либо вносить изменения в сайты на ModX и при этом эта CMS не является основной или любимой, вот как раз такие пошаговые туториалы и позволяют глубже понять что и как делать широкой публике. Пусть даже задача не будет стоять именно такой как у вас, но примеры чанков, сниппетов и другого кода, я уверен, помогут многим.
Кстати, а вот такой код из статьи
его можно в ModX сделать менее «захардкоденым»?
Кстати, а вот такой код из статьи
$modx->sendRedirect($modx->makeUrl(14));//отправляем его на страницу номер 14, именно там у нас вход в систему.
его можно в ModX сделать менее «захардкоденым»?
0
В таком виде это наиболее универсальный вариант, ведь вряд ли вы удалите страницу авторизации напрямую, а вот дружественную ссылку на нее можете и поменять(например было /login, а стало /login-or-register), что никак не повлияет на этот код.
Однако, если у вас при любом запрете доступа(401) кидает на страницу логина(это надо прописать дополнительно в настройках админки), тогда достаточно написать
Однако, если у вас при любом запрете доступа(401) кидает на страницу логина(это надо прописать дополнительно в настройках админки), тогда достаточно написать
$modx->sendUnauthorizedPage();
0
*ошибка 403
Настраивается тут(unauthorized_page):
![image](https://habrastorage.org/r/w1560/getpro/habr/comment_images/d6c/259/53e/d6c25953ec6f3707e607ab83084aef9c.png)
По сути, это ничем почти не отличается, параметр нужен точно так же, просто записан он в другом месте.
Настраивается тут(unauthorized_page):
![image](https://habrastorage.org/getpro/habr/comment_images/d6c/259/53e/d6c25953ec6f3707e607ab83084aef9c.png)
По сути, это ничем почти не отличается, параметр нужен точно так же, просто записан он в другом месте.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Система доступа к документам для MODX