Наверх

Отображение кастомных объектов в админке MODX (таблица ExtJS)

Сегодня я покажу как с использование костыля на быструю руку соорудить табличку в админке для нашего компонента. Кошерный метод разработки описал Василий Наумкин, за что ему большое спасибо. Для тех, кому на этих курсах пока слишком много информации и он хочет просто пощупать — как оно и где, подойдет мой метод. У нас уже есть компонент, он работает, из форнтенда данные добавляются, теперь мы хотим видеть их в админке. Скачиваем zip-архив из репозитория modExtra, заливаем его в корень сайта и распаковываем. В браузере открываем http://site-url.ru/modExtra-master/_build/build.transport.php. После этого идем в управление пакетами, нажимаем "Искать локально" и устанавливаем пакет modextra. Теперь в папках /assets/components/ и /core/components/ появилась папка modextra. Находим и редактируем файл items.grid.js и все файлы в папке /core/components/modextra/processors/mgr/item/. Чтобы подогнать под себя смотрите комментарии в коде — там написано, что и где менять. После этих действий можно открыть страничку нашего компонента (Компоненты -> modExtra). Список можно сортировать по любому столбцу, можно добавлять/редактировать/удалять записи. Только надписи не катят: "Создать предмет", "Удалить предмет" и прочее. Чтобы написать что-то свое, заходим в Система -> Управление словарями, выбираем пространство имен modextra и язык ru. Здесь меняем наименования, очищаем кеш сайта и любуемся. Источник: http://modx.im/blog/docs/1956.html


