Migx поле - изменение через xpdo из фронтенда

Вечер добрый ну собвственно весь вопрос в названии темы
Nir Frost
20 сентября 2015, 20:25
modx.pro
4
5 368
0

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

Илья Уткин
21 сентября 2015, 17:35
+2
MIGX — это текстовый ТВ, который содержит в себе JSON. Поэтому получить можно так:

<?php
$migx = $modx->resource->getTVValue('tvname');
$items = $modx->fromJSON($migx);
$output = array();
foreach($items as $item) {
  $output[] = $item['field1'].' — '.$item['field2'];
}
return implode(PHP_EOL, $output);
?>
    Илья Уткин
    21 сентября 2015, 17:36
    +3
    А, надо же изменить)))
    <?php
    $migx = $modx->resource->getTVValue('tvname');
    $items = $modx->fromJSON($migx);
    $output = array();
    foreach($items as $item) {
      $item['field1'] = 'test';
      $output[] = $item;
    }
    $modx->resource->setTVValue('tvname', $modx->toJSON($output));
    ?>
      Andrey
      20 сентября 2016, 20:42
      0
      Приветствую! А можно небольшой вопросик, как должен выглядеть чанк обертка для данного вывода? И можно ли использовать этот метод с TicketForm? Заранее благодарю за помощь!
        Илья Уткин
        21 сентября 2016, 08:11
        0
        Это не вывод, это наоборот, ввод. С TicketForm можно — нужно создать плагин, доработать этот код и данные будут сохраняться.
          Andrey
          21 сентября 2016, 10:57
          0
          Ну имеется ввиду как при этом должна выглядеть форма добавления на фронте? Т.е. как должна выглядеть обертка для такого вызова? нашел, что то вроде вот:
          [[migxJsonToPlaceholders? &prefix=`tv.` &value=`[[+tv_json]]`]]
           
          <input id="tv[[+tv.id]]" name="tv[[+tv.id]]"
              type="text" class="textfield"
              value="[[+tv.value]]"
              tvtype="[[+tv.type]]"
          />
           
          <script type="text/javascript">
          // <![CDATA[
           
          Ext.onReady(function() {
              var fld = MODx.load({
                  xtype: 'textfield'
                  ,applyTo: 'tv[[+tv.id]]'
                  ,width: '30%'
                  ,enableKeyEvents: true
                  ,msgTarget: 'under'
                  //,allowBlank: {if $params.allowBlank == 1 || $params.allowBlank == 'true'}true{else}false{/if}
                  //{if $params.maxLength},maxLength: {$params.maxLength}{/if}
                  //{if $params.minLength},minLength: {$params.minLength}{/if}
               
                  ,listeners: { 'keydown': { fn:MODx.fireResourceFormChange, scope:this}}
              });
              Ext.getCmp('modx-panel-resource').getForm().add(fld);
              MODx.makeDroppable(fld);
          });
           
          // ]]>
          </script>
          И вот:
          [[migxJsonToPlaceholders? &prefix=`tv.` &value=`[[+tv_json]]`]]
           
          <div style="float:left;">
          <label for="tv[[+tv.id]]" class="x-form-item-label modx-tv-label" style="width: auto;margin-bottom: 10px;">
          <div class="modx-tv-label-title"> 
          <span class="modx-tv-caption" id="tv[[+tv.id]]-caption">[[+tv.caption]]</span>
          </div>    
          </label>
          <div class="x-form-clear-left"></div>
          [[+tv_formElement]]
          </div>
          При использовании штатного migx сниппета migxJsonToPlaceholders. Но как я понял, эта фигня сделана для добавления через бэкенд или я чего то недопонял!
            Илья Уткин
            21 сентября 2016, 11:47
            0
            Это не знаю… Готового решения у меня нет
              Andrey
              21 сентября 2016, 11:48
              0
              :( собственно в этом и вся загвоздка!
        Гущин Сергей
        Гущин Сергей
        08 июня 2018, 02:57
        0
        А как обновить одну запись, Илья, можешь подсказать? То есть есть например время 8.00, 9.00… и у каждого времени есть поля: имя телефон. И вот надо обновить одну строку с каким-то выбранным временем.
        Твой код обновляет все записи. А если вставляешь if($item['time']==...) тогда он удаляет все записи и оставляет одну запись, где идет совпадение по времени.
        Я так понимаю что обновить одну запись не получится никак, только если напрямую с БД работать.
        Или же надо брать весь массив и перезаписывать его как-то что-ли?
          Гущин Сергей
          Гущин Сергей
          08 июня 2018, 12:59
          0
          Решил задачу
      Дмитрий
      11 марта 2016, 13:46
      0
      А не мог бы написать как добавлять в migx с помощью xPdo? Очень надо!
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        10