MIGX и MIGXdb как осуществить замену значения


Доброе время суток.

Кто использовал MIGX или MIGXdb.

Вопрос такой как корректно поменять значение параметра.

Насколько я понял MIGX завязывает между собой уже существующие TV так что тут вроде бы просто можно обратится прямо к нужной TV и сменить ее значение.

А вот в MIGXdb, TV хранятся в отдельной таблице

Может кто что подскажет?

Пример:

Я создаю товар у которого есть какой то перечень характеристик — цвет к примеру

количество цвет статус

5 красный (radio=1)

3 синий (radio=1)

Купили к примеру 3 синих и количество по складу стало 0
Чтобы убрать из товара на сайте цвет мне нужно значение radio поставить 0.

Либо когда товар с таким цветом снова стал больше нуля включить его выдачу.

Как то так
27 октября 2012, 02:06    Николай   
0    1386 0

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

  1. Евгений Дурягин 27 октября 2012, 13:56 # 0
    В MIGXdb вы же сами таблицу описываете и определяете какие в ней поля должны быть.
    Вот и обращайтесь к этой таблице как и к любой другой, через xPDO.
    А TV используется только для отрисовки значение поля.
    1. Николай 28 октября 2012, 01:48 # 0
      Дело то в том что вроде бы у бруно в MIGXdb заложен этот функционал, просто не описан насколько я понял сам класс migx наследует методы modx, а в конфигурации есть поле classname где указывается имя объекта, при этом в мануале есть такие строчки…
      ______________________________________________________________
      Register the TVs for our processors (getlist,fields)

      We need to register TVs to include them in the getlist- and fields-processors.
      Todo so we need a new config-file under /core/components/migx/configs/

      with the same name as our MIGX-configuration: childstutorial.config.inc.php (should allready be installed with the MIGX-package)
      and this content:

      /core/components/migx/configs/childstutorial.config.inc.php
      1
      2
      3
      <?php
      $this->customconfigs['includeTVs'] = 1;
      $this->customconfigs['includeTVList'] = 'price,images,categories';
      ___________________________________________________________________

      Насколько я понял после этого к переменным

      можно обращаться как то так myClass->setTVValue(«prise»,$prise);

      просто если это так то зачем делать велосипед… тем более не факт, что он выйдет лучше ))
      1. Евгений Дурягин 28 октября 2012, 12:54 # 0
        Вы смотрите пример как в таблице отображать ресурсы с TV. Вам это надо?
        Поэтому и работает myClass->setTVValue(«prise»,$prise), т.к. myClass скорей всего является наследником modResource, а значение хранится в TV.

        Или все же вам надо у каждого ресурса сделать список значений в виде таблицы и хранить это все в базе?
        1. Николай 29 октября 2012, 00:47 # 0
          Как отображать описано вмануале это все ясно… у меня вопрос как правильно (через скрипт) манипулировать уже имеющимся в TV данными

          Я понимаю, что это все хранится в базе в виде JSON массива и мне просто нужно переформировав его перезаписывать… это самый очевидный вариант.

          Но если для этого уже в пакете предусмотрен инструмент почему бы не воспользоватся им… ))

          У меня просто руки не доходят потеснить это дело я вот и спросил МБ кто уже плавал знает
          1. Евгений Дурягин 29 октября 2012, 11:41 # 0
            Дак вы используете MIGX или все-таки MIGXdb?
            MIGXdb данные хранит не в JSON, а в таблице, которую вы сами же и определяете. А доступ к ней можно сделать через xPDO $modx->getObject, $modx->getCollection итд
    2. Виталий Батушев 28 октября 2012, 00:08 # 0
      Вы ошибаетесь на счет MIGX. MIGX не связывает TV, а как исключительно верно указал Евгений Дурягин, использует их для указания на то, как их рендерить в форме ресурса. Значение же самого TV типа MIGX — это JSON-строка. Я бы не стал заморачиваться на MIGXdb для создания TV для товара, для этого подойдет «обычный» TV типа migx. Изменять цену можно с помощью msGetPrice. Пишете там функцию, которая распарсивает значение вашего TV типа MIGX и изменяет цену согласно этому значению. Как-то так.
      1. Николай 28 октября 2012, 01:52 # 0
        нужно менять как раз не цену, а содержимое MIGX элемента в зависимости от количества товара на складе, включать или выключать цвет к примеру
        1. Николай 28 октября 2012, 01:55 # 0
          просто к сожалению мануал по MIGX весьма скудный, и автор не описывает что для чего((
          … ткните сюда ткните туда, вуаля вы получили счастье и код вообще без комментариев практически…

          С кодом Василия несравнить
          1. Виталий Батушев 28 октября 2012, 03:00 # 0
            Мануал или код все-таки? Мануал MIGX, конечно, довольно скромный, но это больше касается MGIX-db, а с самим MIGX там особо нечего разбираться. Я мигиксы в каждом проекте использую. Пару-тройку раз migx-db, остальные — «обычный».
          2. Виталий Батушев 28 октября 2012, 02:57 # 0
            Ну можно и это. Я ж не в курсе, что конкретно Вам надо. Можете, просто, скажем, сделать TV с полями, где одно это цвет товара, а другое количество товара этого цвета. При продаже товара с этим цветом — меняете количество. Когда количество равно нулю, при генерации listbox-а просто игнорируете создание option этого цвета.
            1. Николай 28 октября 2012, 04:20 # 0
              угу я именно так и планирую просто… интересует как правильнее это делать)
        2. Николай 08 ноября 2012, 01:08 # 0
          Кто может подсказать где найти информацию о renderera — х какие есть и для чего используются в мануале упоминается только renderImage.

          Либо где по коду посмотреть.

          Есть поле где использую чекбокс так вот когда добавляю строку чек бокс неотрисовывается

          {"field":"on_off_status","caption":"Вкл/Выкл","inputTV":"on_off_status_MigxTV"},


          {"header": "Статус публикации", "width": "100", "sortable": "false", "dataIndex": "on_off_status","renderer": " Какой то рендер нужен "}
          1. Серьёзный 25 октября 2013, 21:36 # 0
            Меня тоже интересует инфа о renderer
            Вы должны авторизоваться, чтобы оставлять комментарии.