如何将变量从自定义模块传递到其tpl

时间:2011-10-31 08:46:27

标签: drupal

我需要知道将变量从自定义模块传递到其模板的最简单方法 我创建了custom.module并将custom.tpl.php放在模块文件夹

function custom_menu(){
  $items = array();

  $items['custom'] = array(
    'title' => t('custom!'),
    'page callback' => 'custom_page',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function custom_page() {

    $setVar = 'this is custom module';
    return theme('custom', $setVar);    
}

我添加了主题功能,但它不起作用,任何人都可以建议我这个代码有什么问题

function theme_custom($arg) {
  return $arg['output'];
}

function custom_theme() {
  return array(
    'Bluemarine' => array(
        'variables' => 'output',
        'template' => 'Bluemarine',
     ),
  );
}

3 个答案:

答案 0 :(得分:2)

这对我有用:

function custom_menu(){
  $items = array();

  $items['custom'] = array(
    'title' => t('custom!'),
    'page callback' => 'custom_page',
    'access arguments' => array('access content'),
    'type' => MENU_NORMAL_ITEM,
  );

  return $items;
}

function custom_page() {
    $result = db_query('SELECT * from node');
    return theme('custom', array('output' => $result));
}

function custom_theme() {
  return array(
    'custom' => array(
      'arguments' => array('output' => NULL),
      'template' => 'custom',
     ),
  );
}

function template_preprocess_custom(&$variables) {

}

答案 1 :(得分:1)

您正在调用错误的主题功能。而不是function theme_custom它应该是function theme_Bluemarine。您还需要将数组传递给hook_theme()的变量片段。请参阅一个简单示例here

使用您的示例:

function custom_menu(){
  $items = array();

  $items['custom'] = array(
    'title' => t('custom!'),
    'page callback' => 'custom_page',
    'access arguments' => array('access content'),
    'type' => MENU_NORMAL_ITEM,
  );

  return $items;
}

function custom_page() {
  $setVar = 'this is custom module';
  return theme('custom', array('output' => $setVar));
}

function custom_theme() {
  $path = drupal_get_path('module', 'custom');
  return array(
    'custom' => array(
        'variables' => array('output' => null),
        'template' => 'custom',
     ),
  );
}

现在在custom.tpl.php中只需要<?php print $output; ?>

答案 2 :(得分:0)

首先,您需要在hook_theme的帮助下声明主题及其行为方式。您可以轻松使用功能主题。

此外,您可能需要使用hook_preprocess