К содержанию

Узкие места в разработке своих компонентов

Первое знакомство с Revo у меня было год назад (примерно), около месяца я ломал свой мозг о это чудо (да-да, ибо такой наплыв информации — xPDO/PDO, ExtJS, RevoAPI, etc, сильно корежит когнитивную карту мира), под предлогом работы и учебы я вяло «стёк» с рельсов Revo-локомотива.

На данный момент появилось достаточно свободного времени для дальнейшего «вкручивания помидоров» своему сознанию. Перелопатил много постов, нарисовал проект памятника Васе в тетрадке (такой труд… никакой иронии прошу заметить) и его блогу. Но, хоть в целом картина разработки компонентов ясна, остаются «узкие места», ответы на которые можно получить (кажется мне) методом «тыка» и задаванием вопросов без оглядки на их глупость, к чему я и подвожу читателя в этом эпично занудливом (уже) сабжике)

Как создавать свои компонеты?

В абсолютной тишине громогласно вопияет риторический вопрос мне — «А где был твой мозг, когда ты лопатил посты по теме?!» — «Рисовал памятник же *заливается краской*»…

Разобью вопрос:
1) Как выглядит архитектура компонента?
2) Как работает компонет, то есть клик на кнопку «добавить запись» на странице компонета в админке что происходит при отсылке POST запроса с mgr/action=действие, как оно (действие) обрабатывается?
3) Формирование json-массивов данных для extJS при возврате ответа (формировании грида скажем), где происходит и как?
4) Взаимодействие ExtJS с php кодом компонета, то же интересует.

5) *Моя совесть не позволяет плодить вопросы более*
Алексей
Алексей
06 мая 2013, 10:01
modx.pro
3 732
Реклама

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

Василий Наумкин
Василий Наумкин Администратор
06 мая 2013, 15:31
1. Скачать PhpStorm, 30 дней триала
2. Скачать modExtra
3. Настроить PhpStorm на удобную работу с Рево (требуется подписка)
4. Учиться, учиться и еще раз учиться.

Многое должно проясниться. Без IDE разбираться, как работают компоненты Рево могут только очень крепкие мозгом люди.
    Алексей
    Алексей Старожил
    06 мая 2013, 15:33
    Спасибо
      Василий Наумкин
      Василий Наумкин Администратор
      06 мая 2013, 17:46
      Кстати, ты вот эту заметку-то читал? Там наиболее подробно расписано всё, что тебя интересует.
        Алексей
        Алексей Старожил
        06 мая 2013, 21:05
        Да, читал, правда этот вариант без _builder'а, modExtra с твоим авторством лучше.
          Андрей Иванов
          Андрей Иванов Проверенный
          05 января 2015, 18:37
          Сорри, что вмешиваюсь в разговор :-) С Наступившим!
          А данная заметка в настоящее время актуальна?
    Andrey Shin
    Andrey Shin Старожил
    06 мая 2013, 20:43
    У меня получилось при помощи этого rtfm.modx.com/display/ADDON/CMPGenerator
      Алексей
      Алексей Старожил
      06 мая 2013, 21:03
      Опаньки. Щас пощупаем-с. Я не надеюсь на мега автокомплит кода, но было бы неплохо заиметь инструмент, сокращающий время разработки базовых вещей (то есть хочу увидеть а-ля генератор заготовок более «широких» и «глубоких», чем modExtra)

        Саша Пекшев
        Саша Пекшев Старожил
        06 мая 2013, 21:18
        CMPGenerator мне тоже понять структуру просто создать базовый а там уже как обычный PHP5 классы и xPDO если знать, то вполне понятно что куда+ свои таблицы прятать и тд
          Мордынский Николай
          06 мая 2013, 22:26
          на мой взгляд проблема не впхп а в ExtJs. По нему есть спецификация но живых примеров очень мало те что на сайте весьма синтетические.
          Вот перевод вроде бы с рабочими корректировками создания собственного приложения на базе doodles.

          modx.ws/razrabotka-dopolneniya-v-modx-revolution
          modx.ws/razrabotka-dopolneniya-modx-revolution-2

          Я 2 месяца назад пытался разобраться в этом деле по мануалу на modx.com — не получилось там во 2 части мануал для 2,2 версии и есть отличия в итоге если по мануалу делать не выходит каменный цветок.
          Эти 2 ссылки кажись с корректировками на свежую версию.

            Саша Пекшев
            Саша Пекшев Старожил
            06 мая 2013, 22:34
            Еще не читал, но видно полезно, Про себя я имел виду базовые знания с помощью него я хотя бы понял как работать со своим дополнением (классом и своей таблицей) внутри modx Api через xpdo. То есть создать свой класс на основе скажем modUser, и внести в свою таблицу некоторые значения из своего класса через xpdo и что бы он подгружался при создании общего modx класса.
            До этого даже как то трудно было понять структуру и описание класса и как она работала и все эти схемы и тд, щаз уже проще ) очень плоха документация на этот счет или очень быстро устаревает или я вернее просто попал на изменения с 2.0 и 2.2
              Мордынский Николай
              06 мая 2013, 22:55
              доку не меняли давно и она во многих местах устарела… на мой взгляд, а руки у авторов не доходят переписать
              Алексей
              Алексей Старожил
              06 мая 2013, 22:47
              Спасибо за ссылкиу
                Алексей
                Алексей Старожил
                06 мая 2013, 22:52
                Читаю, пробую, однозначно в копилку.

                Просто, не смотря на блог Васи, информации плана Best practice, рабочих решений (не исследований и hello world скудных примеров, etc) мало, и она «размазана» по сети)

                Данный блог конечно «тащит».
                  Alex Vakhitov
                  Alex Vakhitov Проверенный
                  06 мая 2013, 23:48
                  Вся проблема в лени (: вообще документации полно, заходишь на сайт extjs и читаешь там все доступно и понятно написанно, если есть понимание структуры mvc и базовые знания js то это совсем не проблема
            Алексей
            Алексей Старожил
            06 мая 2013, 22:46
            У меня получилось при помощи этого rtfm.modx.com/display/ADDON/CMPGenerator
            Удобно, очень.
            1) Создаешь таблицу(ы)
            2) Все остальное делает компонент
            3) Можно прописывать relation связи в xml (если нужно) и, присовокупив _builder, собрать пакет. (?)

            Это вроде правильнее, чем запускать gen.php из этого поста на хабре, больше соответствует идеологии modx'а.
              Алексей
              Алексей Старожил
              07 мая 2013, 00:36
              Из modx.ws/razrabotka-dopolneniya-modx-revolution-2

              <?php
              class DoodleGetListProcessor extends modObjectGetListProcessor {
                  public $classKey = 'Doodle';
                  public $languageTopics = array('doodles:default');
                  public $defaultSortField = 'name';
                  public $defaultSortDirection = 'ASC';
                  public $objectType = 'doodles.doodle';
              }
              return 'DoodleGetListProcessor';
              ?>

              $objectType — это часто используется для определения какие строки лексикона об ошибке загружать при отборе данных. Так как в нашем файле словаря находяться все строки в виде $_lang['doodles.doodle_blahblah'] или схожем, то мы определим префикс как «doodles.doodle». MODX далее будет прикреплять префикс к стандартным сообщениям об ошибке.

              То есть к «errorName» прибавится «doodles.doodle_», на выходе — «doodles.doodle_errorName», что соответствует $_lang['doodles.doodle_errorName'].

              Не знал)

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