Есть сниппет для редактирования ресурса с фронта, данные отправляю через FornIt.
Но работает только с ресурсом id=1, в остальных случаях ресурс не обновляется а логи пусты.
Не могу понять в чем может быть проблема.
<?php
$title = $_POST['title'];
$content = $_POST['content'];
$resId = $_POST['resId'];
$resourceData = array(
'id' => $resId,
'pagetitle' => $title,
'content' => $content,
'context_key' => 'web'
);
$response = $modx->runProcessor('resource/update', $resourceData );
$modx->cacheManager->clearCache();
return true;
Стал сравнивать что говорит debugMode при редактировании ресурса id=1 и ресурса id=19 (Параметры у них одинаковые), и разница в выводе начинается только на 1353 строке, но к сожалению, пока не силен во всех процессах Модкса.
ID=1
[2013-10-31 13:45:01] (DEBUG @ /index.php) Returning table name: `modx_register_messages` for class: modDbRegisterMessage
[2013-10-31 13:45:01] (DEBUG @ /index.php) Returning table name: `modx_register_topics` for class: modDbRegisterTopic
[2013-10-31 13:45:01] (DEBUG @ /index.php) Returning table class: modDbRegisterTopic for class: modDbRegisterTopic
[2013-10-31 13:45:01] (DEBUG @ /index.php) Returning table name: `modx_register_topics` for class: modDbRegisterTopic
[2013-10-31 13:45:01] (DEBUG @ /index.php) Returning ancestry for modDbRegisterTopic: Array
(
[0] => modDbRegisterTopic
[1] => xPDOSimpleObject
[2] => xPDOObject
)
ID=19
[2013-10-31 13:42:49] (DEBUG @ /index.php) Returning table name: `modx_register_messages` for class: modDbRegisterMessage
[2013-10-31 13:42:49] (DEBUG @ /index.php) Returning table name: `modx_register_topics` for class: modDbRegisterTopic
[2013-10-31 13:42:49] (DEBUG @ /index.php) Returning table class: modDbRegisterMessage for class: modDbRegisterMessage
[2013-10-31 13:42:49] (DEBUG @ /index.php) Returning table name: `modx_register_messages` for class: modDbRegisterMessage
[2013-10-31 13:42:49] (DEBUG @ /index.php) Returning ancestry for modDbRegisterMessage: Array
(
[0] => modDbRegisterMessage
[1] => xPDOObject
)
Посмотрел кучу примеров с редактированием ресурсов с фронта и ни у кого нету проблем с аналогичным кодом.
Заранее — благодарю.
Николай 01.11.2013 14:11 #
1. В данном вопросе есть подводные камни. Для начала надо озадачиться с правами. Простой пользователь без прав не сможет редактировать документы, у него на это тупо не будет прав. Так что придется дать юзерам права на контекст web на возможность редактирования документов. Конечно можно переопределить resource/update — процессор, но лучше этого не делать, так как там в методе getInstance происходит свич на реальный процессор в зависимости от класса документа.
2. 'context_key' => 'web' вот так лучше не делайте. И вообще, лучше вот так делать:
if($doc = $modx->getObject('modResource', $resId)){
$data = $doc->toArray();
$data['pagetitle'] = $title;
$data['content'] = $content;
$response = $modx->runProcessor('resource/update', $data);
$modx->cacheManager->clearCache();
}
Так у вас будет документ дергаться чисто по id и меняйте только те данные, которые действительно надо поменять.