将变量传递给_preprocess_node函数以在节点模板中使用

时间:2016-11-17 01:33:18

标签: php drupal drupal-7 drupal-theming

我一直在绞尽脑汁,但我会尽力尽力描述问题。我有一个在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不太满意,但我对编程知之甚少,知道变量范围可能是一个问题。实现这个的最佳方法是什么?非常感谢任何指导。

谢谢, 标记

1 个答案:

答案 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']