我一直在绞尽脑汁,但我会尽力尽力描述问题。我有一个在template.php中编写的自定义函数,带有一堆条件。当条件为真时,我想为变量赋值,然后将该变量传递给节点预处理函数,该函数允许在节点模板上呈现变量。
包含条件的函数:
function _mytheme_date_repeat_string($vars) {
$exdate_pos = strpos($rrule['WKST'], 'EXDATE:');
if($exdate_pos > 0) {
$vars['testvar'] = 'abc123';
}
}
我想为节点模板使用呈现变量的预处理函数:
function mytheme_preprocess_node(&$vars, $hook) {
$vars['new_variable'] = $testvar;
}
node.tpl.php中的预期用法:
<?php print $new_variable; ?>
我对PHP不太满意,但我对编程知之甚少,知道变量范围可能是一个问题。实现这个的最佳方法是什么?非常感谢任何指导。
谢谢, 标记
答案 0 :(得分:0)
如果未调用,则永远不会执行_mytheme_date_repeat_string()
函数。预处理函数(即任何以mytheme_preprocess_
开头的函数由Drupal的主题系统自动调用。
您需要的是移动_mytheme_date_repeat_string()
中的mytheme_preprocess_node()
代码或重构它并调用它。
function _mytheme_date_repeat_string($rrule) {
$exdate_pos = strpos($rrule['WKST'], 'EXDATE:');
if($exdate_pos > 0) {
return 'abc123';
}
else {
return NULL;
}
}
/**
* Prepares variables for node templates.
*/
function mytheme_preprocess_node(&$variables, $hook) {
// Get $rrule from somewhere
$rrule = ... ;
$testvar = _mytheme_date_repeat_string($rrule);
if ($testvar) {
$variables['new_variable'] = $testvar;
}
}
您的代码未显示$rrule
calue的来源。我想你会得到$variables['node']
。