我正在使用 Drupal 主题,我看到很多看起来像是用extract()
. 是否可以追溯,看看那个数组在哪里?
问问题
99 次
3 回答
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();
}
}
}
于 2012-04-05T21:07:57.473 回答
1
只需回显变量,如果未$GLOBALS
设置数组,您可能会找到它的来源。
于 2012-04-05T19:58:17.250 回答
0
我不熟悉 Drupal,所以这只是一个建议,但如果 drupal 具有模板结构,或者如果数组是从控制器传递的,那么可能会使用提取,您可以get_defined_vars
在视图中使用来获取所有变量及其可能那里有一个数组,您可以与您知道的在同一数组或类似数组中的变量交叉引用。
<?php
$vars = get_defined_vars();
print_r($vars);
//or maybe
print_r($this);
?>
于 2012-04-05T20:06:04.910 回答