Сохранение-то нормально с плагином проходит? А то может у вас там десятки тыщ доков и все обваливается.
Создавать плагин поленился, но в консоли попробовал — вполне рабочий код. Какая-нибудь нелепость наверное. array('parent' => 6 — parent не тот или mainPageTpl отличный от 1 и 11 — типа того наверно косяк. Вы хотите перебирать все документы у родителя 6 при любом сохранении любого документа, ориентируясь на главную страничку? В чем цель плагина?
В меню(шестеренка в правом верхнем углу панели администратора) Настройки системы->Файловая система->Разрешённые к загрузке файлы и в этом атрибуте добавляете расширение IPEG , просто такого расширения по умолчанию вроде как и нет)
Уважаемые знатоки, нужна Ваша помощь пытаюсь сменить шаблон у всех подчиненных доков в зависимости от того какой шаблон установлен у главной но что то ничего не происходит, <?php if ($modx->event->name == 'OnBeforeDocFormSave') { $mainPage = $modx->getObject('modResource',1); $mainPageTpl = $mainPage->get('template');
$q = $modx->newQuery('modResource', array('parent' => 6, 'deleted' => false,));
$product = $modx->getIterator('modResource', $q);
// Меняем шаблон у ресурса
switch ($mainPageTpl){
case 1:
foreach ($product as $prod) {
$prod->set('template', 3);
$prod->save();
}
break;
case 11:
foreach ($product as $prod) {
$prod->set('template', 12);
$prod->save();
}
}
}
Помогите, пожалуйста, периодически сталкиваюсь с такой проблемой: не загружается файл IPEG. Пробовала переименовать файл, преобразовала в PNG и всеравно не загружается. Подскажите как быть, только понятным языком (я не программист). MODX Revolution 2.2.0-pl2 (traditional). Спасибо заранее
Спасибо за ответ. Все более и более убеждаюсь, что на крупных проектах, где работает несколько человек, поддержка сайта на modx становится затруднительна и вынуждает переходить на фреймвор. Но на маленьких он незаменим.
На сохранение нового статуса лучше всего использовать расширяющий modObjectUpdateProcessor. Там в методе beforeSave() — самое удачное место для проверки изменения поля status. Но у вас реализация может и отличаться. В любом случае, вам надо перед сохранением не просто проверять поле status == 'готов', но и то, что значение было изменено, так как вы могли апдейтнуть строку и по другой причине, и если каждый раз надеяться только на значение статуса, то можно повторно отправить смс. В xPDOObject есть специальный метод — isDirty(), проверяющий, было ли изменено значение. Вот его и используйте. if($object->isDirty('status') AND $object->status == 'готов'){ $neadSendSMS = true; if($object->save()){ // send sms } } Если у вас update-процессор, то в beforeSave() проверяете поле, а в afterSave() (что свидетельствует о том, что объект был сохранен) отправляете смс.
У меня такой сниппет обрабатывает форму добавления, редактирования и удаления данных <?php if (!$_POST['sheet']) { $processor = 'sheet/create'; } else { $_POST['id'] = $_POST['sheet']; $modx->setPlaceholder('id', $_POST['id']); if ($_POST['remove']) { $processor = 'sheet/remove'; } else { $processor = 'sheet/update'; } } $processorProps = array('processors_path' => $modx->getOption('core_path') . 'components/exam/processors/'); $response = $modx->runProcessor($processor, $_POST, $processorProps); if ($response->isError()) { $hook->addError('process_error', $response->getMessage()); return false; } return true; Файл процессор для редактирования: <?php class ExamSheetUpdateProcessor extends modObjectUpdateProcessor {
public $classKey = 'ExamSheet';
public $objectType = 'object';
public function beforeSet() {
if (!$this->modx->user->id) return 'Вам нужно авторизоваться';
if ($this->object->get('created_by') != $this->modx->user->id)
return 'Вы не можете редактировать чужие записи';
return true;
}
}
return 'ExamSheetUpdateProcessor'; Подскажите, где нужно добавить проверку, что если в поле статус ставится готов, то отправлять sms? Простым кодом давно бы написал, а в xpdo не силен, но хочется делать как правильнее.