[решено + дополнено] pdoPage спамит в отчет об ошибках
Вот такие ошибки сыпятся очень часто:
сама строка
ДОПОЛНЕНО. ВАЖНО
Если будете изменять moderrorhandler.class.php — не забудьте его потом вернуть обратно, когда найдете ошибки.
У нас на одном из сайтов из-за этой правки были проблемы на бэкэнде
miniShop2 не выводит список товаров в документе Категория товаров (под админкой)
[2021-07-15 12:18:01] (ERROR @ /сайт/public_html/core/cache/includes/elements/modsnippet/17.include.cache.php : 152) PHP warning: A non-numeric value encountered
[2021-07-15 12:18:01] (ERROR @ /сайт/public_html/core/cache/includes/elements/modsnippet/17.include.cache.php : 152) PHP warning: Division by zero
сама строка
$cache = !empty($cache) || (!$modx->user->id && !empty($cacheAnonymous));
$url = $pdoPage->getBaseUrl();
$output = $pagination = $total = $pageCount = '';
$data = $cache
? $pdoPage->pdoTools->getCache($scriptProperties)
: array();
if (empty($data)) {
$output = $pdoPage->pdoTools->runSnippet($scriptProperties['element'], $scriptProperties);
if ($output === false) {
return '';
} elseif (!empty($toPlaceholder)) {
$output = $modx->getPlaceholder($toPlaceholder);
}
// Pagination
$total = (int)$modx->getPlaceholder($totalVar);
$pageCount = !empty($scriptProperties['limit']) && $total > $offset
----- ОШИБКА ---->>> ? ceil(($total - $offset) / $scriptProperties['limit'])
: 0;
что надо сделать чтобы это исправить (где и что я сделал не так ), заранее спасибо?ДОПОЛНЕНО. ВАЖНО
Если будете изменять moderrorhandler.class.php — не забудьте его потом вернуть обратно, когда найдете ошибки.
У нас на одном из сайтов из-за этой правки были проблемы на бэкэнде
miniShop2 не выводит список товаров в документе Категория товаров (под админкой)
Комментарии: 10
Там написано, что встречено нечисловое значение, а потом деление на ноль. Отследите значения по переменным и типам переменных: $total, $offset, $scriptProperties['limit'], например.
upd: А, это кусок кода оригинального pdoPage?) Думаю тогда стоит посмотреть, как выводите пагинацию и нет ли странного в параметрах сниппета.
upd: А, это кусок кода оригинального pdoPage?) Думаю тогда стоит посмотреть, как выводите пагинацию и нет ли странного в параметрах сниппета.
В вызове сниппета посмотрите, что указано в limit?
Спасибо за ответы.
Но есть нюанс — уж больно много страниц и не понимаю как отследить на какой странице и в каком чанке/снипете эта(и) ошибки.
Можно ли как-то в логи об ошибках MODX добавить URI источника ошибки?
Но есть нюанс — уж больно много страниц и не понимаю как отследить на какой странице и в каком чанке/снипете эта(и) ошибки.
Можно ли как-то в логи об ошибках MODX добавить URI источника ошибки?
В вызове pdopage посмотрите не стоит ли в лимите 0.
Ну, можно побаловаться с выводом в журнал… Вот вывод id ресурса, например:
$modx->log(MODX_LOG_LEVEL_ERROR, $modx->resource->get('id'));
Можно с пояснительным текстом:$modx->log(MODX_LOG_LEVEL_ERROR, 'ID ресурса: ' . $modx->resource->get('id'));
Огромное спасибо.
Теперь хоть будет понятно где искать.
в файле \core\model\modx\error\moderrorhandler.class.php
в первой попавшейся было
Теперь хоть будет понятно где искать.
в файле \core\model\modx\error\moderrorhandler.class.php
case E_WARNING:
$handled= true;
$errmsg= 'PHP warning: ' . $errstr;
$this->modx->log(modX::LOG_LEVEL_ERROR, $errmsg, '', '', $errfile, $errline);
break;
поменял наcase E_WARNING:
$handled= true;
$errmsg= 'PHP warning: ' . $this->modx->resource->get('id') . ' ' . $errstr;
$this->modx->log(modX::LOG_LEVEL_ERROR, $errmsg, '', '', $errfile, $errline);
break;
и да теперь хоть вижу на какой странице искать ошибку/опечатку.в первой попавшейся было
[[pdoPage? &element=`msProducts`&parents=`26` &limit='250' &sortby=`{"menuindex":"asc"}` ]]`]]
т.е. не кавычки в limit=
Можно по условию дебажить прямо в сниппете с выводом различных данных. Что-то такое добавить в pdopage:
if (!is_int($scriptProperties['limit']) || $scriptProperties['limit'] < 1) {
$modx->log(MODX_LOG_LEVEL_ERROR, 'Ошибка pdopage. Параметр limit содержит: [' . $scriptProperties['limit'] . ']. В ресурсе: ' . $modx->resource->get('id'));
}
В общем, можно поиграться по-всякому.
OK. c pdo — все норм, но как отловить
добавил доп поля вывода в логах в
[2021-07-23 23:56:45] (ERROR @ /home/***/public_html/core/model/modx/modparser.class.php : 541) Could not find snippet with name Рассрочка под 0%.
да понимаю, что это парень-«набивщик» который наполняет сайт заказанными текстами ошибся где-то в скобках, но ИМХО как-то не очень удачно (опять же по моему мнению) сделан лог ошибок — не видно где ошибка, если вызов чанков/снипетов.добавил доп поля вывода в логах в
case E_STRICT:
но не уверен, что эта ошибка там «отметится»
Не совсем понял, но в modparser.class.php, в строке 541, добавить например:
$this->modx->log(xPDO::LOG_LEVEL_ERROR, "Could not find snippet with name {$tagName}. Resource ID: {$this->modx->resource->get('id')}.");
Да, регистрация ошибок могла бы быть информативней «из коробки», согласен.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.