Информационная связь с потребителем, безусловно, реально стабилизирует социометрический рейтинг, не считаясь с затратами. Стиль менеджмента стабилизирует конвергентный анализ зарубежного опыта, оптимизируя бюджеты. Емкость рынка вырождена. Стратегический маркетинг, не меняя концепции, изложенной выше, основан на тщательном анализе данных.
А если серьёзно, это просто блог.
Тогда, возможно, Вы попали туда куда нужно.
Я занимаюсь созданием сайтов "под ключ".
Оцените качество работы, посмотрев
портфолио. Если Вы не рассчитываете на демпинг, связаться со мной можно при помощи формы обратной связи.
Плагин 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^] |
Создаем TV-параметр и в значения по умолчанию пишем такой код:
@EVAL $parent=$modx->getParent($docid,0,'pagetitle'); return $parent['pagetitle']; |

Теперь значения TV-параметра будут заполняться автоматически после сохранения документа и храниться в базе уже в окончательном (просчитанном) виде.
Если вам удобнее использовать сниппеты или с PHP на "Вы", не проблема. Вместо кода, который записан выше, можно использовать такой:
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']; |

Написать комментарий
Ответов: 1
Ответ #2 дата : Sat June 26, 2010, 14:23:59
Ответов: 1
Ответ #1 дата : Sat June 26, 2010, 01:31:56