Некая функция-обертка. Можно для каждой переменной объявить свою ф-ию, либо по ф-ии для каждого шаблона (их в с-ме сравнительно немного), а внутри возвращать нужную переменную через обычный switch(). Пример второго варианта (на примере Друпала):
PHP:
function template_node_variables($var_name) {
global $elem;
if (!isset($node)) {
$node = $elem['#node'];
if ($node->build_mode == NODE_BUILD_PREVIEW) unset($node->content['links']);
}
switch ($var_name) {
case 'teaser': return $elem['#teaser'];
case 'date': return format_date($node->created);
case 'node_url': return url('node/' . $node->nid);
case 'title': return check_plain($node->title);
case 'terms': return !empty($node->content['links']['terms']) ? drupal_render($node->content['links']['terms']) : '';
...... // и т.д. Переменных в каждом шаблоне тоже не очень много
}
}
P.S. Само собой, все делалось по-быстрому, только для изучения нового подхода. В реальности именно из этой ф-ии, возможно, загружались бы какие-то данные. Но поскольку здесь переделывался только один шаблон, данные уже реально существовали в с-ме.