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

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

Ссылка на офф репозиторий http://modx.com/extras/package/uicmpgenerator
Видео: http://youtu.be/Qkspw8kXwK4
Prihod
14 января 2015, 17:21
modx.pro
27
7 539
+25
Поблагодарить автора Отправить деньги

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

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

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

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

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

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

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

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

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



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





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



                                  Вроде бы, напутано с «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
                                    12 февраля 2015, 12:14
                                    0
                                    Hi, фишка в том что как ты мог заметить и таблиц с лева и с права есть порты (кружочки из которых тянутся связи) так вот те что с лева являются input портами, а те что с права output, соответственно если тебе нужно что бы главной таблицей была с заказами то тебе нужно было начинать строить связь с правого порта таблицы заказы, а судя по рисунку у тебя он с лева.
                                    Нужно будет в следующей версии компонента сделать запрет на создание связи из input порта.
                                      Евгений Залесский
                                      12 февраля 2015, 12:34
                                      0
                                      Я попробовал все возможные варианты, от всех кружков ко всем кружкам, никак не получается рабочий вариант.

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



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

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

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





                                          Prihod
                                          26 октября 2015, 22:46
                                          +4
                                          Просто 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
                                            0
                                            подозрения были, что где-то это надо сделать, но не знал где это сделать. Спасибо!
                                              rumano
                                              24 апреля 2017, 18:42
                                              0
                                              почему при выполнении этого кода в консоли
                                              $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
                                                24 апреля 2017, 18:55
                                                0
                                                почему при выполнении этого кода в консоли
                                                $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
                                                  24 апреля 2017, 19:31
                                                  0
                                                  Разобрался.
                                                  нужно было в файле: 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
                                                17 ноября 2015, 20:38
                                                +3
                                                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
                                                  0
                                                  При установке table prefix отличающегося от modx_ — не генерируется схема и классы.
                                                  покопался, разобрался сам.
                                                  у тебя вызов идет $generator->parseJsonSchema($cmp->scheme);
                                                  а надо $generator->parseJsonSchema($cmp->scheme, $table_prefix);
                                                    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                                    62