Попытка создать несколько ресурсов Modx из формы
У меня есть форма, которая находится внутри таблицы, которая выглядит примерно так, как показано ниже, у меня есть фрагмент Modx, который запускается при отправке, который должен создать несколько новых ресурсов на основе входных массивов, отправленных через.
<table class="table responsive-table">
<thead>
<th>pagetitle</th>
<th>longtitle</th>
</thead>
<tbody>
<tr>
<td><input type="text" name="pagetitle[]" value="" /></td>
<td><input type="text" name="longtitle[]" value=""/></td>
</tr>
<tr>
<td><input type="text" name="pagetitle[]" value="" /></td>
<td><input type="text" name="longtitle[]" value=""/></td>
</tr>
</tbody>
</table>
То, что происходит, когда запускается ниже, создает новые ресурсы, как и ожидалось, однако все поля установлены на "Массив". а не значение массива.
<?php
$allFormFields = $hook->getValues();
foreach ($allFormFields as $key => $value)
{
$doc = $modx->newObject('modResource');
$doc->set('createdby', $modx->user->get('id'));
$doc->set('pagetitle', $value['pagetitle']);
$doc->set('longtitle', $value['longtitle']);
$doc->save();
}
return true;
2 ответа
print_r()
на $allFormFields
очень вероятно, даст вам что-то вроде этого:
// dump of form values
Array (
[pagetitle] => Array (
[0] => 'pagetitle1'
[1] => 'pagetitle2'
),
[longtitle] => Array (
[0] => 'longtitle1'
[1] => 'longtitle2'
),
)
Вот почему вы получаете "Массив", когда вы пытаетесь установить поля ресурса в $allFormFields['pagetitle']
,
Я не совсем уверен, что вы делаете, но, вероятно, было бы лучше построить вашу форму следующим образом:
<input type="text" name="resource[0][pagetitle]" value="" />
<input type="text" name="resource[0][longtitle]" value="" />
<input type="text" name="resource[1][pagetitle]" value="" />
<input type="text" name="resource[1][longtitle]" value="" />
Затем вы можете просмотреть поля формы для каждого ресурса следующим образом:
<?php
$allFormFields = $hook->getValues();
$userId = $modx->user->get('id');
foreach ($allFormFields['resource'] as $fields) {
$doc = $modx->newObject('modResource');
$doc->set('createdby', $userId);
$doc->set('pagetitle', $fields['pagetitle']);
$doc->set('longtitle', $fields['longtitle']);
$doc->save();
}
Спасибо окьянеть,
Я закончил тем, что делал ниже, который работает, как я надеялся:
<?php
$allFormFields = $hook->getValues();
$resources = array();
foreach ($allFormFields as $field => $values) {
if (is_array($values)) {
foreach ($values as $key => $value) {
$resources[$key][$field] = $value;
}
}
}
foreach ($resources as $resource) {
if ($resource[pagetitle] == '') {
continue;
}
$doc = $modx->newObject('modResource');
$doc->fromArray($resource);
$doc->set('createdby', $modx->user->get('id'));
$doc->set('template', $hook->getValue('template'));
$doc->set('parent', $hook->getValue('parent'));
$doc->save();
}
return true;