TV в сниппете

Добрый день, есть сниппет для получения пейджтайтла, подскажите пожалуйста как в этот же цикл добавить еще одно tv поле?
$res = $modx->getCollection('modResource',array('parent:IN' => explode(',', $parents)));
$output = '';
foreach ($res as $v) {
        $output.= '"'.$v->get('pagetitle').'",';
};
Alex
26 сентября 2017, 06:53
modx.pro
3 617
0

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

Александр
26 сентября 2017, 10:16
+1
$res = $modx->getCollection('modResource',array('parent:IN' => explode(',', $parents)));
$output = '';
foreach ($res as $v) {
        $output.= '"'.$v->get('pagetitle').'",';
	$output.= '"'.$v->getTVValue('my_tv').'",';
};
У Ильи есть хорошие статьи на эту тему. Рекомендую к прочтению.
    Alex
    26 сентября 2017, 10:20
    0
    Спасибо большое, пробовал так же, но только через get, поэтому не получалось.
      Александр
      26 сентября 2017, 10:27
      0
      ТВ — это отдельная таблица. Через get можно только поля одной таблицы доставать.
    Владимир Бабусенко
    26 сентября 2017, 10:36
    0
    Интересно, когда в цикле идет запрос на получение TV, это же отдельный запрос (нагрузка лишняя)? Оптимально же сразу написать запрос с получением нужных TV, нет?

    $q = $modx->newQuery('modResource');
    $q->setClassAlias('t1');
    $q->leftJoin('modTemplateVarResource', 't2', 't2.contentid = t1.id AND t2.tmplvarid = xx'); //xx-id TV
    $q->select(array(
            't1.*',
            't2.value AS t2_value',
        ));
    $q->where(array(
            't1.parent:IN' => explode(',', $parents),
        ));
    $items = $modx->getCollection('modResource',$q);
    foreach ($items as $item) {
            $output.= '"'.$item->get('pagetitle').'",';
    	$output.= '"'.$item->get('t2_value').'",';
    };
      Александр
      26 сентября 2017, 11:48
      0
      Верно, но если человек не может подключить ТВ одной строчкой и не понимает основ, лучше наверно не запутывать его лишний раз. Думаю эта нагрузка будет для него не принципиальной.
      Павел Карелин
      27 сентября 2017, 00:37
      0
      Можно использовать getTVValue:

      $page = $modx->getObject('modResource', 123);
      return $page->getTVValue('bio');
      Ну или подтягивать все через объекты xPDO или обрабатывать чистые запросы на PDO. Вариант выше проще, потому что работает одной строкой, вариант с PDO замудренней, если ни когда не пользовались PDO придется почитать не один мануал что бы понять.

      docs.modx.com/revolution/2.x/making-sites-with-modx/customizing-content/template-variables/accessing-template-variable-values-via-the-api
        Alex
        29 сентября 2017, 12:28
        0
        Спасибо большое
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          7