Не работает getCollection в консоли

Всем привет!

Столкнулся с необъяснимой ситуацией, сломал с ней голову…

Есть банальный скрипт, который выбирает все ресурсы с определенным 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 прекрасно отрабатывает.

Спасибо!
Дмитрий
02 февраля 2024, 22:38
modx.pro
825
0

Комментарии: 10

Артур Шевченко
02 февраля 2024, 22:48
0
Ты получаешь коллекцию объектов, чтобы посчитать их количество? Попробуй $modx->getCount()
    Дмитрий
    02 февраля 2024, 22:55
    0
    Аналогично: в браузере при вызове страницы выводится число ресурсов, в консоли при вызове выводится ноль ((
    Kirill A. Rusanov
    02 февраля 2024, 23:35
    0
    Откуда возьмётся ресурс в консоле, да и ещё в апи-мод?
      Дмитрий
      02 февраля 2024, 23:41
      0
      Поясни, плиз! Не понимаю (( В консоли же отрабатывает

      $res = $modx->getObject('modResource', 1);
      echo $res->get('pagetitle'); // тут заголовок страницы спокойно выводится

      почему getCollection тогда не хочет?
        Константин Ильин
        03 февраля 2024, 09:06
        0
        Для начала попробуй
        $resources = $modx->getIterator('modResource',$q);
        Я так полагаю ошибок в логах нет?
      Володя
      03 февраля 2024, 09:44
      0
      в конце своего кода добавь
      $modx->log(1,  print_r(count($resources) ,1));
      запусти код и после посмотри в журнале ошибок modx если вывод кол-ва ресурсов?
      Если нет — то целиком весь используемый код выкладывай.
        Дмитрий
        04 февраля 2024, 21:35
        +2
        Ох, парни, это ппц! Ну сколько раз себе говорил: Дима, б%%, нет никакой магии! Если что-то ДОЛЖНО работать, но не работает, значит ты что-то пропи%%%глазил! Ищи!
        Но здесь реально было странно — ну не отрабатывает getCollection при вызове из консоли хоть тресни! Ну магия же, да? Короче начал по строчке разбираться и щито би ви думали?!

        Виновник торжества:

        strtotime(date('Y-m-d'))

        а именно ДРУГОЙ! ЧАСОВОЙ! ПОЯС! НА! СЕРВЕРЕ!

        Соответственно условие

        'publishedon:>' => strtotime(date('Y-m-d'))

        из браузера выполнялось, так как на сайте пояс установлен Europe/Moscow, а на сервере мать его UTC!
        И из-за этой разницы при вызове срипта в консоли ничего не находилось и соотв getCollection возвращал ноль ресурсов! Боги! Так протупить!

        Фейспалм!

          Александр Туниеков
          06 февраля 2024, 06:15
          +1
          А php не весь на сервере выполняется? То есть по идее не важно откуда запущен должно же брать время сервера О_О
            Василий Наумкин
            06 февраля 2024, 08:43
            +1
            Весь.

            Только при работе из браузера запрос обычно обслуживает php-fpm с одним конфигом, в при запуске из консоли php-cli с другим.

            MODX должен пытаться выставить правильную временную зону всё равно, но конфиг PHP может запрещать это делать.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        10