Наверх

Кастомизация форм в MODX Revolution



В MODX есть интересная возможность — вы можете менять внешний вид формы редактирования ресурсов практически как вам хочется. Причем вы можете сделать разные формы для разных групп пользователей, и даже для разных ресурсов. Можно выбирать разные профили форм для данного ресурса в зависимости от его шаблона, родителя или других свойств.

И для этого нам не придется писать ни одной строчки кода!

Давайте, посмотрим, что, например, можно сделать с формами:



Во первых, уберем лишние пункты верхнего меню в один общий пункт — «Разработчику». Для этого заходим в раздел «Система» -> «Действия», создаем в корне новый пункт меню и перетаскиваем все ненужные пункты туда:


Дальше заходим в раздел «Безопасность» -> «Настройка форм» и создаем новый профиль, например, «Контент-менеджер». Потом нажимаем на нем правой кнопкой мыши и выбираем «Редактировать», переходим на вкладку «Группы пользователей» и добавляем группу, к которой будут применены новые правила.

Далее мы создаем новый набор правил. Их два вида — один для формы создания ресурса, второй — для формы его редактирования (create и update, соответственно). Этих правил может быть несколько — хоть по правилу для каждого ресурса.

После того, как правило будет создано, вы увидите страницу настройки — там три вкладки: Информация о наборе правил, Регионы, Дополнительные поля.

На первой вкладке перечислены стандартные поля ресурса. Их можно отключать или переименовывать. Регионы — это вкладки у ресурса. Вы можете создать новый регион и поместить туда некоторые ТВ-параметры, тогда они будут у ресурса не на вкладке «Дополнительные поля», а на новой вкладе — которую вы укажете. Здесь же можно отключать стандартные вкладки, например, «Группы ресурсов».

На третьей вкладке вы указываете расположение того или иного ТВ-параметра.

Я сделал небольшую шпаргалку по стандартным регионам:



Итак, давайте сразу уберем для пользователя все вкладки, кроме первой. Убираем галочки у регионов: modx-page-settings, modx-panel-resource-tv, modx-resource-access-permissions. Дальше — из стандартных полей оставим только pagetitle и alias. У остальных галочки убираем. Указываем новое название для поля pagetitle: «Заголовок новости» и alias: «Адрес страницы».

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

Осталось указать, для каких ресурсов действует это правило — в пункте «Шаблон» указваем, к ресурсам с каким шаблонам применять правило. Если правило для всех шаблонов, то ничего не указываем. И еще есть два пункта: «Ограничивающее поле» и «Ограничивающее значение». Здесь можно указывать остальные поля.

