Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Drupal中将PHP变量从视图传递到块_Php_Drupal - Fatal编程技术网

在Drupal中将PHP变量从视图传递到块

在Drupal中将PHP变量从视图传递到块,php,drupal,Php,Drupal,我想将一个PHP变量从一个视图(作为块输出)传递到一个静态块。在视图中,我将页脚设置为PHP,并编写了如下内容: <?php $name = "Sam"; ?> <?php function yourmodule_set_name($name = NULL) { static $stored_name = NULL; if ($name) { $stored_name = $name; } return $stored_name; } yourmod

我想将一个PHP变量从一个视图(作为块输出)传递到一个静态块。在视图中,我将页脚设置为PHP,并编写了如下内容:

<?php $name = "Sam"; ?>
<?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();
?>

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

<?php echo $name; ?>

但是,唉,什么都没有。很有可能,有一种更简单的方法来完成这件事。。。我很高兴朝这个方向走。。。但如果可能的话,我想试着让这一切顺利进行

有什么想法吗?

试着在两行前面加上“global$name;”

这应该是可行的,但是应该避免使用全局函数,至少应该使用一个唯一的、带有前缀的变量。你具体想做什么

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

您可以定义如下函数:

<?php $name = "Sam"; ?>
<?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();
?>

在Drupal7中,有一个名为helper的函数,您可以直接(ab-)使用它

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

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

如果您要设置一个持久变量(一个可以经受几次页面加载的变量),您还可以利用变量集()和变量集()来设置和获取一个变量。尽管正如Berdir指出的那样,如果在每次页面加载时都发生这种情况,那么对性能来说将是相当糟糕的

在使用变量_set()的视图页脚中:


然后在块中,可以使用变量_get()检索该变量:



请注意,这个变量\u get/set()是一个持久存储,变量\u set()执行更新/插入查询并清除变量缓存。所以这不是一个你想在每一页上执行的函数,这就是我理解的问题。这是一个设置选项,你可以设置一次,然后在任何地方都需要。太棒了!全球骗局奏效了!(为什么我没有想到这一点?)。它似乎完全满足了我的需要,但我想在我开始生活之前了解全部后果。非常感谢!好吧,您正在用它污染全局名称空间,另一个模块可能会意外地重写您的全局变量。这样做是不鼓励的,因为你实际上不知道这样做的全部后果。