Если вынести формирование строки условия фильтра в сниппет, выборка не работает

Почему строка условия выборка, возвращенная из сниппета, не работает, а если вставить ту же самую строку напрямую в pdoResources, то все отрабатывает правильно?

Есть страница, в которой вызывается чанк. В этом чанке находится следующий код:

[[!blog? &alias=[[*alias]]]] - чтобы контролировать что происходит в сниппете
[[pdoResources?
    &parents=`2`
    &depth=`0`
    &tpl=`ListRowTplDopLinks`
    &includeContent=`1`
    &setTotal=`1`
    &toPlaceholder=`slider-links`
    &includeTVs=`taxonomy`
    [[-&where=[[blog? &alias=[[*alias]]]]]]
    &tvFilters=`[[blog? &alias=[[*alias]]]]`
    &resources=`-364`
]]
    
[[+slider-links:!empty=`
    
    <div class="container pt-20 pb-40">taxonomy==88||taxonomy==80
    <div  class="slider-dop-links-wrap">
        <div class="flex-betwen flex-wrap">
            <div class="title">
                <p class="h3">Новости по этой услуге</p>
            </div>
            <div class="flex-end pb-20">
                [[+total:gt=`3`:then=`
                <a class="slider-3-news prev-links" href="javascript:void(0)"><i class="fa fa-angle-left" aria-hidden="true"></i></a>
                <a class="slider-3-news next-links" href="javascript:void(0)"><i class="fa fa-angle-right" aria-hidden="true"></i></a>`]]
            </div>
        </div>
       <div class="container pt-20 pb-20"> 
        <div id="NewsSlider" class="slider-dop-links owl-theme owl-carousel">
           [[+slider-links]]
        </div>
    </div>
</div></div>
`]]
Сниппет выполняет следующую задачу — из таблицы выбирает все новости которые относятся к этой статье, а затем возвращает строку для фильтрации. Например, если фильтровать по TV taxonomy это будет строка
'taxonomy==88||taxonomy==80'
Код сниппета:
<?php
global $modx;

if($_GET['cat']){
    $alias = $_GET['cat'];
    $resource = $modx->getObject('modResource', array('alias' => $alias));
    
    $id = $resource->toArray()['id'];
    
    $exist_sql = "SELECT * FROM modx_ct_rootCategory WHERE `root_category` LIKE \"%$id%\"";
    $exist = $modx->query($exist_sql)->fetchAll(PDO::FETCH_ASSOC);

    $related = [];
    for($i = 0; $i < count($exist); $i++) {
        $exploded[] = explode("||", $exist[$i]['related_category']);

        foreach($exploded as $related_items){
            foreach($related_items as $related_item){
                $related[] = 'taxonomy == %' . $related_item . '%';
            }
        }
    }
    
    $filterBy = array_unique($related);
    
    var_dump(implode('||', $filterBy));

    return implode('||', $filterBy);
    
} else if($alias){ //{"id:IN":[914,919]}
    $resource = $modx->getObject('modResource', array('alias' => $alias));
    $id = $resource->toArray()['id'];
    
    var_dump($id);
    
    $exist_sql = "SELECT * FROM modx_ct_rootCategory WHERE `related_category` LIKE \"%$id%\"";
    $exist = $modx->query($exist_sql)->fetchAll(PDO::FETCH_ASSOC);
    
    var_dump($exist);
    
    $related = [];
    for($i = 0; $i < count($exist); $i++) {
        $exploded[] = explode("||", $exist[$i]['related_category']);

        foreach($exploded as $related_items){
            foreach($related_items as $related_item){
                $related[] = 'taxonomy == %' . $related_item . '%';
            }
        }
    }
    
    $filterBy = array_unique($related);

    return implode('||', $filterBy);
    
    //return "taxonomy==88||taxonomy==80";
}
Если эту строку прописать в параметре tvFilters, то все работает. Если просто вернуть ее из сниппета, не делая никаких изменений до — работает. Запросы к базе, все отрабатывает, в вызове сниппета в самом верху возвращается правильная строка. Если пойти по другому пути и взять айди нужных ресурсов, сформировать из них строку (указана в комментарии на строке с else if), история та же самая — напрямую работает, а из сниппета нет.

Почему так происходит? Я бы понял если бы он ничего из сниппета не принимал, но ведь просто
return "taxonomy==88||taxonomy==80";
работает
Герман
31 марта 2024, 01:13
modx.pro
497
0

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

Герман
31 марта 2024, 01:42
0
Оказалось, что если вернуть просто айдишники нужных статей, а затем сделать фильтр по полю resources, то все работает. Но тем не менее хотелось бы знать почему было такое поведение
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1