Николай Артамонов

Николай Артамонов

Был в сети 05 декабря 2025, 11:34
Заказы не принимаю
Сам отвечу, может кому-то пригодится.

В классе компонента и его плагине есть проверки статуса заказа. Если статус отличный от «новый», то там сразу идет редирект на страницу ошибки оплаты без отправки данных в платежную систему и соответвенно без колбека от нее.

В моем случае письмо со ссылкой на оплату отправляется при выставлении дополнительного статуса заказа «Принят к оплате». Соответвенно сразу фейлится.

В итоге пришлось сделать копию класса и внести правки – добавить новый статус и поправить условие проверки.
Финальная версия.

Прошлая давала ошибку при создании нового документа. Добавил проверку есть ли id.

@EVAL

if(! empty( $modx->resource->get('id') ) )  {

$id = $modx->resource->get('id');
$parent = $modx->resource->get('parent');
$parentResource = $modx->getObject('modResource', $id);
$grandfResource = $modx->getObject('modResource', $parent);

$parentId = $parentResource->get('parent');
$grandfId = $grandfResource->get('parent');

$pg = "$grandfId,$parentId";

return $modx->runSnippet('pdoResources',array('parents' => $pg,'depth'=>0,'limit'=>0,'where'=>'{"template:=":47}','sortby'=>'pagetitle','sortdir'=>'ASC','tpl'=>'@INLINE [[#[[+parent]].pagetitle]] > [[+pagetitle]]==[[+id]]','outputSeparator'=>'||'));

}
Решил так:

@EVAL

$id = $modx->resource->get('id');
$parent = $modx->resource->get('parent');

$parentResource = $modx->getObject('modResource', $id);
$grandfResource = $modx->getObject('modResource', $parent);

$parentId = $parentResource->get('parent');
$grandfId = $grandfResource->get('parent');

$pg = "$grandfId,$parentId";

return $modx->runSnippet('pdoResources',array('parents' => $pg,'depth'=>0,'limit'=>0,'where'=>'{"template:=":47}','tpl'=>'@INLINE [[#[[+parent]].pagetitle]] > [[+pagetitle]]==[[+id]]','outputSeparator'=>'||'));
Вдруг кому-то понадобится.

Проблема видимо в том, что конструкции типа [[+parent]],[[#[[+parent]].parent]] обрабатываются только в шаблонах.
Рано обрадовался. Моя конструкция почему-то выводит документы из всех уровней дерева.

--Дед
------Показать чекбоксом
----Родитель
------Документ со списком чекбоксов
------Показать чекбоксом
------Показать чекбоксом
----Родитель
------Документ со списком чекбоксов
------Показать чекбоксом
----Родитель
------Документ со списком чекбоксов
------Показать чекбоксом

В моей выборке получается, что в ресурсе где выводится список чекбоксов видны все ресурсы с шаблоном 47 изо всех родителей и деда. Хотя вроде как вот это

parents'=>'[[+parent]],[[#[[+parent]].parent]]',
должно передать id текузего родителя и деда для выборки. Depth пробовал 0. Все равно.

Что тут не так?
Сам отвечу на свой вопрос:

Примерно вот так через pdoResource.

@EVAL return $modx->runSnippet('pdoResources',array('parents'=>'[[+parent]],[[#[[+parent]].parent]]','depth'=>1,'limit'=>0,'where'=>'{"template:=":47}','tpl'=>'@INLINE [[#[[+parent]].pagetitle]] > [[+pagetitle]]==[[+id]]','outputSeparator'=>'||'));
В итоге получил список чекбоксов от документов с id 47 от родителя и от дедушки. В value у чекбоксов id документа.
Спасибо большое! Это был не кэш. Пока ждал ответа меня озарило. Оказалось, что плагин, который обновляет наличие еще реагирует на onDocFormSafe. То есть все, что правишь руками, при сохранении снова перезаписывается. Отсюда и значения ручные слетают.
Да, видимо //ob_start(); непричем. В режиме инкогнито, авторизуется нормально и с ним, но это видимо после каких-то манипуляций, о которых я сам не подозреваю. Потому как вчера в любых режимах вываливался белый экран.
Обнаружил следующие ошибки:

Warning: session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id — headers already sent in /home/p60497/www/.../core/model/modx/moduser.class.php on line 344

Warning: session_regenerate_id() [function.session-regenerate-id]: Cannot regenerate session id — headers already sent in /home/p60497/www/.../core/model/modx/moduser.class.php on line 344

Warning: Cannot modify header information — headers already sent by (output started at /home/p60497/www/anhel-trading.ru/index.php:3) in /home/p60497/www/.../core/model/modx/modresponse.class.php on line 264
Спасибо, теперь все ясно!

Вообще, конечно, было бы здорово иметь возможность сохранять пользователей при заказе так, как считаешь нужным стандартным способом. Тогда можно будет и адреса предзаполнять из этих данных и клиентскую базу собирать и с днем рождения поздравлять отпрвляя дисконты и все в таком духе.
Спасибо, попробую.

Василий, скажи, а насколько хлопотно доработать систему кэширования, или может сделать отдельную систему для minishop именно под этот проект, ну и систему для более менее приличных URL без index.php?page=блабла, вроде: products/12345?

Если остановимся на MODx, можно ли к тебе обратиться за этими доработками?