Получение tv из дочерних ресурсов
Москва
-рыба
-пиво
-кальмары
Киров
-рыба
-пиво
-кальмары
Ростов
-рыба
-пиво
-кальмары
в Москва, Киров, Ростов есть tv *tovar_forel_chekbox, *tovar_shuka_chekbox, *tovar_kit_chekbox
Чанк один, в нем условие:
[[*tovar_forel_chekbox:is=`1`:then=`есть форель`]]
[[*tovar_shuka_chekbox:is=`1`:then=`есть щука`]]
[[*tovar_kit_chekbox:is=`1`:then=`есть кит`]]
Проблема, не могу получить на вложенных страницах -рыба, -пиво, -кальмары значение tv: *tovar_forel_chekbox, *tovar_shuka_chekbox, *tovar_kit_chekbox.
Пробовал сниппет
<?php
$resource = $modx->resource;
$tvName = $modx->getOption('tvName', $scriptProperties, '');
if (empty($tvName)) {
    return '';
}
$tvValue = $resource->getTVValue($tvName);
if ($tvValue == 1) {
    return 1;
}
$parent = $modx->getObject('modResource', $resource->get('parent'));
if ($parent) {
    $parentTVValue = $parent->getTVValue($tvName);
    if ($parentTVValue == 1) {
        return 1;
    }
}
return '';
Вызываю в чанке:
    [[If?
    &subject=`[[checkTV? &tvName=`tovar_forel_chekbox`]]`
    &operator=`EQ`
    &operand=`1`
    &then=`есть форель`
]]
[[If?
    &subject=`[[checkTV? &tvName=`tovar_shuka_chekbox`]]`
    &operator=`EQ`
    &operand=`1`
    &then=`есть щука`
]]
[[If?
    &subject=`[[checkTV? &tvName=`tovar_kit_chekbox`]]`
    &operator=`EQ`
    &operand=`1`
    &then=`есть кит`
]]Не получается получить &then=`` ни на главной ни на вложенной с таким сниппетом.Комментарии: 7
                Помогите решить проблему… 
Нужно такое условие…
                    Нужно такое условие…
[[#[[*parent]].tovar_kit_chekbox:is=`1` или *tovar_kit_chekbox:is=`1`:then=``]]            
                Если сами TV-шки называются «есть щука», «есть форель» и «есть кит», то так:
Вызов один:
                    <?php
$docid = $modx->getOption('docid', $scriptProperties, $resource->get('id'));
$tvs = explode(',', $tvs);
$out = array();
foreach($tvs as $tv){
	if(!$tvo = $modx->getObject('modTemplateVar', array('name' => trim($tv)))) continue;
	if(!$tvres = $modx->getObject('modTemplateVarResource', array('tmplvarid' => $tvo->get('id'),'contentid' => $docid, 'value' => 1))) continue;
	$out[] = $tvo->get('caption');
}
return implode(', ', $out);Вызов один:
[[checkTV?
    &docid=`[[*parent]]` //если на дочерних
    &tvs = `tovar_forel_chekbox,tovar_shuka_chekbox,tovar_kit_chekbox`
]]            - Для чего получать все TV родителя?
 - Зачем прописывать текущему ресурсу родительские TV?
 
                Я немного ушел в сторону.
Сниппет getTV:
[[$vitrina]]
[[getTV]]
Проблема осталась что иногда по не понятным причинам один TV не всегда получает значение…
а именно:
                    Сниппет getTV:
<?php
// Получить родительский ресурс
$parentResource = $modx->getObject('modResource', $modx->resource->get('parent'));
if ($parentResource) {
    // Получить все TV у родительского ресурса
    $parentTvs = $parentResource->getTemplateVars();
    
    foreach($parentTvs as $tv) {
        // Проверить, существует ли такая переменная у текущего ресурса
        $currentTv = $modx->getObject('modTemplateVar', ['name' => $tv->get('name')]);
        if ($currentTv) {
            // Получить значение родительского TV
            $parentValue = $tv->getValue($parentResource->get('id'));
            // Установить значение родительского TV для текущего ресурса
            $currentTv->setValue($modx->resource->get('id'), $parentValue);
            $currentTv->save();
        }
    }
      
}в шаблоне вызова так:[[$vitrina]]
[[getTV]]
Проблема осталась что иногда по не понятным причинам один TV не всегда получает значение…
а именно:
[[*city_phone_whatsapp:isnot=``:then=`вывод текста`]]            
                если использую 
                    [[If? &is=`[[*city_phone_whatsapp]]`:then=`вывод текста`]],ничего не выводит            
                Вам нужно проверять стоит ли в определенных TV у родительского ресурса «1» и если стоит, то выводить их название?
Сделайте как я написал выше — это универсальное решение.
Если требуется выводить не название TV а какой-то произвольный текст, то можете так:
А в вызове указывайте для какой TV какой текст выводить:
                    Сделайте как я написал выше — это универсальное решение.
Если требуется выводить не название TV а какой-то произвольный текст, то можете так:
<?php
$docid = $modx->getOption('docid', $scriptProperties, $resource->get('id'));
$tvs = json_decode($tvs,1);
$out = array();
foreach($tvs as $tv => $name){
	if(!$tvo = $modx->getObject('modTemplateVar', array('name' => trim($tv)))) continue;
	if(!$tvres = $modx->getObject('modTemplateVarResource', array('tmplvarid' => $tvo->get('id'),'contentid' => $docid, 'value' => 1))) continue;
	$out[] = $name;
}
return implode(', ', $out);А в вызове указывайте для какой TV какой текст выводить:
[[checkTV?
    &tvs = `{ "tovar_forel_chekbox":"форель","tovar_shuka_chekbox":"щука","tovar_kit_chekbox":"кит" }`
    &docid=`[[*parent]]`
]]            
                [[!#[[*parent]].tovar_forel_chekbox:ne=‘’:then=‘hello’]]
Писал с телефона. Кавычки исправите.
                    Писал с телефона. Кавычки исправите.
                Спасибо кто откликнулся и за помощь)) Сработал свой костыль Сниппет getTV + js (подстановка номера через поиск на странице и замену пустого значения).
в шаблоне вызова так:
[[!getTV]]
[[!$vitrina]]
                    в шаблоне вызова так:
[[!getTV]]
[[!$vitrina]]
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.