К содержанию

UiCMPGenerator дополнение для создания пакетов

Hi, написал тут свое дополнение для создания пакетов UiCMPGenerator. За основу взято дополнение CMPGenerator, но в моем прикручен графический интерфейс для создания зависимостей типа Композиционная (Composite) и Агрегирующая (Aggregate), а также можно расширять родные таблицы Modx-a.
Для работы требуется MODX Revolution 2.3.х

Ссылка на офф репозиторий http://modx.com/extras/package/uicmpgenerator
Видео: http://youtu.be/Qkspw8kXwK4
Prihod
Prihod
14 января 2015, 17:21
modx.pro
11 313
Реклама

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

Илья Уткин
Илья Уткин Администратор
14 января 2015, 21:12
Как же это круто. Нет слов.

    Wassi Wassinen
    Wassi Wassinen Проверенный
    15 января 2015, 08:19
    Охренеть.
      Михаил
      Михаил Эксперт
      15 января 2015, 08:29
      Кланяюсь
        Николай Загумённов
        Николай Загумённов Проверенный
        15 января 2015, 08:39
        круто!))
          Пашок
          Пашок Старожил
          15 января 2015, 10:27
          Огромная благодарность, о великий мастер своего дела!!!
            Пашок
            Пашок Старожил
            15 января 2015, 10:34
            А вот если уже на сайте используется CMPGenerator с уже созданными таблицами, можно ли как-то перенести быстренько на это дополнение?
              Prihod
              Prihod Эксперт
              15 января 2015, 10:59
              Ну теоретически ничего не мешает назвать пакет в UICMPGenerator так же как он зазевается в CMPGenerator, и накидать в Modeler scheme ваши таблицы и связи между ними
              Сергей Шлоков
              Сергей Шлоков Эксперт
              15 января 2015, 12:03
              Крутатень. Меняю CMPGenerator на UICMPGenerator. Кому нужен б/у CMPGenerator? Отдам не дорого. :)
                Алексей
                Алексей Проверенный
                15 января 2015, 17:26
                вообще вообще
                  Fi1osof
                  Fi1osof Эксперт
                  15 января 2015, 18:06
                  Огромный респект за работу!
                  А github-проект есть?
                    Prihod
                    Prihod Эксперт
                    15 января 2015, 18:29
                    github-проека нет
                      Fi1osof
                      Fi1osof Эксперт
                      15 января 2015, 18:31
                      Планируется? Или что-то мешает (соображения какие-то или ограничения)?
                        Prihod
                        Prihod Эксперт
                        15 января 2015, 19:26
                        ну для отрисовки диаграмм используется js библиотека www.draw2d.org/draw2d/community.html которая не является бесплатно и как я понял в той версии что я приобрел я не могу ее распространять
                          Fi1osof
                          Fi1osof Эксперт
                          15 января 2015, 19:29
                          Так мы же в России :)
                          Если хотите, я могу залить пакет. Но на самом деле разницы между тем, что вы распространяете уже готовый пакет, и если это будет гит-проект — по-моему вообще никакой, с юридической точки зрения.
                            Prihod
                            Prihod Эксперт
                            15 января 2015, 20:36
                            Ну коль мы в России ;), то где то через 10 дней как вернусь с отдыха залью все это дело на github
                              Fi1osof
                              Fi1osof Эксперт
                              15 января 2015, 20:52
                              Отлично! :)
                              Спасибо!
                    Виталий
                    Виталий Проверенный
                    15 января 2015, 19:50
                    Давай у нас разместим?
                      but1head
                      but1head Проверенный
                      15 января 2015, 20:05
                      А каким образом работать с тем, что получилось? Опыта написания компонентов нету
                        Іван Клімчук
                        Іван Клімчук Администратор
                        15 января 2015, 20:46
                        Ну батенька, что ж вы такие вопросы то задаете. :)
                        Те, кто создают компоненты, понимают о чем речь, вам могу посоветовать курс Василия bezumkin.ru/training/course1/
                        Николай Загумённов
                        Николай Загумённов Проверенный
                        15 января 2015, 21:22
                        а у меня modx что то не видит каталогов созданного компонента.
                        /controllers
                        /docs
                        /elements
                        /lexicon
                        /model
                        /processors
                        Вообще они есть, создались, но в админке modx не отображаются.
                        Тестил 2 раза.
                          Николай Загумённов
                          Николай Загумённов Проверенный
                          15 января 2015, 21:41
                          в каталогах /core/ и /assets/ такое именно с папкой компонента такое, при клике на нее, ничего не происходит
                            Николай Загумённов
                            Николай Загумённов Проверенный
                            15 января 2015, 22:26
                            Ой там assets не создается же.
                            На тестовом сайте modhost.ru тоже так. Если переименовать папку компонента, то каталоги открываются.
                              Николай Загумённов
                              Николай Загумённов Проверенный
                              16 января 2015, 08:59
                              Странно, но если я создал пакет и сразу же открою каталог с новым компонентом, то в дальнейшем каталог открывается нормально(все как в видео). Если же этого не сделал, а сразу начал добавлять таблицы, сгенерировал схему, то каталог как мертвый, не отзывается на клики.
                                Prihod
                                Prihod Эксперт
                                16 января 2015, 12:07
                                Повторил все как ты описал но такого глюка не произошло, у меня все каталоги видны и все открывается. А какие права и кто владелец выставлен на каталоги и файлы созданные дополнением, есть ли в логах движка и сервера какие либо ошибки, и какая полная версия modx-а? У меня MODX Revolution 2.3.2-pl
                                  Николай Загумённов
                                  Николай Загумённов Проверенный
                                  16 января 2015, 13:46
                                  s860.h3.simpledream.ru/manager/
                                  s860
                                  Af2jZ1Unw9dZ

                                  Каталог ads не открывается…

                                  В логах ничего не было. С правами тоже все нормально.
                                    Prihod
                                    Prihod Эксперт
                                    16 января 2015, 14:01
                                    странный у тебя файловый менеджер в админке, он что кастомный какой то? у меня в нем только одна вкладка «Filesystem»
                                      Николай Загумённов
                                      Николай Загумённов Проверенный
                                      16 января 2015, 14:05
                                      это же тестовый сайт, но у меня на сервере такая же проблема была
                                        Николай Загумённов
                                        Николай Загумённов Проверенный
                                        16 января 2015, 14:18
                                        Кстати да, странно, файловую систему core я не создавал
                                        Prihod
                                        Prihod Эксперт
                                        16 января 2015, 14:04
                                        только что создал у тебя новый пакет, все сделал как ты говорил и как бы все директории и файлы видны нормально открываются нет никаких проблем
                                          Николай Загумённов
                                          Николай Загумённов Проверенный
                                          16 января 2015, 14:11
                                          Только что попробывал создать на новом тестовом сайте. Папка не открывалась только у первого созданного компонента.
                                          s872.h3.simpledream.ru/manager/
                                          s872
                                          P6F3T9qILRDd
                                            Prihod
                                            Prihod Эксперт
                                            16 января 2015, 14:23
                                            у тебя пакет test открывается? У меня test и пакет который я создал открывается, а вот твой ads даже если я его удаляю и создаю с таким же названием нет
                                              Prihod
                                              Prihod Эксперт
                                              16 января 2015, 14:25
                                              только что создал у себя пакет с названием «ads» такая же фигня, походу дело в в этом названии из-за него глючит файловый менеджер
                                                Николай Загумённов
                                                Николай Загумённов Проверенный
                                                16 января 2015, 14:29
                                                Есть подозрения что это Adblock
                                                  Prihod
                                                  Prihod Эксперт
                                                  16 января 2015, 14:30
                                                  ага, я его вырубил и все ок))
                              Павел Левин
                              Павел Левин Проверенный
                              15 января 2015, 22:20
                              Я ничего не понял, но это круто =)
                                Сергей Скат
                                Сергей Скат Проверенный
                                16 января 2015, 18:29
                                Круть! Спасибо!!!
                                  TITAN-UZ
                                  TITAN-UZ Проверенный
                                  17 января 2015, 10:30
                                  RESPECT
                                    Женя
                                    Женя Старожил
                                    02 февраля 2015, 08:52
                                    Здравствуйте. Я создал новые таблицы, сгенерировал схему, но работать с объектами не могу (MODX Revo 2.3.2).

                                    $newObject = $modx->newObject('myClass');
                                    $newObject->set('title', 12345);
                                    $newObject->save();

                                    Такой код выдает ошибки. Что я не правильно делаю?
                                      Prihod
                                      Prihod Эксперт
                                      02 февраля 2015, 10:54
                                      а какая ошибка?
                                      Евгений Залесский
                                      12 февраля 2015, 06:17
                                      Компонент крут, спасибо!
                                      Правда, кажется, в нем есть ошибка, поправьте, если что-то не так делаю, или что-то не понял.

                                      Опишу проблему и порядок действий.

                                      Есть две таблицы:



                                      Таблица с заказами является главной по отношению к покупкам в заказе. При удалении заказа должны удаляться связанные покупки.





                                      В результате получается такая схема:



                                      Вроде бы, напутано с «cardinality».
                                      Должно быть наоборот: composite — «many», aggregate — «one».

                                      В общем после генерации схемы вот такой код выдавал fatal error:
                                      //получаем объект заказа
                                      $order = $modx->getObject('GarderobOrders', array('id' => 7 ));
                                      //получаем связанные объекты покупок, тут и вылезает ошибка
                                      $purchases = $order->getMany('GarderobPurchases');
                                      
                                      //Выводим
                                      foreach ($purchases as $purchase){
                                              print_r($purchase->toArray());
                                          }

                                      Если руками поправить значения «cardinality» в файлах garderoborders.map.inc.php и garderobpurchases.map.inc.php, то все отрабатывает корректно, без ошибок. Выводятся покупки из заказа с id=7.

                                      Собственно вопрос: это я туплю и что-то не так делаю или в компоненте действительно ошибка?)
                                        Prihod
                                        Prihod Эксперт
                                        12 февраля 2015, 12:14
                                        Hi, фишка в том что как ты мог заметить и таблиц с лева и с права есть порты (кружочки из которых тянутся связи) так вот те что с лева являются input портами, а те что с права output, соответственно если тебе нужно что бы главной таблицей была с заказами то тебе нужно было начинать строить связь с правого порта таблицы заказы, а судя по рисунку у тебя он с лева.
                                        Нужно будет в следующей версии компонента сделать запрет на создание связи из input порта.
                                          Евгений Залесский
                                          12 февраля 2015, 12:34
                                          Я попробовал все возможные варианты, от всех кружков ко всем кружкам, никак не получается рабочий вариант.

                                          Вот для примера натыкал всевозможных связей:



                                            Prihod
                                            Prihod Эксперт
                                            12 февраля 2015, 12:48
                                            хотя посмотрел на рисунки с первого твоего поста по внимательно, связи строишь с нужных портов. Также просмотрев доки modx по связям выяснилось что таки действительно в компоненте баг с построением связей, сейчас быстро его пофиксю.
                                              Евгений Залесский
                                              12 февраля 2015, 12:49
                                              Ок, спасибо!
                                                Евгений Залесский
                                                12 февраля 2015, 13:13
                                                И еще один момент: owner бывает «foreign» и «local».
                                                У тебя при композиционной связи генерируется owner=owner, из-за этого не работает addMany().
                                                Эту штуку тоже подправить надо
                                                  Prihod
                                                  Prihod Эксперт
                                                  12 февраля 2015, 14:44
                                                  Новую версию залил на официальный репозиторий modx, пока она там проходит модерацию ее можно скачать отсюда
                                                    Евгений Залесский
                                                    12 февраля 2015, 19:53
                                                    Все, спасибо, обновился, теперь все отлично!
                                          Александр
                                          Александр Старожил
                                          17 сентября 2015, 05:00
                                          Здравствуйте, недавно столкнулся с такой проблемой:

                                          UICMPGenerator не видит ни одной таблицы в БД. Когда сайт только разрабатывался, все было нормально. XML-таблица выглядит вот так:

                                          Но при этом скрипты, которые писались до поломки, отрабатывают без проблем.
                                            Prihod
                                            Prihod Эксперт
                                            17 сентября 2015, 09:04
                                            Странный глюк, без доступа к админки ничего сказать о нем не могу
                                              Александр
                                              Александр Старожил
                                              20 сентября 2015, 12:52
                                              Не могу к сожалению написать вам в ЛС=(
                                                Prihod
                                                Prihod Эксперт
                                                23 сентября 2015, 14:16
                                                уже можно
                                            Сергей Шлоков
                                            Сергей Шлоков Эксперт
                                            23 сентября 2015, 15:06
                                            У меня на 2.4.0 иконки пропадают в дереве ресурсов.
                                              Prihod
                                              Prihod Эксперт
                                              23 сентября 2015, 15:16
                                              Они пропадают на странице компонента?
                                                Сергей Шлоков
                                                Сергей Шлоков Эксперт
                                                23 сентября 2015, 15:20
                                                Да, проблема в том, что класс иконок завязан на собственный шрифт UICMPGenerator. Лучше дописать FontAwesome в font-family
                                                font-family: FontAwesome, UICMPGenerator;
                                              Григорий Коленько
                                              26 октября 2015, 20:53
                                              Создал таблицу, сгенерировал схему, пробую в консоле
                                              <?php
                                              $read     = $modx->getObject( 'TicketsRead', array( 'threadid' => 4013 ) );
                                              var_dump($read);
                                              Получаю:
                                              Could not load class: TicketsRead from mysql.ticketsread.
                                              Записи в таблице имеются.





                                                Prihod
                                                Prihod Эксперт
                                                26 октября 2015, 22:46
                                                Просто MODX ничего не знает о вашем пакете.
                                                Переходим в настройки системы и создаем новый параметр (если его еще нет) extension_packages. Заполняем только «Ключ» (extension_packages) и «Значение»:
                                                [{"Map":{"path":"[[++core_path]]components/my_component_name/model/"}}]

                                                или из консоли
                                                $modx->addExtensionPackage('Map', '[[++core_path]]components/my_component_name/model/');
                                                  Григорий Коленько
                                                  27 октября 2015, 00:39
                                                  подозрения были, что где-то это надо сделать, но не знал где это сделать. Спасибо!
                                                    rumano
                                                    rumano Старожил
                                                    24 апреля 2017, 18:42
                                                    почему при выполнении этого кода в консоли
                                                    $item = $modx->newObject('geodata');
                                                    выдает вот такое сообщение:

                                                    [2017-04-24 20:39:23] (WARN @ C:\home\htdocs.modx\core\xpdo\xpdo.class.php: 667)
                                                    Could not load metadata map geodata/mysql/geodata.map.inc.php for class geodata from geodata.mysql.geodata

                                                    modx v.2.5.5
                                                      rumano
                                                      rumano Старожил
                                                      24 апреля 2017, 18:55
                                                      почему при выполнении этого кода в консоли
                                                      $item = $modx->newObject('geodata');
                                                      или
                                                      $sql = "
                                                              SELECT * 
                                                              FROM
                                                              	modx_geodata
                                                              WHERE
                                                              	MATCH(city_name) AGAINST ('*казан*' IN BOOLEAN MODE)
                                                      ";
                                                      
                                                      $q = new xPDOCriteria($modx, $sql);
                                                      
                                                      $res = $modx->getCollection('geodata', $q);
                                                      foreach ($res as $v) {
                                                      	//echo $v->get('pagetitle');
                                                      }
                                                      выдает вот такое сообщение:

                                                      [2017-04-24 20:39:23] (WARN @ C:\home\htdocs.modx\core\xpdo\xpdo.class.php: 667)
                                                      Could not load metadata map geodata/mysql/geodata.map.inc.php for class geodata from geodata.mysql.geodata

                                                      modx v.2.5.5
                                                        rumano
                                                        rumano Старожил
                                                        24 апреля 2017, 19:31
                                                        Разобрался.
                                                        нужно было в файле: C:\home\htdocs.modx\core\components\geodata\model\geodata\mysql\geodata.map.inc.php сменить регистр, т.е.:
                                                        Было так
                                                        <?php
                                                        $xpdo_meta_map['Geodata']= array (
                                                          'package' => 'geodata',
                                                          'version' => '1.1',
                                                          'table' => 'geodata',
                                                          'extends' => 'xPDOObject',
                                                          'fields' =>
                                                        Стало так:
                                                        <?php
                                                        $xpdo_meta_map['geodata']= array (
                                                          'package' => 'geodata',
                                                          'version' => '1.1',
                                                          'table' => 'geodata',
                                                          'extends' => 'xPDOObject',
                                                          'fields' =>
                                                        а в extension_packages нужно прописать
                                                        [{"geodata":{"path":"[[++core_path]]components/geodata/model/"}}]
                                                      Prihod
                                                      Prihod Эксперт
                                                      17 ноября 2015, 20:38
                                                      Hi, сделал новое дополнение CMPGenerator Pro на основе UiCMPGenerator.

                                                      Что может CMPGenerator Pro:

                                                      1. создать базовую файловую структуру пакета, а так же при желании базовый класс + классы для валидации и работы с POST данными;

                                                      2. автоматически добавить информацию о вашем пакете в extension_package и в namespaces Modx-а что избавляет вас на этапе разработки от сообщении об ошибки типа Could not load class: когда вы пытаетесь работать со своими таблицами;

                                                      3. создать схемные xpdo-файлы и xpdo-классы для ваших таблиц баз данных, а также указать зависимости между ними (Composite Aggregate);

                                                      4. расширять базовые классы Modx;

                                                      5. создавать в 2 клика свой тип документов Modx за счет расширения класса modResource (автоматически создадутся соответствующие контролеры, процессоры и js файлы);

                                                      6. создать для пользовательских таблиц mgr и web контролеры с процессорами (для mgr будут созданы js файлы с функционалам для работы с полями таблицы с привязкой к их типу);

                                                      7. задать php тип для полей таблицы, что влияет на то какой компонент extjs будет использоваться для работы с данным полем, а так же как его данные будет обрабатывать Modx;

                                                      8. добавить в меню админки Modx действие для вашего mgr котроллера;

                                                      9. собрать транспортный пакет с автоматическим включением в него:
                                                      — таблиц;
                                                      — чанков, сниппетов и плагинов(для того что бы события на которые подписан плагин были добавлены в транспортный пакет данный плагин должен быть создан в админке с подпиской на нужные события) из соответствующих папок в elements;
                                                      — опций;
                                                      — пунктов меню.

                                                      Примечание: большинство перечисленных выше пунктов доступы только при включенной опции «Создать базовый класс» на этапе создания пакета.

                                                      Видео с демонстрацией функционала дополнения те кто смотрел для UiCMPGenerator могут пропустить с 2:38 сек. по 5:35 сек.

                                                      И таки да, данное дополнение платное.

                                                        Дмитрий
                                                        Дмитрий Старожил
                                                        06 февраля 2016, 11:30
                                                        При установке table prefix отличающегося от modx_ — не генерируется схема и классы.
                                                        покопался, разобрался сам.
                                                        у тебя вызов идет $generator->parseJsonSchema($cmp->scheme);
                                                        а надо $generator->parseJsonSchema($cmp->scheme, $table_prefix);
                                                          Евгений
                                                          Евгений Старожил
                                                          26 октября 2023, 01:23
                                                          Как удалить таблицы или связи из панели?
                                                            Евгений
                                                            Евгений Старожил
                                                            21 января 2025, 21:39
                                                            Будет ли обновление для MODX3?
                                                              Prihod
                                                              Prihod Эксперт
                                                              21 января 2025, 22:03
                                                              Буден новый платный пакет
                                                                Евгений
                                                                Евгений Старожил
                                                                31 июля 2026, 14:17
                                                                Добрый день!
                                                                Ждать для modx3?
                                                                  Prihod
                                                                  Prihod Эксперт
                                                                  31 июля 2026, 16:24
                                                                  Уже есть новый пакет для modx3 который я сейчас использую для перевода все своих пакетов с modx2 на modx3 и в процессе отлавливаю баги. Пакет полностью переработан и значительно расширен в функционале и гибкости настройки под стиль написания кода пользователя. Пакет выйдет под другим названием и он будет платным, возможно будет лайт-версия но это не точно )
                                                                    Евгений
                                                                    Евгений Старожил
                                                                    31 июля 2026, 16:30
                                                                    Не сориентируете по срокам? Уж очень ждём))
                                                                      Prihod
                                                                      Prihod Эксперт
                                                                      31 июля 2026, 16:34
                                                                      Ближе к сентябрю, основная загвоздка это создание нормальной документации и видео обзора, а так пакет как бы уже готов
                                                                        Артур Шевченко
                                                                        02 августа 2026, 22:22
                                                                        Что есть нормальная документация? Сие никому не ведомо))) Даёшь компонентов хороших и разных!!!
                                                                          Евгений
                                                                          Евгений Старожил
                                                                          03 августа 2026, 15:34
                                                                          Отлично! Спасибо! Будем ждать.
                                                                        Евгений
                                                                        Евгений Старожил
                                                                        29 сентября 2026, 15:34
                                                                        Добрый день! Может быть есть новости по компоненту?))
                                                                          Prihod
                                                                          Prihod Эксперт
                                                                          30 сентября 2026, 18:09
                                                                          на днях начну делать доки, пока без видео обзора чисто текст и скрины, как будут готовы залью пакет
                                                                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                                                  73