Свои глобальные переменные в template.php

Аватар пользователя makkon makkon 5 июня 2012 в 11:50

Добрый день. Возникла проблема при использовании глобальных переменных в template.php.
Коротко - есть 2 альтер функции:
hook_preprocess_node - в ней я завожу глобальную переменную:
<?phpvariable_set('comment_count_node', $vars['node']->comment_count);?>
hook_quicktabs_alter - обрабатывает квиктабы перед рендерингом, в нее хочу передать мою переменную и делаю это так:
<?php $comment_count variable_get('comment_count_node''0');?>

печаль в том, что срабатывает только на вторую перезагрузку страницы, в первом случае всегда ноль. либо я неправильно использую переменные, либо препроцессы конфликтуют в порядке следования и иногда препроцесс квиктабов идет раньше препроцесса страницы.

поможете разобраться?
из наблюдений - если в препроцессе страницы выводить количество комментариев функицей print, то всегда показывает правильно, то есть тут где-то в другом проблема.
а если в препроцессе квиктабов указываю константное значение, то тоже отрабатывает нормально. поэтому тут думаю проблема все-таки в поочередности срабатывания или в глобальных переменных

Комментарии

Аватар пользователя kosilko kosilko 5 июня 2012 в 12:57

вызов variable_set() в препроцессе не есть гуд с точки зрения производительности, и это не совсем нормальное решение для простой задачи "завести глобальную переменную". Используйте для этого $GLOBALS если уж на то пошло. Но по уму, наверное надо бы модифицировать приходящие данные, для того хук препроцесс и изобретён.

function hook_preprocess_node(&$variables) {
    $variables['comment_count'] = 100000;
}

и далее ловим переменную $comment_count в шаблоне.

Аватар пользователя makkon makkon 5 июня 2012 в 14:10

в том то и дело что в шаблоне никак=( нужно либо в модуле, либо в template.php, другим способом квиктабы переопределить не знаю как в принципе.

допустим, я определил в hooks_preprocess_node(&$vars)
$vars['comment_count'] = 1000;

при попытке взять в hooks_quicktabs_alter(&$quicktabs)
$quicktabs->tabs[1]['title'] = t('Reviews').' ('.$comment_count.')';

ругается на неизвестную переменную

Аватар пользователя makkon makkon 5 июня 2012 в 14:52

обошелся такой конструкцией
db_query('SELECT COUNT(cid) FROM {comment} WHERE nid = :nid', array(':nid' => $nid))->fetchField();