Главная » Разное » Плагин TVevaler для MODx - оптимизируй свой сайт
Куда Вы попали?

Информационная связь с потребителем, безусловно, реально стабилизирует социометрический рейтинг, не считаясь с затратами. Стиль менеджмента стабилизирует конвергентный анализ зарубежного опыта, оптимизируя бюджеты. Емкость рынка вырождена. Стратегический маркетинг, не меняя концепции, изложенной выше, основан на тщательном анализе данных.
А если серьёзно, это просто блог.

Нужен сайт?

Тогда, возможно, Вы попали туда куда нужно.
Я занимаюсь созданием сайтов "под ключ".
Оцените качество работы, посмотрев
портфолио. Если Вы не рассчитываете на демпинг, связаться со мной можно при помощи формы обратной связи.




Для "спасибо"
Установите Flash-плеер

Авторизация

Есть что сказать?


Плагин TVevaler для MODx - оптимизируй свой сайт

Плагин позволяет "кэшировать" значения TV-параметров, использующих @-привязки. Как известно в MODx есть возможность получать значения для TV-параметров, написав в значение по умолчанию PHP-код (@EVAL). Этот код будет обрабатываться каждый раз при обращении к параметру. Т.е., например, если в шаблон Ditto вставлены плейсхолдеры TV и вызов снниппета некэшированный (необходимо для постраничной разбивки), то всё, что находится в его шаблоне (&tpl), будет "некэшированным", а часто там нужно вызвать другие сниппеты (независимо от вызова они не будут кэшироваться). При этом число запросов к базе данных может доходить до сотни (у "особо-одаренных разработчиков" и 200 не предел). Так вот, плагин TVevaler позволяет заполнять значения TV при сохранении документа в админке.

Например, нам нужно вывести название родительского документа. Для этого можно использовать сниппет GetField:

[[GetField? &parent=`1` &parentLevel=`1` &field=`pagetitle`]]

Всё хорошо когда используется кэширование, а если кэшировать нельзя и нужно вывести этот заголовок несколько раз? В этом случае получается куча лишних запросов к базе данных. А ведь название родительского документа изменяется крайне редко, так зачем его "вытаскивать" каждый раз при обращении к дочернему документу?
Число запросов и время генерации страницы можно посмотреть, добавив в шаблон такую строку:

MySQL: [^qt^], [^q^] запрос(ов), PHP: [^p^], общее время: [^t^], документ получен из [^s^]
В этом случае (когда очень много запросов к БД) и поможет плагин TVevaler.

Создаем TV-параметр и в значения по умолчанию пишем такой код:

@EVAL $parent=$modx->getParent($docid,0,'pagetitle');
return $parent['pagetitle'];
Код должен быть записан в одну строку (без переносов)! Сохраняем и запоминаем ID параметра (в скобках после названия). Открываем конфигурацию плагина TVevaler и в поле "TV IDs" пишем ID нашего TV. Можно писать несколько ID через запятую.


Теперь значения TV-параметра будут заполняться автоматически после сохранения документа и храниться в базе уже в окончательном (просчитанном) виде.

Если вам удобнее использовать сниппеты или с PHP на "Вы", не проблема. Вместо кода, который записан выше, можно использовать такой:

@EVAL return $modx->evalSnippets("[[GetField? &docid=`$docid` &parent=`1` &parentLevel=`1` &field=`pagetitle`]]");

Чтобы это сработало, в ходе эксперимента мне пришлось в коде сниппета GetField поправить строку
include_once('assets/snippets/getfield/getfield.inc.php');
так:
include_once(MODX_BASE_PATH.'assets/snippets/getfield/getfield.inc.php');

Если все-таки заголовок родительского документа изменится (в нашем примере), нет нужды открывать каждый документ и очищать значения в поле TV-параметра (в этом случае оно сгенерируется заново). Значения можно "обновлять пакетно". Для этого достаточно на вкладке "Настройка страницы" отметить чекбокс "Обновить значения TV всех дочерних или соседних документов (TVevaler)".


Ещё несколько примеров "EVAL-кодов":
//Число дочерних документов
@EVAL return count($modx->getDocumentChildren($docid, 1));
 
//Пересчет цены из другого TV (price_eur) по курсу
@EVAL $tv_arr=$modx->getTemplateVars(array('price_eur'),'id',$docid);
return $tv_arr[0]['value']*38.7;
 
//TV "image" первого дочернего документа из активных
@EVAL $docids = $modx->getActiveChildren($docid, 'menuindex', 'ASC', 'id');
if(count($docids)==0){return '';}
for($i=0;$i<count($docids);$i++){$docs_arr[] = current($docids[$i]);}
$tv_arr = $modx->getTemplateVars(array('image'),'id',$docs_arr[0]);
return $tv_arr[0]['value'];
 
//ID родителя
@EVAL $parent=$modx->getParent($docid,0,'id'); return $parent['id'];

Скачать



Написать комментарий

  • Обязательные для заполнения поля помечены знаком *.
Код подтверждения:


Andchir
Ответов: 1
Комментарий
2 Alex:
Ответ #2 дата : Sat June 26, 2010, 14:23:59
На какую версию MODx ставили? И можно пару скриншотов?
Alex
Ответов: 1
Комментарий
Re: Плагин TVevaler для MODx - оптимизируй свой сайт
Ответ #1 дата : Sat June 26, 2010, 01:31:56
Замечательная идея, но почему-то мне не удалось заставить плагин работать. Скачал, установил, как написано в ридми, но чекбокс на вкладке настройки страницы не появился.