Пара вопросов о процессорах в своём компоненте

Василий, привет!
Подскажи, пожалуйста, — пишу пакетик. Есть папка core/components/MyPackage/processors/. В ней папки web и mgr.
И есть процессор вывода списка чего-либо. Принцип его работы одинаков и для контекста mgr, и для web.

1. Если этот процессор положить в обе папки (и в /web и в /mgr), то, при необходимости правок, придётся поддерживать обе копии. Так и должно быть или есть какие-то варианты?

2. Если вариантов нет, и обращаясь к процессору через коннектор, то, как я понимаю, метод handleRequest сам разрулит из какой папки грузить процессор — /web или /mgr. А если на сайте активен другой контекст (не web и не mgr)? Ведь папки с нужным контекстом нету. Тогда обращение ajax'ом с фронта к коннектору отпадает?

3. И получается, что, при вызове процессоров в сниппетах/своих классах, в runProcessor без вариантов указывать путь к папке /web?
Алексей Карташов
03 сентября 2013, 11:53
modx.pro
2
740
0

Комментарии: 6

Василий Наумкин
03 сентября 2013, 16:37
0
1. Если они прям одинаковые, то один может include и extends другой.

2. Через коннектор обращаться нужно только с админки. С фронтенда — через свой сниппет или класс, который будет runProccessor, откуда скажешь. Зачем давать шанс хакерам найти уязвимость в коннекторе, как уже бывало?

3. См. пункт 2.
    Алексей Карташов
    03 сентября 2013, 16:55
    0
    1. А если всё-таки дублировать классы, то у них и названия классов должны быть разными?
    Надо проверить.

    По остальным пунктам — спасибо большое!
      Василий Наумкин
      03 сентября 2013, 17:08
      0
      1. В принципе, пофиг. Ты же не будешь запускать в одной итерации оба процессора?

      Но для порядка, конечно, лучше давать разные имена.
        Алексей Карташов
        03 сентября 2013, 17:59
        0
        1. Конечно, нет)

        Кстати, тут у меня ещё один волнующий меня вопрос назрел.
        Как быть в ситуации, когда пользователю надо показать не все поля из строки таблицы компонента?
        Т.е. юзеру одной группы показывать часть полей строки, юзеру другой группы — другую часть.

        Какие мысли приходят мне:
        1. Создать свою политику.
        2. Создать настройку, в которой указать список необходимых полей.
        3. Назначить политику нужной группе.
        4. В 'list'-процессоре проверять эту политику и отдавать либо все данные, либо только указанные в настройке.
        5. Ну и проверку этой политики во всех остальных нужных процессорах.

        Может есть какие-то best practice по такому вопросу?
          Василий Наумкин
          03 сентября 2013, 18:10
          0
          Нет, все верно, только так.

          Только учти, что стандартный list процессор данные отдает через xPDOObject::toArray() — это покажет все поля. xPDO довыберет те колонки, которые ты не выбрал.

          Поэтому нужно или работать через PDO (получать только нужные столбцы), или из объекта через get() в цикле.

          Лично я а таких случаях использую PDO — и быстрее и удобнее.
            Алексей Карташов
            03 сентября 2013, 18:13
            0
            Да, про это слышал. Кастомный селект — значит только PDO :-)

            Спасибо ещё раз!
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    6