Добрый день. Возникла проблема при использовании глобальных переменных в 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, то всегда показывает правильно, то есть тут где-то в другом проблема.
а если в препроцессе квиктабов указываю константное значение, то тоже отрабатывает нормально. поэтому тут думаю проблема все-таки в поочередности срабатывания или в глобальных переменных
Комментарии
вызов variable_set() в препроцессе не есть гуд с точки зрения производительности, и это не совсем нормальное решение для простой задачи "завести глобальную переменную". Используйте для этого $GLOBALS если уж на то пошло. Но по уму, наверное надо бы модифицировать приходящие данные, для того хук препроцесс и изобретён.
$variables['comment_count'] = 100000;
}
и далее ловим переменную $comment_count в шаблоне.
в том то и дело что в шаблоне никак=( нужно либо в модуле, либо в template.php, другим способом квиктабы переопределить не знаю как в принципе.
допустим, я определил в hooks_preprocess_node(&$vars)
$vars['comment_count'] = 1000;
при попытке взять в hooks_quicktabs_alter(&$quicktabs)
$quicktabs->tabs[1]['title'] = t('Reviews').' ('.$comment_count.')';
ругается на неизвестную переменную
обошелся такой конструкцией
db_query('SELECT COUNT(cid) FROM {comment} WHERE nid = :nid', array(':nid' => $nid))->fetchField();