Новый modExtra

Обновил свою копию репозитория с modExtra.

Если кто не знает — это такая замечательная заготовка для разработки расширений. Почти все свои расширения я сделал именно по ней.

Время идет, появились "классные процессоры" и потребовалось modExtra обновить. Что сделал:
  • Переделал все процессоры, теперь они class-based
  • Поправил ошибки в скрипте переименования
  • Поправил ошибки в скрипте сборки
  • Добавил скрипт генерации схемы и модели по готовым таблицам
  • Добавил русский лексикон
  • Еще куча мелочей, всего не упомнишь
В результате, теперь это полностью рабочее расширение, которое вы можете склонировать из репозитория, собрать в пакет и установить на MODX 2.2

А как же его превратить в свое новое расширение, для разработки? Очень просто (все действия описаны для GNU/Linux):
  1. Клонируем репозиторий в корень любого сайта с MODX 2.2
    git clone git@github.com:bezumkin/modExtra.git
  2. Редактируем скрипт rename_it.sh, нужно изменить 2 значения (yourName и yourname) в начале. Это и будет новое имя вашего пакета.
  3. Делаем скрипт запускаемым
    chmod +x ./rename_it.sh
    и запускаем
  4. Все файлы, директории и строки компонента переименованы с modExtra на ВашеИмя
  5. Теперь можно собрать пакет и установить на MODX — он будет работать
  6. Разрабатываем свой новый компонент!

Очень прошу, не задавайте вопросы «а что это и для чего нужно». Это для разработчиков, не для юзеров.


Следующая заметка
Написал компонент miniPayment
Предыдущая заметка
yTranslit - генерация алиасов через Яндекс.Переводы


