Пара вопросов о процессорах в своём компоненте
Василий, привет!
Подскажи, пожалуйста, — пишу пакетик. Есть папка core/components/MyPackage/processors/. В ней папки web и mgr.
И есть процессор вывода списка чего-либо. Принцип его работы одинаков и для контекста mgr, и для web.
1. Если этот процессор положить в обе папки (и в /web и в /mgr), то, при необходимости правок, придётся поддерживать обе копии. Так и должно быть или есть какие-то варианты?
2. Если вариантов нет, и обращаясь к процессору через коннектор, то, как я понимаю, метод handleRequest сам разрулит из какой папки грузить процессор — /web или /mgr. А если на сайте активен другой контекст (не web и не mgr)? Ведь папки с нужным контекстом нету. Тогда обращение ajax'ом с фронта к коннектору отпадает?
3. И получается, что, при вызове процессоров в сниппетах/своих классах, в runProcessor без вариантов указывать путь к папке /web?
Подскажи, пожалуйста, — пишу пакетик. Есть папка core/components/MyPackage/processors/. В ней папки web и mgr.
И есть процессор вывода списка чего-либо. Принцип его работы одинаков и для контекста mgr, и для web.
1. Если этот процессор положить в обе папки (и в /web и в /mgr), то, при необходимости правок, придётся поддерживать обе копии. Так и должно быть или есть какие-то варианты?
2. Если вариантов нет, и обращаясь к процессору через коннектор, то, как я понимаю, метод handleRequest сам разрулит из какой папки грузить процессор — /web или /mgr. А если на сайте активен другой контекст (не web и не mgr)? Ведь папки с нужным контекстом нету. Тогда обращение ajax'ом с фронта к коннектору отпадает?
3. И получается, что, при вызове процессоров в сниппетах/своих классах, в runProcessor без вариантов указывать путь к папке /web?
Комментарии: 6
1. Если они прям одинаковые, то один может include и extends другой.
2. Через коннектор обращаться нужно только с админки. С фронтенда — через свой сниппет или класс, который будет runProccessor, откуда скажешь. Зачем давать шанс хакерам найти уязвимость в коннекторе, как уже бывало?
3. См. пункт 2.
2. Через коннектор обращаться нужно только с админки. С фронтенда — через свой сниппет или класс, который будет runProccessor, откуда скажешь. Зачем давать шанс хакерам найти уязвимость в коннекторе, как уже бывало?
3. См. пункт 2.
1. А если всё-таки дублировать классы, то у них и названия классов должны быть разными?
Надо проверить.
По остальным пунктам — спасибо большое!
Надо проверить.
По остальным пунктам — спасибо большое!
1. В принципе, пофиг. Ты же не будешь запускать в одной итерации оба процессора?
Но для порядка, конечно, лучше давать разные имена.
Но для порядка, конечно, лучше давать разные имена.
1. Конечно, нет)
Кстати, тут у меня ещё один волнующий меня вопрос назрел.
Как быть в ситуации, когда пользователю надо показать не все поля из строки таблицы компонента?
Т.е. юзеру одной группы показывать часть полей строки, юзеру другой группы — другую часть.
Какие мысли приходят мне:
1. Создать свою политику.
2. Создать настройку, в которой указать список необходимых полей.
3. Назначить политику нужной группе.
4. В 'list'-процессоре проверять эту политику и отдавать либо все данные, либо только указанные в настройке.
5. Ну и проверку этой политики во всех остальных нужных процессорах.
Может есть какие-то best practice по такому вопросу?
Кстати, тут у меня ещё один волнующий меня вопрос назрел.
Как быть в ситуации, когда пользователю надо показать не все поля из строки таблицы компонента?
Т.е. юзеру одной группы показывать часть полей строки, юзеру другой группы — другую часть.
Какие мысли приходят мне:
1. Создать свою политику.
2. Создать настройку, в которой указать список необходимых полей.
3. Назначить политику нужной группе.
4. В 'list'-процессоре проверять эту политику и отдавать либо все данные, либо только указанные в настройке.
5. Ну и проверку этой политики во всех остальных нужных процессорах.
Может есть какие-то best practice по такому вопросу?
Нет, все верно, только так.
Только учти, что стандартный list процессор данные отдает через xPDOObject::toArray() — это покажет все поля. xPDO довыберет те колонки, которые ты не выбрал.
Поэтому нужно или работать через PDO (получать только нужные столбцы), или из объекта через get() в цикле.
Лично я а таких случаях использую PDO — и быстрее и удобнее.
Только учти, что стандартный list процессор данные отдает через xPDOObject::toArray() — это покажет все поля. xPDO довыберет те колонки, которые ты не выбрал.
Поэтому нужно или работать через PDO (получать только нужные столбцы), или из объекта через get() в цикле.
Лично я а таких случаях использую PDO — и быстрее и удобнее.
Да, про это слышал. Кастомный селект — значит только PDO :-)
Спасибо ещё раз!
Спасибо ещё раз!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.