Drupal 7如何在hook_theme()中使用render元素而不是变量

时间:2014-05-14 01:40:49

标签: drupal-7 drupal-theming

在实现hook_theme()时,我无法理解'render element'的关键用途。

function personal_news_theme($existing, $type, $theme, $path) {
  return array(
    'teaser_list_by_user' => array(
      'render element' => 'element',
    ),
  );
}

我做了我的研究和我理解的方式,render element键在创建主题函数时用于修改另一个主题函数的输出!并且无法使用它来实现新的主题功能。 如果我错了,我该如何使用它而不是variables

2 个答案:

答案 0 :(得分:2)

在下面的示例中,我使用渲染元素创建了一个新的主题函数。

/**
 * Implements hook_theme().
 */
function rojo_theme() {
  $items = array(
    'rojo_content' => array(
      'render element' => 'element',
    ),
  );
  return $items;
}

/**
 * Theme function.
 */
function theme_rojo_content($vars) {
  return '<pre>' . print_r($vars, TRUE) . '</pre>';
}

/**
 * Render function.
 */
function rojo_render() {
  $build = array(
    '#theme' => 'rojo_content',
    '#module' => 'rojo',
    'content' => 'Page content for the render function',
    'list' => array('one', 'two'),
    'tag' => 'div',
  );
  return render($build);
}

这将打印传递给主题函数的$vars的输出。从这里,你应该能够看到发生了什么。将使用#theme调用theme()属性,并在$build进程中传递render()数组。请注意,我添加了#module属性,Drupal添加了#printed / #children属性。

这纯粹是一个示例,用于演示使用render element和参数传递创建新主题函数。我希望这可以帮助别人。

Array
(
  [element] => Array
    (
      [#theme] => rojo_content
      [#module] => rojo
      [content] => Page content for the render function
      [list] => Array
        (
          [0] => one
          [1] => two
        )
      [tag] => div
      [#printed] => 
      [#children] => 
    )
)

答案 1 :(得分:0)

如果主题函数返回一个数组 - 您可以指定要用于渲染的数组的哪个键。

  

渲染元素:要传递给主题函数的可渲染元素或元素树的名称。此名称用作在预处理和处理函数中保存可渲染元素或树的变量的名称。

(资料来源:hook_theme