Комментарии ()

  1. Василий Наумкин 03 октября 2012, 19:13 # 0
    И как обычно, комментариев нет. Заметки про душевные метания гораздо интереснее, чем чисто технические дела.

    Начинаю понимать успех «Пусть говорят» и прочих говношоу.
    1. Valentin Rasulov 03 октября 2012, 19:36 # 0
      ну чего. есть комменты, только не так быстро, не все в онлайн!
      Я в своих разработках использую Doodles https://github.com/splittingred/Doodles там 9 месяцев назад всё переписанно.
      Почему Doodles использую а не modExtra? Как-то изначально он у меня криво пошол, так и подсел на Doodles.
      1. Василий Наумкин 03 октября 2012, 19:40 # 0
        А я и не знал про него =)

        Смотрю в код — близнецы братья! Только скрипта для переименования не вижу.

        Одно не ясно, зачем Шону Маккормику две одинаковых заготовки для работы? Он ведь автор обоих.
        1. Valentin Rasulov 03 октября 2012, 19:44 # 0
          А вот это вопрос уже к Шону. Сейчас не сверял. раньше были маленькие отличия, но принцип одинаковый. Нужно сверить код просто.
          1. Viktor Minator 04 октября 2012, 00:45 # 0
            я что-то вначале и подумал, что ты Doodles переделал
            1. Viktor Minator 04 октября 2012, 00:56 # 0
              только позавчера начал переводить доки про Doodles, хорошо хоть немного перевёл =))) подвела меня моя прокрастинация. Нужно было ещё 2 дня подождать…
              1. Valentin Rasulov 04 октября 2012, 01:42 # 0
                а чего перестал переводить? Там много полезного и разжованного, для чего, куда и зачем. Просто если логику понять, то потом всё как на видео у Василия — быстро и чётко. с понимание того, что делаешь.
          2. Valentin Rasulov 03 октября 2012, 20:12 # 0
            Вспомнил!
            В Doodles в модели есть doodle.class.php (не путать с doodles.class.php) https://github.com/artdevue/Doodles/blob/develop/core/components/doodles/model/doodles/doodle.class.php
            В которой разработчик показывает как при использовании $classKey = 'Doodle'; в процесоре мы не пишем лишний повторяющийся код а он отрабатывает в doodle.class.php.

            Потом, при переименовании файлов. в modExstra два вида файла переименовывать нужно, а в Doodles — 4 вида файлов.

            Пока больше не вспомню.
          3. Орлов  Сергей 26 февраля 2014, 09:09 # 0
            Добрый день, Василий.
            При установке modExtra на локальном сервере, и запуске rename_it.php, файлы не переименуются из-за того, что в строке
            $tmp = explode('/', $start);
            explode по / слэшу, а локальный путь в переменной $start разделен \ слешем. Нужно просто заменить
            $tmp = explode('/', $start);
            на
            $tmp = explode('\\', $start);
            Возможно вам стоит добавить это, чтобы у начинающих разработчиков не возникало вопросов.
            1. Василий Наумкин 26 февраля 2014, 09:21 # +1
              Начинающим разработчикам нужно сразу начинать работать на GNU/Linux.
              1. Орлов  Сергей 26 февраля 2014, 15:58 # 0
                Не спорю. Но это не значит, что они «обязаны» работать на GNU/Linux. Во всяком случае, мое дело просто предложить.
          4. Андрей Розум 03 октября 2012, 20:24 # 0
            Давно планировал начать разбираться с созданием модулей, да за рутиной все руки не доходят.
            Смотрел и на modExtra и на Doodles.
            С переименованием то все понятно, а вот дальше за что хвататься навскидку не понял.
            Посмотрел статьи на эту тему, нужного мне что-то тоже не нашел, может не так ищу.

            Банальное — как создать соответствующую таблицу в базе при установке модуля, чтобы потом в сниппете можно было с ней работать.
            Тыкните, если есть примеры.
            1. Василий Наумкин 03 октября 2012, 21:07 # 0
              Там уже все есть — смотрите видео.
              1. Андрей Розум 03 октября 2012, 21:15 # 0
                Спасибо, посмотрю завтра, отсюда нет доступа.
                1. Peter Zenin 29 ноября 2012, 14:30 # 0
                  А где видео можно посмотреть?
                  1. Peter Zenin 29 ноября 2012, 14:46 # 0
                    Все, видео нагуглил на ютубе watch?v=O0zcwWl3tNE
                    1. Василий Наумкин 29 ноября 2012, 14:53 # +1
                      Потерялось =(

                      Вернул обратно, смотрите в заметке.
                    2. Михаил 05 августа 2014, 16:04 # 0
                      Чет в видео пропустил где это указывать(((( Не могу создать таблицы с пакета, хоть убей(((
                  2. Valentin Rasulov 03 октября 2012, 21:20 # 0
                    Василий -с видео Респект. Думаю больше вопросов ни у кого не возникнит!
                    1. Viktor Minator 04 октября 2012, 00:46 # +1
                      думаю вопросов будет вагон и маленькая тележка xD
                    2. Виталий Киреев 07 октября 2012, 18:41 # 0
                      А файлы в папке build/data для составления пакета вручную приходится править? Попробовал PackMan: системные настройки и плагины он не создает, да и вообще сделал мне пакет с пустым сниппетом почему-то.
                      1. Павел 23 октября 2012, 15:31 # 0
                        Спасибо за проделанную работу. Очень сильно помогло.
                        1. Peter Zenin 29 ноября 2012, 13:59 # 0
                          Василий, не подскажешь, что там надо запустить чтоб он сгенерил пакет готовый для установки?
                          У меня белый экран при запуске modExtra-master/_build/build.transport.php
                          1. Peter Zenin 29 ноября 2012, 14:37 # 0
                            Все, надо было с шелла запустить.
                            Только не разбирался, почему только с шелла работает?
                          2. Иван Тимофеев 29 ноября 2012, 15:13 # 0
                            а мне надоело ковырять модыкс… перехожу на yii )))
                            1. Василий Наумкин 29 ноября 2012, 15:24 # -1
                              Держите нас в курсе!
                              1. Иван Тимофеев 29 ноября 2012, 15:30 # 0
                                сарказм? )
                            2. Peter Zenin 29 ноября 2012, 20:55 # 0
                              Такая проблема, у modExtra в manager, в таблице, где хранятся итемы, нельзя редактировать поле по двойному клику.
                              Можно ли добавить возможность редактировать итем в modExtra по двойному клику?

                              Я установил Doodles из репозитория, у него как раз можно редактировать «дудлы» по двойному клику.
                              Но я пошел на githab.com скачал оттуда код Doodles (https://github.com/splittingred/Doodles), собрал, установил и он не работает. Потом сравнил файлы Doodles из репозитория и Doodles с github — там совсем другие файлы, причем в github файлы вообще принципиально не рабочие, нет индексов, классы какие-то вообще которым не место…

                              Потом попробовал залить файлы из core и assets репозиторного дудла на гитхабовский. Не работает, какая-то идиотска ошибка при сохранении итема (дудла), вообщем целый день промучался. В все из-за того что нигде нету нормального исходного дудла, с которого собран дудл в репозитории…

                              Чтоб не мучаться, остается или найти нормальный дудл в исходниках или заставить modExtra редактироваться по двойному клику…

                              Василий, не можешь тут помочь?
                              1. Peter Zenin 30 ноября 2012, 14:11 # 0
                                Проблема решена. Решение тут forums.modx.com/thread/80802/doodles-splittingred-not-working-version-on-github
                              2. Григорий 01 марта 2013, 16:44 # 0
                                Проблема есть.

                                Все делал по видео, modExtra переименовал в мой компонент, смастерил package с помощью каталога _build. Установил в modx. Все работает (класс есть, работать с ним могу, очень круто получается, не думал что все так просто )) ), кроме редактирования компонента в меню «Компоненты.» При переходе на страницу с редактированием таблиц выдает ошибку 500. Пробовал на локальном образе и на Линоде. В чем может быть трабл?
                                1. Василий Наумкин 01 марта 2013, 17:16 # +1
                                  Ну так погляди в логи сервера, в чём проблема.

                                  Ошибка 500 — это обычно fatal error у php.
                                  1. Григорий 02 марта 2013, 02:34 # 0
                                    *10 FastCGI sent in stderr: «PHP message: PHP Fatal error: Class 'FavoritesBaseManagerController' not found in /var/www/iwantthis/www/core/components/favorites/index.class.php on line 26» while reading response header from upstream, client: 5.166.32.103, server: iwantthis.ru, request: «GET /manager/?a=81 HTTP/1.1», upstream: «fastcgi://unix:/var/run/php5-iwantthis.sock:», host: «iwantthis.ru», referrer: «iwantthis.ru/manager/?a=78»

                                    КЛасс не найден. Но почему? Класс определен в этом файле.
                                    1. Василий Наумкин 02 марта 2013, 06:10 # 0
                                      Как переименовывал компонент?

                                      Видно, не моим скриптом, который учитывает, что один из родных и нужных классов называется modExtraManagerController?

                                      Вот его ты и переименовал в FavoritesBaseManagerController, отсюда и ошибка.
                                2. Denys Butenko 25 мая 2013, 20:03 # 0
                                  Подскажите, как сформировать прямую ссылку на добавление нового предмета?
                                  Мне необходимо ссылку вывести на фронте, при переходе по ней должна появится страница с модальным окном «Создать предмет».
                                  В видео, которое выше на 1:36 этот момент.
                                  1. Михаил 03 ноября 2013, 21:21 # 0
                                    Василий а подскажи пожалуйста, а как вот обновлять пакет? Я например установил компонент голый, далее я там добавил тоси боси, и хочу его заново запаковать. Но он не дает. Ставлю новую верию, там добавляю описание и так далее, но не получается. Выдает вот:
                                    Картинка
                                    Даже немного точнее. Он добавляет изменения, но получается пакет не надо искать локально, он сразу ставиться.
                                    1. Василий Наумкин 03 ноября 2013, 22:20 # 0
                                      Да, сразу ставится.

                                      Но при этом в /core/packages/ остаётся новый transport.zip. Ну и можно поменять константу PKG_AUTO_INSTALL в build.config.php.
                                      1. Михаил 04 ноября 2013, 08:47 # 0
                                        Спасибо! Все работает! Большое спасибо! Кстати не упущу возможности спросить. Когда ты пишешь компонент сразу на github его загружаешь в репозиторий? А не мог бы снять коротенькое видео как все это дело подключаешь к виртуалке и репо, если можно конечно.
                                        Заранее спасибо!
                                        1. Василий Наумкин 04 ноября 2013, 08:50 # 0
                                          У нас тут скоро будут курсы — там и расскажу.
                                    2. Петро Васинюк 06 ноября 2013, 21:33 # 0
                                      А почему при деинсталляции пакета чанки не удаляются?
                                      1. Михаил 07 ноября 2013, 08:38 # 0
                                        А кажется они и не должны удаляться. Или я что то путаю?
                                        1. Василий Наумкин 07 ноября 2013, 09:25 # 0
                                          Поменяй в конфиге сборки BUILD_CHUNK_UPDATE на true и чанки будут перезаписываться при обновлении, и удаляться при деинсталляции.
                                          1. Петро Васинюк 07 ноября 2013, 11:12 # 0
                                            Спасибо!
                                        2. Denis Marocco 27 января 2014, 23:32 # 0
                                          Здравствуй, Василий. Подскажи если не трудно?
                                          Есть запись к врачу. Чел записывается, после манагер назначает определенного специалиста.
                                          В xtype указал «modx-combo-doctor», в data: [['Иванов',1],['Петров',2],['Сидоров',3]].
                                          Но надо, чтобы была возможность добавлять специалистов (Resource).
                                          Как в «data» запихнуть "['pagetitle',id]"?
                                          Надеюсь понятно написал)
                                            1. Yana V 28 января 2014, 11:31 # 0
                                              я это делаю так.
                                              в дереве есть папка
                                              Родитель
                                              — Ребенок 1
                                              — ребенок 2
                                              — Ребенок 3

                                              Создаю ТВ параметр, (например чекбоксы) где в ВОЗМОЖНЫЕ ЗНАЧЕНИЯ указываю
                                              @EVAL return $modx->runSnippet('ownProductionTv', array('parent'=>45));
                                              код сниппета ownProductionTv
                                              $rows=array();
                                                  $query = $modx->newQuery('modResource', array('parent'=>$parent));
                                                  $query->select('`id`,`pagetitle`');
                                                  $query->prepare();
                                                  $query->stmt->execute();
                                                  $rows = $query->stmt->fetchAll(PDO::FETCH_ASSOC);
                                                  
                                                  foreach ($rows as $row) {
                                                      $output.=$row['pagetitle'].'=='.$row['pagetitle'].'||';
                                                  }
                                                  $output=substr($output,0,strlen($output)-2); //отрезаю лишние || в конце
                                                  return $output;
                                              и у нас будет ТВ ресурс
                                              1. Чикин Артур 28 января 2014, 11:45 # 0
                                                Это пример для фронт энда, а не бек энда.
                                                1. Yana V 28 января 2014, 11:52 # 0
                                                  как это? это как раз в бекенде будет список значений для ТВ параметра. а чтобы вывести их во фронтенд нужен еще один сниппет
                                                  если вы пишите свой ТВ параметр с использованием extJS то там тоже можно делать ajax запрос к процессору, возвращающему значения, например
                                                2. Denis Marocco 28 января 2014, 12:54 # 0
                                                  C TV параметрами еще проще, не нужны сниппеты, достаточно указать в «возможные значения» SQL запрос:
                                                  @SELECT pagetitle, id FROM modx_site_content WHERE parent = 45
                                                  и получишь тот же результат. Да кстати, не обязательно использовать newQuery, меньше кода:
                                                  $resourses = $modx->getCollection('modResource', array('parent' => $parent));
                                                  ...
                                                  
                                                  Меня же интересует, как запихнуть в data (в ExtJS) выборку ресурсов:
                                                  MODx.combo.Doctor = function(config) {
                                                      config = config || {};
                                                      Ext.applyIf(config,{
                                                          store: new Ext.data.SimpleStore({
                                                              fields: ['d','v']
                                                              ,data: [['Иванов',1],['Петров',2],['Сидоров',3]]
                                                          })
                                                          ,displayField: 'd'
                                                          ,valueField: 'v'
                                                          ,mode: 'local'
                                                          ,triggerAction: 'all'
                                                          ,editable: false
                                                          ,selectOnFocus: false
                                                      });
                                                      MODx.combo.Status.superclass.constructor.call(this,config);
                                                  };
                                                  Ext.extend(MODx.combo.Doctor,Ext.form.ComboBox);
                                                  Ext.reg('modx-combo-doctor',MODx.combo.Doctor);
                                                  
                                                  1. Yana V 28 января 2014, 13:03 # 0
                                                    Я делала так:
                                                    MODx.combo.Currency = function(config) {
                                                        config = config || {};
                                                        Ext.applyIf(config,{
                                                            name: 'currency'
                                                            ,id: config.id
                                                            ,hiddenName: 'currecy_id'
                                                            ,displayField: 'currency_title'
                                                            ,valueField: 'currency_id'
                                                            ,listWidth : 110
                                                            ,paging: false
                                                            ,fields: ['currency_id','currency_title']
                                                            //,pageSize: 20
                                                            ,collapseFirst: false
                                                            ,triggerAction: 'all'
                                                            ,emptyText: 'Выберите валюту...'
                                                            ,url: MODx.config.base_url+'core/components/aliexpress/connectors/index.php'
                                                            ,baseParams: {
                                                                action: 'mgr/currency/getlist'
                                                            }
                                                        });
                                                        MODx.combo.Currency.superclass.constructor.call(this,config);
                                                    };
                                                    
                                                    ну и в getlist
                                                    $q = $modx->newQuery('AliCurrency');
                                                        $q->select('AliCurrency.*');
                                                        $total = $modx->getCount('AliCurrency',$q);
                                                        // $q->limit($limit,$offset );
                                                        
                                                        $q->prepare();
                                                        $quotes = $modx->getCollection('AliCurrency', $q);
                                                        //$index=0;
                                                        foreach($quotes as $quote) {
                                                            $fields[] = $quote->toArray();
                                                        }
                                                    return $this->outputArray($fields,$total);
                                                    
                                                    1. Denis Marocco 28 января 2014, 14:51 # 0
                                                      Премного благодарен!
                                                      1. Denis Marocco 28 января 2014, 21:07 # 0
                                                        Выскакивает ошибка «Uncaught TypeError: Cannot call method 'getCount' of undefined»
                                                        1. yani 28 января 2014, 23:47 # 0
                                                          это вы в классе используете или просто в php файле?
                                                          1. Denis Marocco 28 января 2014, 23:55 # 0
                                                            Сделал класс getdoctors.class.php, проверял через runProcessor получаю json как надо:
                                                            {"total":"2","results":[{"doctor_id":7,"fullname":"Иванов"},{"doctor_id":6,"fullname":"Петров"]}}
                                                            
                                                            При попытке создать или редактировать предмет ничего не происходит, в консоле ExtJS ругается!
                                                            1. Yana V 29 января 2014, 11:09 # 0
                                                              в классе надо писать $this->modx->getCount('AliCurrency',$q);
                                                              1. Denis Marocco 29 января 2014, 17:02 # 0
                                                                Я так и сделал.
                                                                $total = $modx->getCount('modUserProfile',$q);
                                                                ...
                                                                return $this->outputArray($fields,$total);
                                                                
                                                                Причем, если не указывать $total
                                                                return $this->outputArray($fields);
                                                                
                                                                функция сама считает количество и возвращает json с «total»:«2».
                                                                Я пробовал даже так: комментировал все в классе и тупо возвращал json
                                                                return '{"total":"2","results":[{"doctor_id":7,"fullname":"Иванов"},{"doctor_id":6,"fullname":"Петров"]}}';
                                                                
                                                                Один фиг, ExtJS кидает ошибку: «Uncaught TypeError: Cannot call method 'getCount' of undefined»
                                                                1. Yana V 29 января 2014, 17:27 # +1
                                                                  JSON не валидный
                                                                  1. Denis Marocco 29 января 2014, 23:40 # 0
                                                                    Я просто опечатался. Приведу для ясности весь код:
                                                                    MODx.combo.Doctor = function(config) {
                                                                        config = config || {};
                                                                        Ext.applyIf(config,{
                                                                            name: 'doctor'
                                                                            ,id: config.id
                                                                            ,hiddenName: 'id'
                                                                            ,displayField: 'fullname'
                                                                            ,valueField: 'id'
                                                                            ,listWidth : 200
                                                                            ,paging: false
                                                                            ,fields: ['id','fullname']
                                                                            ,collapseFirst: false
                                                                            ,triggerAction: 'all'
                                                                            ,emptyText: 'Назначение доктора...'
                                                                            ,url: entry.config.connector_url
                                                                            ,baseParams: {
                                                                                action: 'mgr/item/getdoctors'
                                                                            }
                                                                        });
                                                                        
                                                                        MODx.combo.Doctor.superclass.constructor.call(this,config);
                                                                    };
                                                                    Ext.extend(MODx.combo.Doctor,Ext.form.ComboBox);
                                                                    Ext.reg('modx-combo-doctor',MODx.combo.Doctor);
                                                                    
                                                                    getdoctors.class.php
                                                                    class entryDoctorGetListProcessor extends modObjectGetListProcessor {
                                                                    
                                                                    	public function process() {
                                                                    
                                                                            global $modx;
                                                                            
                                                                            $q = $modx->newQuery('modUser');
                                                                            
                                                                            $q->leftJoin('modUserProfile', 'Profile', array('Profile.internalKey = modUser.id'));
                                                                            
                                                                            $q->select(array(
                                                                                    'modUser.id',
                                                                                    'Profile.fullname',
                                                                                ));
                                                                            
                                                                            $q->where(array('modUser.primary_group' => 3));
                                                                            
                                                                            $total = $modx->getCount('modUser',$q);
                                                                            
                                                                            $users = $modx->getCollection('modUser', $q);
                                                                            
                                                                            foreach($users as $user) {
                                                                                $fields[] = array('id' => $user->get('id'), 'fullname' => $user->get('fullname'));
                                                                            }
                                                                            
                                                                            return $this->outputArray($fields, $total);
                                                                            
                                                                    	}
                                                                    
                                                                    }
                                                                    
                                                                    return 'entryDoctorGetListProcessor';
                                                                    
                                                                    1. Yana V 30 января 2014, 13:14 # 0
                                                                      надо смотреть на месте) в плане в админке) если что почта в профиле
                                                                      1. Denis Marocco 30 января 2014, 16:38 # 0
                                                                        В профиле где? Я то не вижу, через что вы авторизовались!)
                                                                        1. Yana V 30 января 2014, 16:41 # 0
                                                                          сорри, анпишите на wax100@rambler.ru
                                                      2. Дмитрий Крахмалев 29 января 2014, 08:46 # 0
                                                        Блин вот всё на вас ребята держится! =) Огромное вам спасибо за то что вы для нас обычных пользователей пишите)
                                                        1. Дмитрий Крахмалев 29 января 2014, 09:05 # 0
                                                          Все сделал как тут, установилось все отлично. Какие файлы должны быть изменены чтобы изменить структуру таблицы. Нужно сделать таблицу Вида: Откуда/Куда/Расстояние/Цена.
                                                          Я так понимаю мне надо менять модель и схему, а вот в каких файлах не пойму. посмотрел в папке mysql есть inc фал я так думаю он должен генерироваться на основе схемы? или надо руками его править там?

                                                          Если я изменю файл iway.mysql.schema.xml на свою структуру базы, изменю iwayitem.map.inc.php, надо ли в каких файлах изменения вносить. И как обновить компонент…
                                                          В общем нашел платный курс Василия Наумкина, но пока что то 2 тысячи многовато для меня. Подешевле бы было бы самое то!)

                                                          1. Дмитрий Крахмалев 29 января 2014, 09:50 # 0
                                                            Создал новую таблицу, сгенерировал по ней inc файлы и схему (схема попала в корень папки model). Отталкивался от этого урока Пользовательские таблицы в Modx но не понял как их потом использовать. создал снипет в нем пишу
                                                            <?php
                                                            $modx->addPackage('iway', 'core/components/iway/model/', 'modx_my_');
                                                            $result = $modx->getCollection('iway');
                                                            foreach($result as $row){
                                                              print "<br />Next:". $row->get('from');
                                                            }
                                                            
                                                            В phpmyadmin создана таблица modx_my_iway с полями типа текст from,to,distance,price1,price2,price3. Заполнил таблицу случайным образом.
                                                            Ничего не выводит! Просто пусто… в чем дело никак не пойму.
                                                            1. Дмитрий Крахмалев 29 января 2014, 10:27 # 0
                                                              что за ошибка
                                                              Fatal error: Class 'iway_mysql' not found in /home/c/compse2m/test.compse2m.bget.ru/public_html/core/xpdo/xpdo.class.php on line 770
                                                              Что она значит и как бороться с ней? переделываю все уже поэтапно по этой ссылке генерируется схема, все нормально, папки появляются, а вот при выполнении
                                                              <?php
                                                              
                                                              error_reporting(E_ALL);
                                                              ini_set('display_errors','1');
                                                              
                                                              $modx->addPackage('distancer',MODX_BASE_PATH.'core/components/distancer/model/','modx_my_');
                                                               
                                                              $newItem = $modx->newObject('iway');
                                                              $newItem->set('from','AAAA');
                                                              $newItem->set('to','BBB');
                                                              $newItem->set('distance',300);
                                                              $newItem->set('price1',300);
                                                              $newItem->set('price2',300);
                                                              $newItem->set('price3',300);
                                                              if(!$newItem->save()){
                                                                return 'Error save';
                                                              }
                                                              return 'Ok, save!';
                                                              Белый экран. если показ ошибок php включить то ошибка
                                                              Fatal error: Class 'iway_mysql' not found in /home/c/compse2m/test.compse2m.bget.ru/public_html/core/xpdo/xpdo.class.php on line 770
                                                              Компонент создаю новый называл distancer. я так понимаю тут iway получено с имени базы modx_my_iway.

                                                              Пробовал вместо этого писать такЕ
                                                              $mytab = $modx->getService('distancer','Iway',$modx->getOption('mytable.core_path',null,$modx->getOption('core_path').'components/distancer/').'model/distancer/',$scriptProperties);
                                                              if (!($mytab instanceof Iway)) return 'no connect';
                                                              
                                                              $myres = $modx->getIterator('iway');
                                                              $out = '';
                                                              foreach ($myres as $myr) {
                                                                 $out .= $myr->from;
                                                                 echo "сюда зашел";
                                                              }
                                                              return $out;
                                                              Смог соединится, а вот как дальше работать. попробовал вывести данные — не вывел
                                                              1. Дмитрий Крахмалев 29 января 2014, 16:29 # 0
                                                                Все разобрался со всем
                                                                1. Yana V 30 января 2014, 13:14 # 0
                                                                  у меня так тоже бывает) пока дождешься кого — сама и решишь
                                                                2. Сергей Лелеко 04 марта 2014, 20:22 # 0
                                                                  Возможно глупый вопрос, но: Клонировал с гитхаба пакет, сделал переименование, создал конфиг для сборки, собрал пакет, поставил пакет. Но почему-то когда пытаюсь попасть в панель управления записями пакета — белая страница. Чего-то не создалось?
                                                                  И второй сразу вопрос, если я хочу натравить на свою таблицу(Ы), то лучше модель нормальную создать перед сборкой пакета? или можно уже после сборки и установки править наживую без проблем?
                                                                  1. Чикин Артур 05 марта 2014, 06:13 # 0
                                                                    Саму модель БД нужно определить сразу, ибо она устанавливается 1 раз во время установки покета. А вот php файлы можешь править уже «на живую»
                                                                  2. SM 25 июня 2014, 14:56 # 0
                                                                    А что если нужно добавить в таблицу еще одну колонку?
                                                                    Я записываю в brandsextra.mysql.schema.xml поле которое описывает колонку таблицы.
                                                                    Генерирую.
                                                                    Однако в админке поле не появляется, приходится дописывать файлы js для вывода/редактирования этих данных.
                                                                    Скрипт только генерирует модель или js файлы тоже есть возможность как то генерировать в соответствии с новой таблицей?
                                                                    1. Василий Наумкин 27 июня 2014, 22:50 # 0
                                                                      Только модель, конечно.
                                                                    Добавление новых комментариев отключено.