18 комментариев

  1. Михаил 19 августа 2014, 06:20 # 0
    Илья, а такой вопрос. Как создавать ресурс по нажатию кнопки. что бы не окно а именно новый ресурс?
    1. Илья Уткин 19 августа 2014, 06:28 # 0
      Нужно просто перенаправить пользователя на страницу
      http://revo.modx.ru/manager/index.php?a=55&context_key=web в MODX 2.2.x или на
      http://revo.modx.ru/manager/?a=resource/create&context_key=web в MODX 2.3.x
    2. Михаил 19 августа 2014, 06:35(Комментарий был изменён) # 0
      ,createEmployerPage: function(btn,e){
              var createPage = MODx.action ? MODx.action['resource/create'] : 'resource/create';
              MODx.loadPage(createPage, '&context_key=web');
          }
      
      выдает так:
      ?a=55&context_key=undefined
      PS Прошу прощения. Все работает. Видать чистка кеша не сразу помогает.
      А можно еще маленький вопросик. Как повесить свою CMP на этот вызов?
      1. Илья Уткин 19 августа 2014, 06:40(Комментарий был изменён) # 0
        Тогда не знаю… Я с ExtJS сам только недавно познакомился. Думаю, лучше спросить на modx.pro — Василий там часто помогает)
      2. Саша 09 сентября 2014, 19:25 # 0
        Привет, Илья!
        Спасибо за уроки!

        А можно ли создать несколько таблиц с переключением между ними по табам?
        1. Илья Уткин 09 сентября 2014, 19:37 # 0
          Это уже продвинутый уровень. Изучаем курс от Василия Наумкина
          1. Михаил 06 октября 2014, 10:22 # 0
            Конечно можно
          2. Николай 18 января 2015, 18:05 # 0
            Выходит весь фронтэнд в одном компоненте(exam) а бэкэнд в другом(modextra)?
            1. Илья Уткин 18 января 2015, 19:21 # 0
              Получается так.

              Но эти статьи я писал для того, чтобы можно было понять, что и как устроено в MODX. Этот способ пойдет, если нужно быстренько расширить функционал для какого-то конкретного проекта — мало ли какие у заказчиков задачи.

              Как правильно разрабатывать именно компоненты рассказал Василий.
              1. Андрей Иванов 27 февраля 2015, 05:26(Комментарий был изменён) # 0
                А что, если переименовать modExtra (у Василия есть скрипты), положить туда сгенерированную CMP модель, установить, переписать процессоры и т. д.?
                Если задача под конкретный проект, можно, в принципе, не заморачиваться на моментах чисто разработки, которым Василий в своем курсе уделяет много внимания (установка в отдельную директорию, пути и т п.)?

                С другой стороны, путь, скорее всего, тупиковый — если модель нужно будет перегенерировать в процессе доработки, то при таком раскладе, скорее всего, будут проблемы.
                Видимо, это оптимально — бэкэнд в одном компоненте, а фронтэнд — в другом…

                Или я ошибаюсь?
                1. Илья Уткин 27 февраля 2015, 11:12 # 0
                  Этот способ я описал, чтобы было проще понять тему. Лучше, конечно, делать так, как описано у Василия.
            2. Андрей Иванов 27 февраля 2015, 05:03 # 0
              Илья, большое спасибо! Отличная «подсобка» к курсу Василия!
              1. PM 07 сентября 2015, 18:02 # 0
                Сколько не пытался выполнить установку пакета modextra в том виде в котором он лежит на GitHub, постоянно выдает следующие ошибки —
                Пакет найден... сейчас идёт подготовка к его установке.
                
                Загрузка рабочего пространства пакета...
                
                Рабочее пространство загружено, сейчас устанавливаем пакет...
                
                Skipping vehicle object of class modAction (data object exists and cannot be upgraded); criteria: Array
                (
                    [namespace] => modextra
                    [controller] => index
                )
                
                
                Skipping vehicle object of class modMenu (data object exists and cannot be upgraded); criteria: Array
                (
                    [text] => modextra
                )
                
                
                Skipping vehicle object of class modChunk (data object exists and cannot be upgraded); criteria: Array
                (
                    [name] => tpl.modExtra.item
                )
                
                
                Created table `dev_modextra_items`
                SQL: CREATE TABLE `dev_modextra_items` (`id` INTEGER unsigned NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL DEFAULT '', `description` TEXT NULL, `active` TINYINT(1) NULL DEFAULT '1', PRIMARY KEY (`id`), INDEX `name` (`name`), INDEX `active` (`active`)) ENGINE=MyISAM
                
                
                Error removing field modExtraItem->active: Array
                (
                    [0] => 42000
                    [1] => 1090
                    [2] => You can't delete all columns with ALTER TABLE; use DROP TABLE instead
                )
                
                
                Error adding index PRIMARY to modExtraItem: Array
                (
                    [0] => 42000
                    [1] => 1072
                    [2] => Key column 'id' doesn't exist in table
                )
                
                
                Error adding index name to modExtraItem: Array
                (
                    [0] => 42000
                    [1] => 1072
                    [2] => Key column 'name' doesn't exist in table
                )
                
                
                Error adding index active to modExtraItem: Array
                (
                    [0] => 42000
                    [1] => 1061
                    [2] => Duplicate key name 'active'
                )
                
                
                Успешно установлен пакет modextra-1.0.0-beta
                
                
                А так же код довольно сильно отличается от той же заготовки которая используется в курсе у Василия. В той версии например для файла resolve.tables.php, в курсе показан один код, в самом Sendex другой, а в текущей заготовке третий (ещё тот квест надо сказать) и так далее по коду. PHP 5.5.9, MODX-2.4.0-rc1
                1. Илья Уткин 08 сентября 2015, 07:28 # 0
                  По поводу ошибок я не такой спец — лучше спросить на modx.pro

                  А вот по поводу разного кода могу ответить. Дело в том, что когда писали Sendex, modExtra уже существовал. Для того, чтобы Sendex работал, естественно, в код вносились правки, поэтому в заготовке и в компоненте код различается. Для того заготовка и нужна.

                  А различия между старой версией и новой объясняются тем, что мир не стоит на месте. Тем более Open Source. Люди находят лучшие решения для какой-то задачи, и предлагают дополнить или изменить код. Если автор согласен, он вносит эти изменения. Вот, кстати, тема, где недавно обсуждались изменения в modExtra: Update таблиц своего компонента
                  1. PM 12 сентября 2015, 15:57(Комментарий был изменён) # 0
                    Спасибо за ответ.
                    Я нашел решение этого вопроса, мне помог даунгрейд системы а именно до PHP 5.4 был 5.5.9 и Apache 2.2 был 2.4., mySQL и т.д.
                    Так как же помимо того что modExtra не создавала таблицы, CMP генератор так же отказывался создавать файлы связанные с моделью. Так же были замечены некоторые проблемы связанные со старым кодом и для меня подобное решение оказалось оптимальным выходом.
                2. Зиборов Виталий 09 октября 2015, 18:18 # 0
                  Илья, добрый вечер.
                  Попробовал переделать modExtra под свою таблицу, правда modExtra уже сильно изменился, но вроде всё изменил аналогично твоим рекомендациям.
                  Результат — белый экран при вызове modExtra.
                  Не посоветуешь, как отлаживать дополнения?
                  1. Илья Уткин 12 октября 2015, 08:24 # 0
                    Скорее всего, у вас отключён показ ошибок…
                    Попробуйте в файле /manager/index.php на первой строчке написать
                    @ini_set('display_errors',1);
                    1. Зиборов Виталий 14 октября 2015, 17:10 # 0
                      Спасибо за совет, Илья, но не помогло ;(

                  Авторизация

                  через сервис Loginza:

                  Подписка или RSS

                  Буду присылать новые статьи — никакого спама



                  Шаблоны MODX

                  1 2 Дальше »

                  Объектная
                  модель
                  MODX