3

我正在使用 Drupal 主题,我看到很多看起来像是用extract(). 是否可以追溯,看看那个数组在哪里?

4

3 回答 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 回答