Fenom получить TV по id

Не так давно я дорабатывал один компонент в MODX Revolution. Так вот, там я писал свой сниппет, и именно в нем мне нужно было получить некоторые данные (включая TV-поля) определенных ресурсов.

И вот как я это сделал.

В MODX Revolution существует весьма полезная штука, под названием «getObject» – метод, который позволяет получить данные из указанного ресурса.

Использование его следующее:

$resource = $modx->getObject(«modResource», array(«id» => «13488»)); return $resource->get(«pagetitle»);

Где «13488» – ID нужного ресурса. Таким образом, мы получаем название нужного вам ресурса по его ID. Для того, чтобы получить полный перечень доступных данных ресурса, воспользуйтесь следующим кодом:

$resource = $modx->getObject(«modResource», array(«id» => «13488»)); print_r(«»); print_r($resource->toArray());

Помимо того, что выдаст вам предыдущий код, вы можете получить дополнительные параметры ресурса. Здесь конструкция схожа с двумя предыдущими, а именно:

FENOM’енальный курс на MODx. Часть 12. Новости на Fenom.


$resource = $modx->getObject(«modResource», array(«id» => «13488»)); $resource_tv = $resource->getTVValue(28); return $resource_tv;

Где «13488» – это ID ресурса, а «28» – это ID вашего TV-поля.

ID поля (как и самого ресурса) вы можете узнать в древе вашего сайта в панели управления. Если статья вызвала у вас затруднения в использовании описанных методов, не стесняйтесь и задавайте ваши вопросы в комментариях.

Источник: www.pandoge.com

Очень хитрые TV параметры

У любого ресурса MODX есть ограниченное число полей, таких как pagetitle, content, introtext. Чтобы расширить этот функционал, и добавить, например, картинку к заметке — нужны дополнительные поля.

В MODX они называются Template Variables, то есть, TV.

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

Еще по теме:  Стиральная машина вендоме 510 TV инструкция

Объясняю почему. Один TV — это одна строка в таблице modTemplateVarResource. Если нужно получить 10 TV — это обычно 10 запросов в базу. Если нужно отсортировать по ним — еще сложнее и дольше.

Вот и выходит, что «MODX тормозит», когда на один ресурс навешано штук 20 ТВ и они выводятся на каждой странице с getResources.

Лично я стараюсь их вообще не использовать, но на ум пришла интересная идея. Нужно дублировать TV в поле properties ресурса, которое хранит json строку с любой информацией.

Вот плагин, для дублирования:

event->name == ‘OnBeforeDocFormSave’) < $tvs = array(); foreach ($_POST as $k =>$v) < if (preg_match(‘/^tv[0-9]+$/’, $k)) < $tvs[$k] = $v; >> $properties = $resource->get(‘properties’); ksort($tvs); $properties[‘tvs’] = $tvs; $resource->set(‘properties’, $properties); >

Он смотрит в $_POST при сохранении ресурса, и копирует TV куда надо. Обратите внимание, что используются id параметров с префиксом tv. Можно, конечно, и получать имена TV, но это лишняя работа при сохранении ресурса.

Venom Cosplay #shorts #trending #cosplay

К тому же, если вы переименуете параметр — эта инфа не обновится самостоятельно. Поэтому, тэвэшки будут просто tv1, tv2, tv3 в массиве tvs.

Отдельный массив tvs нужен, чтобы не затереть что-то нужное, так как поле properties используют и компоненты, например Articles и Tickets. Ключи перед сохранением сортируются, так что TV в поле будут всегда по возрастанию id.

А дальше мы можем выводить их обычным getResources, используя плейсхолдеры. Парсер разбирает массивы в ресурсе и склеивает ключи через точку.

[[+properties.tvs.tv1]] [[+properties.tvs.tv2]] [[+properties.tvs.tv3]] и т.д.

То есть, значения TV параметров будут выводиться без лишних запросов в БД. Конечно, where.

Можно написать сниппет на pdoTools и он должен нормально выбирать, но я не проверял. В любом случае, эта фильтрация будет очень ограниченной, просто поиск по

