将一个PHP变量从一个视图传递给Drupal中的一个块

时间:2011-02-14 21:20:45

标签: php drupal

我想将一个PHP变量从视图(作为块输出)传递给静态块。在视图中,我将页脚设置为PHP并写了类似这样的内容:

<?php $name = "Sam"; ?>

在它下面的静态块中,我只是想检索该变量的值:

<?php echo $name; ?>

但是,唉,什么都没有。机会是,有更多的德鲁巴方式来完成这个......我很高兴朝这个方向前进......但如果可能的话,我想尝试做这个工作。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

尝试添加“global $ name;”在这两行之前。

这应该有效,但是应该避免使用全局函数,至少应该使用一个独特的,以某种方式加前缀的变量。你到底想要具体做什么?

更好的方法是声明一些辅助函数并使用Drupal核心中许多此类函数使用的模式,例如form_set_error。如果你看第一个函数,你可以看到你可以传递一些东西,它存储在一个静态变量中,然后返回。它可以在没有参数的情况下调用,然后它只返回当前保存在其中的任何内容。

你可以定义一个这样的函数:

<?php
function yourmodule_set_name($name = NULL) {
  static $stored_name = NULL;
  if ($name) {
    $stored_name = $name;
  }
  return $stored_name;
}

yourmodule_set_name('Sam');

// Prints Sam.
echo yourmodule_set_name();
?>

在Drupal 7中,有一个名为drupal_static的辅助函数,您可以直接(ab-)使用它。

<?php
$name = &drupal_static('yourmodule_name');
$name = 'Sam';

// Anyhwere else, prints also Sam.
echo drupal_static('yourmodule_name');
?>

答案 1 :(得分:-1)

如果您正在设置一个持久变量(一个可以承受几页加载的变量),您还可以使用variable_set()&amp; variable_get()来设置和获取变量。虽然正如Berdir所指出的那样,如果在每次加载页面时都会发生这种情况会非常糟糕。

在您的视图页脚中使用variable_set():

<?php
  $name = "name";
  $value = "Sammy";
  variable_set($name, $value);
?>

然后在您的块中,您可以使用variable_get()来检索该变量:

<?php
$default = "default";
$echome = variable_get("name", $default);
echo $echome;
?>