我正在使用Drupal主题,我看到很多变量看起来像是用extract()
创建的。是否可以追溯,并查看该阵列的位置?
答案 0 :(得分:2)
我指的是传递给模板文件的变量,这些变量实际上是从数组中提取的。
Drupal 7中的代码位于theme_render_template()。
function theme_render_template($template_file, $variables) {
extract($variables, EXTR_SKIP); // Extract the variables to a local namespace
ob_start(); // Start output buffering
include DRUPAL_ROOT . '/' . $template_file; // Include the template file
return ob_get_clean(); // End buffering and return its contents
}
该函数从theme()调用,执行以下代码。
// Render the output using the template file.
$template_file = $info['template'] . $extension;
if (isset($info['path'])) {
$template_file = $info['path'] . '/' . $template_file;
}
$output = $render_function($template_file, $variables);
默认情况下, $render_function
设置为'theme_render_template'
,但其值使用以下代码设置(在theme()
中)。
// The theme engine may use a different extension and a different renderer.
global $theme_engine;
if (isset($theme_engine)) {
if ($info['type'] != 'module') {
if (function_exists($theme_engine . '_render_template')) {
$render_function = $theme_engine . '_render_template';
}
$extension_function = $theme_engine . '_extension';
if (function_exists($extension_function)) {
$extension = $extension_function();
}
}
}
答案 1 :(得分:1)
只需回显$GLOBALS
变量,如果数组不未设置,您可能会发现它来自哪里。
答案 2 :(得分:0)
我不熟悉Drupal所以这只是一个建议,但是如果drupal有一个模板结构,或者如果从控制器传递一个数组,那么可能使用该提取,
您可以在视图中使用get_defined_vars
来获取所有变量,并且可能存在一个数组,您可以使用您知道的变量与同一数组中的变量进行交叉引用。
<?php
$vars = get_defined_vars();
print_r($vars);
//or maybe
print_r($this);
?>