[modClassVar] - переменные класса, альтернатива ТВ

Данный компонент — небольшая альтернатива ТВ полям со своими плюсами и минусами.
В админке представлен в виде таба



тут же можно создавать и редактировать переменные. Данная вкладка грузится как для ресурса, так и для пользователя. Не составит особого труда подгрузить панель и к кастомному классу.


Панель переменных
Открывается по нажатию на «шестеренку», доступно создание и редактирование переменных.



  • задать значение по дефолту
  • конфигурацию поля extjs
  • ограничение для вывода поля
Панель значений переменных
Основная рабочая панель, открыта при загрузке страницы.

Собственно редактирование переменной.

Получение переменных
Значения переменных выставляются в плейсходеры вида
[[!+имя_переменной.название_поля_переменной]]
например
[[!+google_place.value]]

более удобно конечно использовать пакет pdoTools и Fenom
получить все переменные ресурса можно так
{var $data = $.mcv->getValues($_modx->resource.id)}
{$data.google_place}

Доступные типы переменных
  • textfield
  • textarea
  • numberfield
  • modx-combo-boolean
  • modx-combo-user
  • modclassvar-combo-user
  • modclassvar-combo-users
  • modclassvar-combo-autocomplete
  • modclassvar-combo-option
  • modclassvar-combo-datetime
  • modclassvar-combo-file
  • modclassvar-combo-resource
  • modclassvar-combo-resources
  • modclassvar-combo-ymaps-place
  • modclassvar-combo-gmaps-place

ps. На этом вкратце все, если есть вопросы задавайте.
Гитхаб — github.com/vgrish/modClassVar
Если пакет необходим в репозитории — пишите добавлю.
Володя
19 июля 2016, 09:02
modx.pro
7
4 890
+13
Поблагодарить автора Отправить деньги

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

Руслан Кундиус
19 июля 2016, 15:03
+1
со своими плюсами и минусами
тут бы поподробнее, какие главные плюсы и минусы?
    Володя
    19 июля 2016, 15:28
    +1
    плюсы:

    — простота добавления переменных, как в админке так и через api
    github.com/vgrish/modClassVar/blob/master/_build/resolvers/resolve.fields.php#L18-L26

    — доступ ко всем переменным в одном месте и через api
    получить в чанке/шаблоне
    {var $data = $.mcv->getValues('', $_modx->resource.id)}
    {$data.google_place}

    добавить
    if (!$mcv = $modx->getService('modClassVar')) {
        return;
    }
    
    $rid = 1;
    $values = $mcv->getValues('', $rid);
    $values = array_merge($values,array(
        'desc' => 'описание'
    ));
    
    If ($resource = $modx->getObject('modResource', $rid)) {
        
        $resource->set('modclassvar', $values);
        $modx->invokeEvent('OnDocFormSave', array(
            'mode' => modSystemEvent::MODE_UPD,
            'id' => $resource->get('id'),
            'resource' => &$resource,
        ));
    }
    Удобно в плане что то добавить, поменять и тд. не заходя в админку MODX а лишь работая в иде.

    минусы:
    — не работает с родными ТВ шками, а было бы круто
    — все в одной куче, в одном табе, для кого то не очень
    — что то еще…

    Но это только мое мнение…

