Попытка создать несколько ресурсов 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;
Другие вопросы по тегам