我想将一个PHP变量从视图(作为块输出)传递给静态块。在视图中,我将页脚设置为PHP并写了类似这样的内容:
<?php $name = "Sam"; ?>
在它下面的静态块中,我只是想检索该变量的值:
<?php echo $name; ?>
但是,唉,什么都没有。机会是,有更多的德鲁巴方式来完成这个......我很高兴朝这个方向前进......但如果可能的话,我想尝试做这个工作。
有什么想法吗?
答案 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;
?>