03.07.2015

При верстке сайтов на MODx постоянно возникает необходимость использовать в шаблонах или чанках параметры определенных ресурсов. Самый очевидный пример – это телефон или электронная почта со страницы контактов.

Проблема легко решается при помощи не замысловатого, быстро написанного сниппета. У себя я назвал его GetFieldByResourceId. У сниппета есть 2 обязательных параметра:

  • filedName - указывает на имя параметра, значение которого необходимо вернуть
  • resourceId - id ресурса в котором искать указанный параметр

Если все параметры указаны верно, сниппет сначала пробежится по стандартным параметрам ресурса, если указанный параметр не будет обнаружен, он продолжит свой поиск в дополнительных TV-параметрах.

Код сниппета GetFieldByResourceId

if( isset( $filedName ) && isset( $resourceId ) ) {
    $documentFileds = $modx->getDocument( $resourceId );

    if( array_key_exists( $filedName, $documentFileds ) ) {
        return $documentFileds[ $filedName ];
    } else {
        $templateVar = $modx->getTemplateVar( $filedName, '*', $resourceId );

        if( isset( $templateVar ) ) {
            return $templateVar[ 'value' ];
        } else {
            return 'No requested field!';
        }
    }
} else {
    return 'No data to work!';
}

Пример вызова сниппета (кэшируемый):

[[GetFieldByResourceId? &filedName=`telephone` &resourceId=`4`]]