worksize 17 января 2015 1 2
Дорогие друзья, здравствуйте, очень надеюсь на вашу поддержку, разрешить на первый взгляд вроде бы простую задачу. Для информации: новичек в MODX, на данный момент работаю с MODX Revolution 2.3.2-pl (traditional).

Ситуация такая, стараюсь реализовать функционал, добавления ресурсов пользователями из фронтэнд НЕОГРАНИЧЕННОЙ ВЛОЖЕННОСТИ. Что бы они сами могли создавать ресурс, и в него добавлять другие ресурсы, и так далее. Нашел сниппет в сети formit2resource и использую его в связке с FormIt.
Все вроде хорошо, но только до 2 уровня вложенности.

Например:
     РЕСУРС ОТЕЦ
              Ресурс пользователя 1
              Ресурс пользователя 1
                          Ресурс пользователя 2
                          Ресурс пользователя 2

И если попробовать добавить подресурс для ресурса 2 уровня, то он его просто перепишет и ничего не вложит. Как решить эту проблему? Как лучше сделать? Куда копать?

Вот вызов формит:

[[!FormIt?
&hooks=`formit2resource,redirect`
&redirectTo=`[[*id]]`
&template=`15`
]]


Вот сама форма:

<form id="add" action="[[~[[*id]]]]" method="post">
<input type="hidden" name="resource_id" value="[[*id]]" />
<input type="hidden" name="parent" id="parent" value="[[*id]]" />
<input type="hidden" name="published" id="published" value="1" />
<input type="hidden" name="hidemenu" id="hidemenu" value="1" />
<input type="hidden" name="cacheable" id="cacheable" value="0" />

Название:
<input type="text" name="pagetitle" id="pagetitle" class="form-control" value="[[+fi.pagetitle]]" />

Описание:
textarea id="content" name="content" class="form-control" style="height:150px;" 
									
<input type="submit" name="submit" style="margin-top:20px;" class="btn btn-yellow" value="Добавить" />
</form>


А вот сам сниппет formit2resource:


<?php
$doc = $modx->getObject('modResource',array('id'=>$hook->getValue('resource_id')));
 
if (empty($doc)){
    $doc = $modx->newObject('modResource');
    $doc->set('createdby', $modx->user->get('id'));
}
else{
    $doc->set('editedby', $modx->user->get('id'));
}
 
$allFormFields = $hook->getValues();
foreach ($allFormFields as $field=>$value)
{
 
   if ($field !== 'spam' && $field !== 'resource_id'){
         $doc->set($field, $value);
    }
}
$alias = $doc->cleanAlias($fields['pagetitle']);
if($modx->getCount(modResource, array('alias'=>$alias))!= 0) {
$count = 1;
$newAlias = $alias;
while($modx->getCount(modResource, array('alias'=>$newAlias))!= 0) {
$newAlias = $alias;
$newAlias .= '-' . $count;
$count++;
}
$alias = $newAlias;
}
$doc->set('alias',$alias);
$doc->set('template', $template);
$doc->save();
 
foreach ($allFormFields as $field=>$value)
{
    if (!empty($value) && $tv = $modx->getObject('modTemplateVar', array ('name'=>$field)))
    {
        /* handles checkboxes & multiple selects elements */
        if (is_array($value)) {
            $featureInsert = array();
            while (list($featureValue, $featureItem) = each($value)) {
                $featureInsert[count($featureInsert)] = $featureItem;
            }
            $value = implode('||',$featureInsert);
        }  
        $tv->setValue($doc->get('id'), $value);
        $tv->save();
    }
}
$modx->cacheManager->refresh();
 
return true;


Помогите пожалуйста друзья!
2 комментария
Fi1osof1
Fi1osof 18 января 2015г в 00:41 #
Смотрите, вот у вас в сниппете идет получение документа:
$doc = $modx->getObject('modResource',array('id'=>$hook->getValue('resource_id')));


А в форме у вас есть поле:
<input type="hidden" name="resource_id" value="[[*id]]" />

Конечно, в форму добавляется ID текущего документа, и он апдейтится, а не создается новый.
Уберите поле resource_id, если создаваться должен, а не обновляться.
a
amsterdam 21 сентября 2016г в 07:03 #
А возможно добавлять ресурсы, будучи не авторизованным пользователем?
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.