Не работает getCollection в консоли
Всем привет!
Столкнулся с необъяснимой ситуацией, сломал с ней голову…
Есть банальный скрипт, который выбирает все ресурсы с определенным TV и он прекрасно работает, НО! только при вызове из браузера. В консоли напрочь отказывается работать. Консоль имею ввиду настоящую, не дополнение к modx.
Код следующий:
Подскажите, с чем это может быть связано? Как указал в коде выше, сам modx подключается корректно — просто заголовок страницы в консоль выводится, но getCollection ни в какую не хочет там работать! Пишет, что нулевая выборка. То есть не работает именно getCollection, в то время, как getObject прекрасно отрабатывает.
Спасибо!
Столкнулся с необъяснимой ситуацией, сломал с ней голову…
Есть банальный скрипт, который выбирает все ресурсы с определенным TV и он прекрасно работает, НО! только при вызове из браузера. В консоли напрочь отказывается работать. Консоль имею ввиду настоящую, не дополнение к modx.
Код следующий:
<?php
define('MODX_API_MODE', true);
require_once('................./index.php'); // тут полный путь к файлу
$modx = new modX();
$modx->initialize('web');
// здесь проверяем подключился ли modx и он подключился - в консоль выводится заголовок страницы
$res = $modx->getObject('modResource', 1);
echo $res->get('pagetitle');
// а теперь задаем условия выборки для getCollection
$category = 'retail';
$q = $modx->newQuery('modResource');
$q->leftJoin('modTemplateVarResource', 'TemplateVarResources');
$q->leftJoin('modTemplateVar', 'tv', "tv.id=TemplateVarResources.tmplvarid");
$q->where(array(
array(
'tv.name' => 'category', // имя tv по которому ищем
'TemplateVarResources.value:LIKE' => '%'.$category.'%', // условие поиска
'deleted' => 0, // не удалён
'published' => 1, // опубликован
'publishedon:>' => strtotime(date('Y-m-d')) // опубликован сегодня
)
));
// получаем все ресурсы с указанной категорией
$resources = $modx->getCollection('modResource', $q);
// и подсчитываем их: по итогу в браузере выводится число таких страниц, НО в консоли выводится 0 (ноль).
echo count($resources);
Подскажите, с чем это может быть связано? Как указал в коде выше, сам modx подключается корректно — просто заголовок страницы в консоль выводится, но getCollection ни в какую не хочет там работать! Пишет, что нулевая выборка. То есть не работает именно getCollection, в то время, как getObject прекрасно отрабатывает.
Спасибо!
Комментарии: 10
Ты получаешь коллекцию объектов, чтобы посчитать их количество? Попробуй $modx->getCount()
Аналогично: в браузере при вызове страницы выводится число ресурсов, в консоли при вызове выводится ноль ((
Поясни, плиз! Не понимаю (( В консоли же отрабатывает
почему getCollection тогда не хочет?
$res = $modx->getObject('modResource', 1);
echo $res->get('pagetitle'); // тут заголовок страницы спокойно выводится
почему getCollection тогда не хочет?
Для начала попробуй
$resources = $modx->getIterator('modResource',$q);
Я так полагаю ошибок в логах нет?
в конце своего кода добавь
Если нет — то целиком весь используемый код выкладывай.
$modx->log(1, print_r(count($resources) ,1));
запусти код и после посмотри в журнале ошибок modx если вывод кол-ва ресурсов?Если нет — то целиком весь используемый код выкладывай.
Ох, парни, это ппц! Ну сколько раз себе говорил: Дима, б%%, нет никакой магии! Если что-то ДОЛЖНО работать, но не работает, значит ты что-то пропи%%%глазил! Ищи!
Но здесь реально было странно — ну не отрабатывает getCollection при вызове из консоли хоть тресни! Ну магия же, да? Короче начал по строчке разбираться и щито би ви думали?!
Виновник торжества:
а именно ДРУГОЙ! ЧАСОВОЙ! ПОЯС! НА! СЕРВЕРЕ!
Соответственно условие
из браузера выполнялось, так как на сайте пояс установлен Europe/Moscow, а на сервере мать его UTC!
И из-за этой разницы при вызове срипта в консоли ничего не находилось и соотв getCollection возвращал ноль ресурсов! Боги! Так протупить!
Фейспалм!
Но здесь реально было странно — ну не отрабатывает getCollection при вызове из консоли хоть тресни! Ну магия же, да? Короче начал по строчке разбираться и щито би ви думали?!
Виновник торжества:
strtotime(date('Y-m-d'))
а именно ДРУГОЙ! ЧАСОВОЙ! ПОЯС! НА! СЕРВЕРЕ!
Соответственно условие
'publishedon:>' => strtotime(date('Y-m-d'))
из браузера выполнялось, так как на сайте пояс установлен Europe/Moscow, а на сервере мать его UTC!
И из-за этой разницы при вызове срипта в консоли ничего не находилось и соотв getCollection возвращал ноль ресурсов! Боги! Так протупить!
Фейспалм!
А php не весь на сервере выполняется? То есть по идее не важно откуда запущен должно же брать время сервера О_О
Весь.
Только при работе из браузера запрос обычно обслуживает php-fpm с одним конфигом, в при запуске из консоли php-cli с другим.
MODX должен пытаться выставить правильную временную зону всё равно, но конфиг PHP может запрещать это делать.
Только при работе из браузера запрос обычно обслуживает php-fpm с одним конфигом, в при запуске из консоли php-cli с другим.
MODX должен пытаться выставить правильную временную зону всё равно, но конфиг PHP может запрещать это делать.
Хм… чет я притупил.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.