Migx поле - изменение через xpdo из фронтенда
Вечер добрый ну собвственно весь вопрос в названии темы
Комментарии: 10
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);
?>
А, надо же изменить)))
<?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));
?>
Приветствую! А можно небольшой вопросик, как должен выглядеть чанк обертка для данного вывода? И можно ли использовать этот метод с TicketForm? Заранее благодарю за помощь!
Это не вывод, это наоборот, ввод. С TicketForm можно — нужно создать плагин, доработать этот код и данные будут сохраняться.
Ну имеется ввиду как при этом должна выглядеть форма добавления на фронте? Т.е. как должна выглядеть обертка для такого вызова? нашел, что то вроде вот:
[[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. Но как я понял, эта фигня сделана для добавления через бэкенд или я чего то недопонял!
Это не знаю… Готового решения у меня нет
:( собственно в этом и вся загвоздка!
А как обновить одну запись, Илья, можешь подсказать? То есть есть например время 8.00, 9.00… и у каждого времени есть поля: имя телефон. И вот надо обновить одну строку с каким-то выбранным временем.
Твой код обновляет все записи. А если вставляешь if($item['time']==...) тогда он удаляет все записи и оставляет одну запись, где идет совпадение по времени.
Я так понимаю что обновить одну запись не получится никак, только если напрямую с БД работать.
Или же надо брать весь массив и перезаписывать его как-то что-ли?
Твой код обновляет все записи. А если вставляешь if($item['time']==...) тогда он удаляет все записи и оставляет одну запись, где идет совпадение по времени.
Я так понимаю что обновить одну запись не получится никак, только если напрямую с БД работать.
Или же надо брать весь массив и перезаписывать его как-то что-ли?
Решил задачу
А не мог бы написать как добавлять в migx с помощью xPdo? Очень надо!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.