Павел Гвоздь
19 июля 2016, 15:53
+4
Хорошее решение! Я потыкал его ещё на днях, скачав с твоего гитхаба. :) Думаю в магазине дополнений лишним точно не будет.
    Николай
    20 июля 2016, 09:56
    +2
    Без лишних слов в репозиторий
      Leonid Krylov
      21 июля 2016, 20:24
      0
      Присылай, выложим с удовольствием!
          Борис
          26 июля 2016, 06:26
          0
          Нажимаю «шестеренку» для создания переменной.
          Появляется 2 одинаковых блока. Добавляется в верхний список (блок.).
            Володя
            26 июля 2016, 08:43
            0
            да так и было задумано, верхний блок создание переменных, нижний редактирование.
            Или у вас там еще чтото появляется? Скрин прикладывайте, спасибо!
            Raimei
            31 июля 2016, 14:18
            0
            Подцепить к заполнению TicketForm получится?
            Raimei
            05 августа 2016, 14:39
            +1
            Как добавить в выборку поля от modClassVar?

            Есть у меня (к примеру) вызов getPage c element=getTickets. Что мне сделать что бы получить в чанке с tpl вывод нужных мне полей?
              Raimei
              05 августа 2016, 14:48
              +1
              Сам просил, сам ответил. Наверное не очень красиво всё это вызывается, но работает! Причем без излишней нагрузки.

              В чанке добавляем в самый верх:
              {var $values = $.mcv->getValues($id)}

              Где надо вызываем в таком виде:
              {$values.имяполя}
                Володя
                05 августа 2016, 16:50
                +1
                ну да, все верно, если можно получить все значения и вывести что необходимо.
                Или же добавить в выборку — docs.modx.pro/components/pdotools/classes/pdofetch#Метод-addJoins

                например
                &leftJoin=`{
                    "coords": {
                	    "class": "modClassVarValues",
                	    "on": "coords.class = 'modResource' AND coords.cid = msProduct.id AND coords.key = 'coords'"
                    }
                }`
                &select=`{
                    "coords": "coords.value as coords"
                }`
                  Raimei
                  05 августа 2016, 17:03
                  0
                  &leftJoin=`{"iconcategory": {"class": "modClassVarValues","on": "iconcategory.class = 'modResource' 
                  AND iconcategory.cid = msProduct.id AND iconcategory.key = 'iconcategory'"}}`
                  &select=`{"iconcategory": "iconcategory.value as iconcategory"}`
                  Что-то не хочет с pdoMenu + Tickets работать
                    Володя
                    05 августа 2016, 17:07
                    0
                    msProduct?
                      Raimei
                      05 августа 2016, 17:09
                      0
                      [2016-08-05 14:08:27] (ERROR @ /home/public_html/core/components/pdotools/model/pdotools/pdofetch.class.php : 170) [pdoTools] Error 42S22: Unknown column 'msProduct.id' in 'on clause'
                      [2016-08-05 14:08:27] (ERROR @ /home/public_html/core/components/pdotools/model/pdotools/pdotools.class.php : 972) PHP warning: current() expects parameter 1 to be array, string given
                      Похоже что да
              Виталий
              24 ноября 2016, 13:12
              0
              День добрый! Не сохраняет переменные в ресурсе на последней версии. префикс установил
              var_
              создал перемену
              var_value
              и значение к ней. После введения значения и нажатия на кнопку сохранить. Значение не сохраняется.
              Смотрел сюда
              class modClassVarOnDocFormSave
              В массиве передается пустое значение.
                Володя
                24 ноября 2016, 13:44
                0
                а с базовым префиксом все работает?
                  Виталий
                  24 ноября 2016, 13:49
                  0
                  Перестраивал обратно на базовый. Тоже самое. Версия МодХ 2.5.1
                    Володя
                    24 ноября 2016, 13:58
                    0
                    на тестовом сайте повторите?
                      Виталий
                      24 ноября 2016, 14:12
                      0
                      Написал на почту доступы к тестовому сайту. Все сделал также, получил такой же результат.
                Sergey Pozhidaev
                29 ноября 2016, 11:45
                0
                Ошибка.
                [2016-11-29 11:45:24] (ERROR @ /var/www/lesdom/www/core/components/pdotools/model/pdotools/pdotools.class.php : 940) Unknown accessor '$.mcv' in modchunk/10 line 1, near '{var $data = $.mcv' <- there
                Последний MODX и PDOTools
                Александр
                07 мая 2019, 17:39
                0
                Здравствуйте подскажите пожалуйста, я установил [modClassVar] добавил тестовую переменную назвал ее test тип поля текстовое поле как я могу вывести ее на странице? [[!+test.textfield]] ничего не выводи, что я делаю не так?
                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                  27