Давайте, укажем, что это правило относится к ресурсам, находящимся в «Новостях» — в пункте «Ограничивающее поле» пишем parent, а в «Ограничивающее значение» id ресурса «Новости», например, 22.


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

  1. Володя Володин 16 апреля 2013, 19:58(Комментарий был изменён) # 0
    Очень интересные статьи! Спасибо!
    1. Алексндр Наумов 18 апреля 2013, 14:42(Комментарий был изменён) # 0
      Спасибо Илья, отличный пост, да и сайт в целом очень информативный!
      1. Михаил 02 июня 2013, 10:55(Комментарий был изменён) # 0
        Добрый день! Искал обратную связь, что бы написать письмо, но не нашел. Поэтому извиняюсь что здесь пишу. Как Вы выводите код в неформатированном виде. У меня на странице MODx пытается его обработать. Если подскажете, буду очень признателен!
        1. Илья Уткин 02 июня 2013, 12:43(Комментарий был изменён) # 0
          Блог работает на Tickets, соответственно, все тикеты и комментарии фильтруются с помощью Jevix. Вот он-то и занимается форматированием и выводом кода на экран. Насколько я знаю, Jevix можно использовать и отдельно от Tickets.
        2. Михаил 02 июня 2013, 13:43(Комментарий был изменён) # 0
          У меня тоже установлен Tickets но блог веду без него. Т.е. с помощью Jevix я могу сделать вывод кода на страницу с подсветкой?
          1. Александр 21 июля 2013, 17:33(Комментарий был изменён) # 0
            Илья, спасибо за статью, всё вполне доходчиво.

            Подскажите, как можно изменить высоту редактора ресурсов? Насколько я понял, это поле с названием modx-resource-content. Причём надо его регулировать не жёстко в пикселах, а до полного заполнения оставшейся высоты экрана.

            Дело в том, что modx-resource-content не всегда занимает максимально возможную площадь по высоте, а при редактировании скриптов и таблиц стилей удобно, чтобы оно было как можно больше (вплотную до нижней границы экрана). Там часто остаётся ещё приличная полоса, которая ничем не занята.

            И в правом нижнем углу редактора ресурсов нет контрола для растяжения поля редактирования, как в TinyMCE, например.

            1. Evgeny Epifanov 28 сентября 2013, 14:39(Комментарий был изменён) # 0
              Илья, а как можно отредактировать форму быстрого редактирования? Например вывести туда несколько TV параметров?
              1. Илья Уткин 30 сентября 2013, 10:00(Комментарий был изменён) # 0
                Нет, не знаю, как-то даже не искал такой возможности. По идее, если не нравится скорость загрузки сайта, можно подключить AjaxManager.
              2. Илья Уткин 30 сентября 2013, 09:59(Комментарий был изменён) # 0
                Вы можете написать свой css-стиль, где переопределите свойства нужных элементов. Этот стиль можно подключать плагином на событие OnManagerPageInit:
                <?php
                if ($modx->event->name != 'OnManagerPageInit') return;
                $modx->regClientCSS('/css/mgrResourcePage.css');
              3. Дмитрий 06 марта 2014, 23:12 # 0
                День добрый! подскажи пжст, а как добавить TinyMCE к «анонс новости»
                спасибо за статью.
                1. Илья Уткин 07 марта 2014, 10:17 # 0
                  Спрячьте поле «Аннотация», а на его место выведите ТВ-параметр. У ТВшек редактор легко прицепляется — надо только при создании это указать.
                2. Олег 29 апреля 2014, 20:16 # 0
                  Илья, можно ли поле контент перенести в свою созданую вкладку как это можно было делать в modx evo в ManagerManager. Я не нашел такой возможности, к сожалению
                  1. Илья Уткин 29 апреля 2014, 21:57 # 0
                    Насколько я помню, такой возможности нет, но можно контент вообще скрыть, а вместо него использовать ТВ (прямо в шаблоне вместо [[*content]] писать, напирмер, [[*cont]]) или при сохранении ресурса плагином брать содержимое этого ТВ-параметра и записывать в поле content.
                    1. Олег 29 апреля 2014, 22:00 # 0
                      Да, я так и делаю. пользуясь случаем спрошу.
                      Мне нужно в плагине сделать
                      В evo это проще.
                      В рево есть такой метод — $modx->controller->setProperty('template',3);
                      Но что-то он не работает. Может я его неверно использую?
                      1. Илья Уткин 29 апреля 2014, 22:37 # 0
                        Сам таким методом не пользовался (не приходилось). На ум приходит только проверить, что плагин вызывается именно на событие OnDocFormRender или другое, когда смена шаблона возможна.
                        1. Олег 29 апреля 2014, 22:38 # 0
                          Это я проверил все ок.
                  2. Евгений 15 июня 2014, 02:45 # 0
                    Здравствуйте, Илья, большое спасибо за статью, очень полезно. Скажите пожалуйста, а можно каким-то образом перенести поле родительского ресурса со вкладки «Настройки» например на главную?
                    1. Илья Уткин 17 июня 2014, 11:52 # 0
                      На прямую такой возможности в MODX я не видел, но можно создать ТВ, в котором выводить ресурсы для выбора, а уже при сохранении документа с помощью плагина менять значение поля parent, чтобы оно соответствовало значению этого ТВ.
                      1. Евгений 17 июня 2014, 12:17 # 0
                        Ясно, грустно, но неприятность эту мы переживём. ©

                        Пользуясь случаем, хочу задать ещё один вопрос: решали ли вы такую задачу, как вывод той же статистики Яндекса или Liveinternet в дашбоард? Я знаю, что существует такой плагин для Google Analytics, и всё. И вообще интересует ваше мнение относительно функционала Dashboard, как вы его используете и с какими плагинами.
                        1. Илья Уткин 17 июня 2014, 12:19 # 0
                          Мне тоже это интересно) На самом деле, я никак не пользуюсь, потому что как раз виджетов особо нет — надо писать самому. Fi1osof как-то собирался уделить этому какое-то время, но я давно подвижек в этой области не видел…
                          1. Евгений 17 июня 2014, 12:22 # 0
                            А то просто грустно как-то. Такая куча полезного места пропадает. Я за счёт стороннего плагина Quickstart buttons делаю вот так:
                            cdn.joxi.ru/uploads/prod/2014/06/17/148/9b0/211d7b1a2fd3e27ae8d562b1055d816383ca6e4c.jpg

                            Но это пожалуй и всё, что я могу придумать. :(
                    2. Глеб 02 октября 2014, 06:23 # 0
                      Как кастомизировать формы Быстрого редактирования(скрыть лишнее для определённой группы пользователя, добавить TV и т.п.)?
                      Так понимаю без правки кода тут не обойтись?
                      1. Илья Уткин 02 октября 2014, 06:46 # 0
                        Да, насколько мне известно, стандартных механизмов для этого нет.
                      2. Антон Соловьёв 21 марта 2015, 17:08 # 0
                        А можно ли как-то добавить свой регион (не выкладку)? Например, было бы здорово, если какие-то текстовые тв выстроились в три столбца. Если бы тв выстроились в одну строку из по два или три тв в каждой строке — это в некоторых случаях было бы мегаудобнее для пользователей.
                        Т.е. сейчас тв как-то так строятся
                        {xtype: 'textfield',fieldLabel: _('tv.desc.1'),name: 'tv.name1',id: 'id1',anchor: '99%'}
                        ,{xtype: 'textfield',fieldLabel: _('tv.desc.2'),name: 'tv.name2',id: 'id2',anchor: '99%'}
                        ,{xtype: 'textfield',fieldLabel: _('tv.desc.3'),name: 'tv.name3',id: 'id3',anchor: '99%'}
                        ,{xtype: 'textfield',fieldLabel: _('tv.desc.4'),name: 'tv.name4',id: 'id4',anchor: '99%'}
                        ,{xtype: 'textfield',fieldLabel: _('tv.desc.5'),name: 'tv.name5',id: 'id5',anchor: '99%'}
                        ,{xtype: 'textfield',fieldLabel: _('tv.desc.6'),name: 'tv.name6',id: 'id6',anchor: '99%'}
                        
                        То нужно сделать что-то типа
                        {xtype: 'textfield',fieldLabel: _('tv.desc.1'),name: 'tv.name1',id: 'id1',anchor: '99%'}			
                        ,{
                        		layout:'column'
                        		,border: false
                        		,anchor: '100%'
                        		,items: [{
                        			columnWidth: .5
                        			,layout: 'form'
                        			,defaults: { msgTarget: 'under' }
                        			,border:false
                        			,items: [
                        				{xtype: 'textfield',fieldLabel: _('tv.desc.2'),name: 'tv.name2',id: 'id2',anchor: '99%'}
                        				,{xtype: 'textfield',fieldLabel: _('tv.desc.3'),name: 'tv.name3',id: 'id3',anchor: '99%'}
                        			]
                        		},{
                        			columnWidth: .5
                        			,layout: 'form'
                        			,defaults: { msgTarget: 'under' }
                        			,border:false
                        			,items: [
                        				{xtype: 'textfield',fieldLabel: _('tv.desc.4'),name: 'tv.name4',id: 'id4',anchor: '99%'}
                        				,{xtype: 'textfield',fieldLabel: _('tv.desc.5'),name: 'tv.name5',id: 'id5',anchor: '99%'}
                        			]
                        		]}
                        }
                        ,{xtype: 'textfield',fieldLabel: _('tv.desc.6'),name: 'tv.name6',id: 'id6',anchor: '99%'}
                        
                        Может есть какие готовые решения для этого, чтобы можно было подсмотреть идею и сделать по подобию? Ну, вроде минишоп хорошо кастомизируются, но там наверняка много всего сложного и т.д. Хотя буду конечно смотреть, но сейчас хочу найти другие варианты для изучения
                        1. Илья Уткин 23 марта 2015, 07:57 # 0
                          У полей есть id, соответственно можно используя плагин на событие OnDocFormPrerender подцепить свой файл стилей и с помощью css поля кастомизировать — изменить ширину, задать float и пр.
                          1. Антон Соловьёв 06 апреля 2015, 12:18 # 0
                            Файл стилей это не совсем то. Тут и верстку хорошо бы переделать. Хотя бы для тв задать свои регионы внутри выкладки, чтобы можно было их по секторам разбросать. А задать float может конечно помочь. Но это не удобно совсем. Хотя вариант, конечно.
                        2. Сергей 08 июля 2015, 14:39 # 0
                          Подскажите, как ограничить выбор шаблонов, к примеру для каталога товаров, были бы доступны шаблоны категория и товар.
                          Всем заранее спасибо!
                          1. Илья Уткин 09 июля 2015, 06:53 # 0
                            Я не знаю, можно ли в MODX сделать так, но есть способ обойти любые ограничения)

                            1. Через кастомизацию форм скрываем поле «Шаблон»
                            2. Создаём ТВ с типом «Список» и вписываем в него те шаблоны, которые хотим сделать доступными для выбора
                            3. Создаем плагин на сохранение ресурса, который проверяет значение этого ТВ и устанавливает соответствующее значение для поля «Шаблон»
                          2. Эрадж 08 июля 2015, 20:33 # 0
                            Илья, доброе время суток. Спасибо за статью.
                            Есть один вопрос, возможно Вы знаете ответ на него.
                            Как скрыть от менеджера определенные шаблоны? Скажем у меня 5 шаблонов, а я хочу чтобы менеджер видел только 1.
                            1. Илья Уткин 09 июля 2015, 06:55 # 0
                              Вам поможет ответ на предыдущий комментарий:
                              Я не знаю, можно ли в MODX сделать так, но есть способ обойти любые ограничения)

                              1. Через кастомизацию форм скрываем поле «Шаблон»
                              2. Создаём ТВ с типом «Список» и вписываем в него те шаблоны, которые хотим сделать доступными для выбора

                              3. Создаем плагин на сохранение ресурса, который проверяет значение этого ТВ и устанавливает соответствующее значение для поля «Шаблон»
                              1. Эрадж 09 июля 2015, 12:22 # 0
                                Спасибо большое за ответ.
                            2. Константин 08 августа 2015, 16:12 # 0
                              Илья, ты в этой теме мастер, подскажи пожалуйста, как ты подключил редактор текста и к Анонсу новостей, и к содержимому ресурса?(как на 2й картинке в статье выше ilyaut.ru/assets/images/formCustomisation-big.png) В настройке форм не смог найти это
                              1. Илья Уткин 10 августа 2015, 07:29 # 0
                                Так вот же
                                Спрячьте поле «Аннотация», а на его место выведите ТВ-параметр. У ТВшек редактор легко прицепляется — надо только при создании это указать.
                                1. Константин 20 августа 2015, 08:17 # 0
                                  ГЕНИАЛЬНО!) Получилось)
                                  Спасибо большое
                              2. Дмитрий 15 ноября 2015, 20:05 # 0
                                Спасибо большое, Илья. А как можно осуществить вывод TV под полем ввода контента? На многих примерах видел, но как сделать пока не нашел. Спасибо.
                                1. Илья Уткин 17 ноября 2015, 09:13 # 0
                                  В настройках системы есть такой пункт: Разместить TV ниже контента (tvs_below_content). Вот его вам надо включить.
                                  1. Дмитрий 18 ноября 2015, 00:06 # 0
                                    Спасибо)
                                2. Дмитрий 16 ноября 2015, 02:12 # 0
                                  И можно еще один вопрос, где-то в уроках слышал, что при выводе TV на первую закладку, их можно как-то группировать. Как это сделать? Это по типу группировки по категориям? Например, создаю два TV SEO-title и keywords и назначаю обоим категорию SEO. Т.о.во вкладке по-умолчанию «ДОПОЛНИТЕЛЬНЫЕ ПОЛЯ» они у меня находятся во вкладке SEO. Возможно ли такую вкладку сделать на первой страничке, где поле ввода контента?

                                  Если же нет, то реально ли как-то убрать пустующую вкладку SEO после переноса TV-полей на страницу контента из вкладки «ДОП.ПОЛЯ»?

                                  Спасибо.
                                  1. Илья Уткин 17 ноября 2015, 09:14 # 0
                                    Нет, я не нашел решения этой проблемы, к сожалению)
                                    1. Дмитрий 18 ноября 2015, 00:06(Комментарий был изменён) # 0
                                      Спасибо)
                                  2. Роман 15 декабря 2015, 12:40 # 0
                                    Илья, здравствуйте! Встал вопрос о необходимости разделения TV по разным контекстам.

                                    Можно ли это как-то решить с помощью настроек форм и если да, то какое ограничивающее поле должно быть?

                                    Может быть есть другие пути спрятать определенные TV в определенных контекстах?
                                    1. Илья Уткин 15 декабря 2015, 12:41 # 0
                                      Да, можно. Поле context_key
                                      1. Роман 15 декабря 2015, 16:09 # 0
                                        Большое спасибо! Всё получилось
                                    2. Михаил 16 декабря 2015, 11:31 # 0
                                      Илья, приветствую!

                                      Нашел в одном видео вот такую формусоздания/редактирования ресурса.

                                      Кастомные поля выделил красным.

                                      На сколько трудоемко сделать также?
                                      Есть ли что почитать по теме?
                                      Я так понимаю, что стандартными средствами MODX этого не добиться?

                                      Заранее спасибо!
                                      1. Илья Уткин 18 декабря 2015, 05:58 # 0
                                        Это дополнение SEO Pro.
                                        1. Михаил 18 декабря 2015, 06:14 # 0
                                          Ух ты!

                                          Все гораздо проще оказалось!

                                          Но все равно интересует вопрос на сколько трудоемко самому такое сделать для других целей?
                                          1. Илья Уткин 18 декабря 2015, 06:53 # 0
                                            Наверное, трудоёмко) Не знаю)
                                      2. Роман 05 февраля 2016, 05:39(Комментарий был изменён) # 0
                                        Доброе утро, Илья! А можно ли в ограничивающее поле указать отрицание? То есть «Всё, кроме».

                                        Пытаюсь решить задачку: отобразить TV только в одном ресурсе.

                                        Создаю первое правило, где скрываю поле из всех ресурсов, затем второе правило, с ограничивающим полем по ID, где включаю отображение этого поля – не срабатывает. При этом второе правило работает на «скрытие». То есть что-нибудь скрыть (не скрытое в первом правиле) я могу.
                                        1. Илья Уткин 05 февраля 2016, 08:26 # 0
                                          Да, кстати, сталкивался с таким… По-моему, так нельзя… Придется как-то по-другому выкручиваться
                                          1. Роман 06 февраля 2016, 16:29(Комментарий был изменён) # 0
                                            Решил плагином:

                                            $eventName = $modx->event->name;
                                            switch($eventName) {
                                                case 'OnDocFormPrerender':
                                                    $page_id = $resource->get('id');
                                                    if ($page_id != 9) { // указываем ID ресурса, где стиль указанный ниже стиль не будет применяться       
                                             $modx->event->output('<style>#selector {display:none;}</style>'); // Указываем стиль для скрытия элементов
                                                    }
                                                    break;
                                            }
                                            1. Илья Уткин 08 февраля 2016, 07:53 # 0
                                              Ух-ты, ну да, логично и удобно)
                                        2. Константин 05 апреля 2016, 12:01 # 0
                                          У меня единственный вопрос, а кто-нибудь знает можно ли на определенной странице выводит какой-то свой контент, к примеру, под разделом «Содержимое»?
                                          Я хочу для админа выводить список пользователей, которые записались на определенное событие. Ну либо что-то подобное. Вроде как это CMF, а вот фреймворковской кастомизации не вижу впритык в описании системы.
                                          1. Илья Уткин 05 апреля 2016, 12:12 # 0
                                            Создаёшь ТВ. Можно использовать MIGX как раз для списков. А уже ТВ можно вывести в форме редактирования.

                                            Кроме того, можно «вклиниться» в процесс рендера страницы и добавить все, что угодно.

                                            Вот пример, как добавить поле, например, на страницу пользователя: https://modx.pro/howto/8324-i-extended-standard-user-table/#comment-58251
                                          2. Константин 05 апреля 2016, 12:14 # 0
                                            Т.е. внутри мигикса можно выводить данные из реальных таблиц?
                                            И туда можно передать id текущего документа?
                                            1. Илья Уткин 05 апреля 2016, 12:23 # 0
                                              Можно. Я точно не знаю, как, но гуглить надо запрос MIGXdb
                                            2. Константин 05 апреля 2016, 12:27 # 0
                                              Спасибо)))
                                              1. Андрей 21 апреля 2016, 20:14 # 0
                                                Илья, подскажите пожалуйста, а можно ли как-то отредактировать страницу входа в mgr?
                                                Логотип свой установить например и сделать аутентификацию через hybridauth. Спасибо
                                                1. Илья Уткин 25 апреля 2016, 12:34 # 0
                                                  Да, можно. Нужен плагин на событие OnManagerLoginFormPrerender. В нем можно вместо стандартной формы авторизации запилить все, что угодно
                                                  1. stager 21 ноября 2016, 14:04(Комментарий был изменён) # +1
                                                    Форма авторизации — это обычная MODX страница. Соответственно, ее можно переопределить и создать свою страницу с формой.
                                                    Понадобится лишь вmanager/templates и manager/controllers скопировать папку default. Обозвать ее как-то по своему.
                                                    А также в manager_theme указать вновь созданную папку с уже вашим кодом, стилями, картинками и прочим.

                                                    Подробнее вот тут
                                                2. Павел 10 января 2017, 10:26 # 0
                                                  Привет. А как быть с кастомизацией создания ресурсов от Tickets. Пробую кастомизировать, но он почему то все поля выкидывает в самый низ, сориторовка не работает.
                                                  Скрин
                                                  1. Илья Уткин 10 января 2017, 11:09 # 0
                                                    Не знаю… Тикеты — это совсем другой тип ресурса, там не так всё просто.
                                                    1. Павел 10 января 2017, 12:06 # 0
                                                      Вот вот… даже решения никого не нашёл)) Вопрос Васе тогда надо задать)
                                                  2. Любовь 08 февраля 2017, 16:14 # 0
                                                    Не могу понять, подскажите, пожалуйста. В версии MODX 2.5.4 не получается добавить такую папку «Разработчику» или я не смогла найти как это сделать…
                                                    1. Илья Уткин 09 февраля 2017, 08:22 # 0
                                                      Насколько я понял, вам нужно создать «Регион» — тогда на странице редактирования появится вкладка с названием, который вы указали
                                                    2. УстюПаша 21 ноября 2017, 15:56 # 0
                                                      Фигасе! Илья и в 2013 году уже был таким крутым в MODX! я еще только узнал что такое modx В том году )
                                                      1. Илья Уткин 21 ноября 2017, 16:01 # 0
                                                        Я тогда ещё сидел на community.modx-cms.ru, которого сейчас уже нет. Раньше там было довольно активное сообщество. По субъективному мнению даже активнее, чем сейчас на modx.pro

                                                        Там писали в основном разные интересные штучки для ежедневного использования. А сейчас в основном если решение не запаковано в пакет и не размещено в репозитории, о нём молчат, почему-то.
                                                      2. Стас Панюков 24 ноября 2017, 02:52(Комментарий был изменён) # 0
                                                        Добрый день, Илья!
                                                        Подскажите где можно основные кнопки ресурсов поправить? (сохранить, копировать, просмотреть, отменить и т.д.) Конкретнее: интересно как отключить возможность «просмотра» у группы пользователей.
                                                        1. Илья Уткин 26 ноября 2017, 13:33 # 0
                                                          Этого я не знаю) Не было ещё такой задачи, не разбирался

                                                        Авторизация

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

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

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



                                                        Шаблоны MODX

                                                        1 2 Дальше »

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