Наверх

Выборка ресурсов с TV-параметрами

<?php
$q = $modx->newQuery('modResource');
$q->leftJoin('modTemplateVarResource', 'Price', 'modResource.id = Price.contentid AND Price.tmplvarid = 14');
$q->leftJoin('modTemplateVarResource', 'Currency', 'modResource.id = Currency.contentid AND Currency.tmplvarid = 15');
$q->groupby('modResource.id');

$q->select([
    'modResource.*',
    '`Price`.`id` AS `Price_id`, `Price`.`tmplvarid` AS `Price_tmplvarid`, `Price`.`contentid` AS `Price_contentid`, `Price`.`value` AS `Price_value`',
    '`Currency`.`id` AS `Currency_id`, `Currency`.`tmplvarid` AS `Currency_tmplvarid`, `Currency`.`contentid` AS `Currency_contentid`, `Currency`.`value` AS `Currency_value`',
    'IFNULL(`Price`.`value`, 0) AS `Price_value`',
    'IFNULL(`Currency`.`value`, "RUB") AS `Currency_value`'
]);

$q->where([
    [
        'Price.value:!=' => 0,
        'Price.value:IS NOT' => NULL
    ], [
        'Currency.value' => 'RUB',
        'OR:Currency.value:IS' => NULL
    ]
]);

$count = $modx->getCount('modResource', $q);
$q->limit(100);
if ($q->prepare() && $q->stmt->execute()) {
	$resources = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
}

echo  "<p>Всего ресурсов найдено: {$count}</p><hr>";
foreach($resources as $resource) {
    echo "<p><b>{$resource['pagetitle']} ({$resource['id']})</b> -
    {$resource['Price_value']} {$resource['Currency_value']}</p>";
}


6 комментариев

  1. Александр Булатов 07 мая 2017, 12:35(Комментарий был изменён) # 0
    Илья, здравствуйте!
    Наткнулся на эту маленькую статью-шпаргалку у Вас.
    Это прям то, что нужно мне. Только правда не всё понятно в скрипте Вашем мне.

    Если не сложно, можно у Вас узнать, что значат второй и третий аргумент в подключаемом методе leftJoin?

    В этом куске кода
    $q->leftJoin('modTemplateVarResource', 'Price', 'modResource.id = Price.contentid AND Price.tmplvarid = 14');
    $q->leftJoin('modTemplateVarResource', 'Currency', 'modResource.id = Currency.contentid AND Currency.tmplvarid = 15');
    1. Александр Булатов 07 мая 2017, 13:12 # 0
      И если честно рано обрадовался, что нашёл нужный скрипт получения данных значений TV для своей ситуации.

      Не подскажете ли ответ на следующий вопрос по этой причине,
      как вывести в таблицу в своей CMP как раз id ресурса, его pagetitle и значение его TV?
      1. Александр Булатов 07 мая 2017, 13:35 # 0
        Юхуу!!!

        Получилось разобраться самому!

        Ну вот, хорошему человеку напишешь и сразу из космоса ответ приходит)))
        1. Александр Булатов 07 мая 2017, 15:44 # 0
          Я извиняюсь, Илья, но возник новый вопрос.

          А как можно вывести ресурсы с разными TV и их значениями?

          Я делаю данный скрипт из этой статьи, а мне не выводит ресурсы с TV, если у них разные TV имеют значения. То есть у одних ресурсов есть значения в TV1 (например), а у других в TV2 и не выводит ничего. Показывает 0 ресурсов.
          1. Илья Уткин 16 мая 2017, 09:32 # 0
            Выборки — не самое простое дело. Нужно или плотнее знакомиться с MySQL и языком запросов, или нанять кого-нибудь знающего, чтобы настроил один раз и всё работало.

            Попробуйте подробно описать свою задачу на modx.pro, добавить в вопрос код, который что-то выводит, код, который не работает. Там много специалистов, наверняка кто-то поможет.
            1. Александр Булатов 16 мая 2017, 13:08 # 0
              Я понял.

              Илья, спасибо Вам за совет.

          Авторизация

          через сервис Loginza:


          Шаблоны MODX

          1 2 Дальше »

          Объектная
          модель
          MODX