Сниипет для использования alias вместо ID в Modx Revolution

11.12.2015
8996 просмотров

Столкнулся с проблемой, решения которой в интернете найти не смог, пришлось обращаться за помощью к знатокам Modx, в результате чего и родился этот сниппет. В чем суть проблемы?

Большинство плагинов Modx Revo используют в качестве источников для вывода значений, сортировки и т.п. ID ресурсов. Но как быть, когда хочется использовать не безликие ID, а понятные alias? Например указать в PdoMenu что мы хотим получить вывод из категории "Хлебные изделия" документов лепешка и пирожок? Раньше надо было писать что то типа:

pdoMenu? &level=`1` &parents=`75` &resources=`218, 436`

где все цифры надо было выискать глазами в дереве ресурсов. С помощью плагина, представленного ниже, это можно сделать как:

pdoMenu? &level=`1`&parents=`имя_сниппета &alias=`hleb`&resources=`имя_сниппета &alias=`lepeshka pirozhok`

А вот и код самого плагина:

<?php
if(!isset($scriptProperties['alias'])){
    return "";
}
if(!isset($scriptProperties['regSepFrom']) || empty($scriptProperties['regSepFrom'])){
    $scriptProperties['regSepFrom'] = "/\s+/";
}
if(!isset($scriptProperties['sepTo']) || empty($scriptProperties['sepTo'])){
    $scriptProperties['sepTo'] = ",";
}
$scriptProperties['alias'] = preg_split($scriptProperties['regSepFrom'], trim($scriptProperties['alias']));
$alias = $scriptProperties['alias'];
foreach($alias as $k => & $v){
    $v = trim($v);
    if(empty($v)){
        unset($scriptProperties['alias'][$k]);
    }
}

if(!isset($scriptProperties['context']) || empty($scriptProperties['context'])){
    $scriptProperties['context'] = $modx->resource->get('context_key');
}
if(empty($scriptProperties['alias'])){
    return "";
}
$aliasRes = $modx->getCollection('modResource', array('alias:IN' => $scriptProperties['alias'], 'context_key' => $scriptProperties['context']));
$result = array();
if($aliasRes){
    foreach($aliasRes as $res){
        $result[] = $res->get("id");
    }
    $result = implode($scriptProperties['sepTo'], $result);
}
return $result;

Оптимизировано для работы в рамках контекста!

Оставьте комментарий