Еще по теме:  Sopcast трансляция на ТВ

`parameters` LIKE ‘%»tv1″:»string»%’

Обновлено 05.02.13

В комментариях был километровый срач, который пришлось почистить, но для любопытных остался скриншот.

Источник: bezumkin.ru

PHP Fenom Examples

PHP Fenom — 26 examples found. These are the top rated real world PHP examples of Fenom extracted from open source projects. You can rate examples to help us improve the quality of examples.

Frequently Used Methods

Frequently Used Methods

Frequently Used Methods

Related in langs

public function fenom() < if (is_null($this->fenomInstance)) < $this->fenomInstance = Fenom::factory($this->getTemplatesDirectory(), $this->fenomCompileDir, $this->fenomConfig); > return $this->fenomInstance; >

Best PHP Projects with Source Code .

Please enable JavaScript

function execute() < Load::file(‘Fenom.php’, $this->source_dir); Fenom::registerAutoload(); $templatesDir = APP_DIR . DS . App::getAppName() . DS . APP_TEMPLATES_DIR; $fenom = Fenom::factory($templatesDir, TEMP_DIR . DS . $this->name . DS . ‘templates_c’); $fenom->setOptions(array(‘auto_reload’ => true)); return $fenom; >
protected function sendResponse() < global $system_s, $info_s; $this->addResponseData(‘dev_server’, $system_s[‘dev_server’]); $this->addResponseData(‘info_s’, $info_s); $template = $this->getTemplate(); if (empty($template)) < $this->clearResponseMessages(); $template = $this->templateNotFound(); $this->responseNotFound(); > $this->templateEngine->display($template, $this->getResponseData()); >
public static function getThemes() < /* If there a list of YAML files $_themes = Spyc::YAMLLoad(file_get_contents(‘https://raw.githubusercontent.com/morfy-cms/morfy-themes-catalog/master/themes.yml’)); foreach ($_themes as $theme) < $themes[] = Spyc::YAMLLoad(file_get_contents($theme)); >*/ $themes = Spyc::YAMLLoad(file_get_contents(‘https://raw.githubusercontent.com/morfy-cms/morfy-themes-catalog/master/themes.yml’)); $fenom = Fenom::factory(PLUGINS_PATH . ‘/extends/templates/’, CACHE_PATH . ‘/fenom/’, Morfy::$fenom); $fenom->display(‘themes.tpl’, array(‘themes’ => $themes)); >

Example #10

Example #11

public function __construct() < // $this->template_dir = APPPATH . «views»; $this->template_dir = FCPATH . «templates»; $this->compile_dir = FCPATH . «var/cache»; // $this->compile_dir = «../../var/cache»; $this->options = array(‘strip’ => true, ‘auto_trim’ => true, ‘auto_reload’ => true); $this->fenom = Fenom::factory($this->template_dir, $this->compile_dir, $this->options); // Assign CodeIgniter object by reference to CI if (method_exists($this, ‘assignByRef’)) < $ci = $this->assignByRef(«ci», $ci); > log_message(‘debug’, «Fenom Class Initialized»); >

Example #12

Example #13

Example #14

$fenom = Fenom::factory($TEMPLATES_DIR, $COMPILED_TEMPLATES_DIR, Fenom::FORCE_COMPILE | Fenom::AUTO_ESCAPE); function render($template, $vars) < global $fenom; $fenom->display($template . ‘.tpl.php’, $vars); > function redirect($url) < $url = str_replace(‘\n’, », $url); $url = str_replace(‘\r’, », $url); header(‘Location: ‘ . $url); exit; >function is_form_submitted($options) < $all = true; foreach ($options as $option) < $all >if (!$all) < return false; >$result = [];

Еще по теме:  Как настроить глаз ТВ в планшете

Example #15

/** */ function _init() < require_php_lib(‘fenom’); $this->fenom = Fenom::factory(‘.’, ‘/tmp’, Fenom::AUTO_ESCAPE); // TODO: fenom configuration >

Источник: hotexamples.com

Оцените статью
Добавить комментарий