Drupal 7 - 从hook_theme中获取变量

时间:2017-09-06 16:20:33

标签: variables drupal-7 parameter-passing hook-theme

我试图将自定义模块中的变量传递给tpl文件。 在我的自定义模块(命名示例)

1。我通过hook_menu创建了一个带有参数的路由:

function example_menu() {
  $items['example/fancybox-photos/%'] = array(
        'page callback' => 'example_display_fancybox_photos',
        'page arguments' => array(2),
        'type' => MENU_CALLBACK,
        'access arguments' => array('access content'),
      );
    return $items;
    }

2。我创建了页面回调函数:

function example_display_fancybox_photos($nid) {
  $nodePhoto = node_load($nid);
  $field_photo = field_get_items('node', $nodePhoto, 'field_photo');

  $photo = [
  "field_photo" => $field_photo[0]['uri'],
  ....
  ];

  return theme('example_fancybox_photos', array('infosPhoto' => $photos));
}

3。我创建了一个hook_theme

function example_theme() {
  $themes = array();

  $themes['example_fancybox_photos'] = array(
    'template' => 'templates/example-fancybox-photos',
    'variables' => array('infosPhoto' => NULL),
  );

  return $themes;
}

4。我终于在模板文件夹(主题文件夹)中创建了一个名为“example-fancybox-photos.tpl.php”的tpl

<pre><?php print var_dump($infosPhoto); ?></pre>

结果为NULL

我做了一些研究,但我不明白为什么变量仍然是NULL。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您已通过$photos,但您的数组为$photo。试着改变那个

希望以下代码可以帮助您。

function example_menu(){
    $items['example/fancybox-photos/%'] = array(
        'page callback' => 'example_display_fancybox_photos',
        'page arguments' => array(2),
        'type' => MENU_CALLBACK,
        'access arguments' => array('access content'),
    );
    return $items;
}

function example_display_fancybox_photos($nid){
    $photos = 'value from example module!';
    return theme('example_fancybox_photos',array('photos' => $photos));
}

function example_theme() {
    $path = drupal_get_path('module', 'example');
    return array(
        'example_fancybox_photos' => array(
            'variables' => array('photos' => null),
            'template' => 'example_fancybox_photos',
            'path' => $path, 
        ),
    );
}

将你的tpl文件example_fancybox_photos.tpl.php放在你的模块目录中,里面使用下面的代码。

<?php print $photos; ?>

function example_theme() {
    return array(
        'example_fancybox_photos' => array(
            'variables' => array('photos' => null),
            'template' => 'example_fancybox_photos',
        ),
    );
}

将您的tpl文件example_fancybox_photos.tpl.php放在您的主题目录中并在其中放置以下代码

<?php print $photos; ?>

答案 1 :(得分:0)

我终于设法从模块到tpl获取变量!

<强> 1。我通过hook_menu创建了一个带有参数的路由:

function example_menu() {
  $items['example/fancybox-photos/%'] = array(
        'page callback' => 'example_display_fancybox_photos',
        'page arguments' => array(2),
        'type' => MENU_CALLBACK,
        'access arguments' => array('access content'),
      );
    return $items;
    }

<强> 2。我创建了页面回调函数:

function example_display_fancybox_photos($nid) {
  $nodePhoto = node_load($nid);
  $field_photo = field_get_items('node', $nodePhoto, 'field_photo');

  $photos = [
  "field_photo" => $field_photo[0]['uri'],
  ....
  ];

  return theme('example_fancybox_photos', array('infosPhoto' => $photos));
}

3。我创建了一个hook_theme

function example_theme() {
  $themes = array();

  $themes['example_fancybox_photos'] = array(
    'template' => 'templates/example_fancybox_photos',
    'variables' => array('infosPhoto' => NULL),
  );

  return $themes;
}

4。我终于在templates文件夹中创建了一个名为“example_fancybox_photos.tpl.php”的tpl(在MODULE(示例)文件夹中)

问题在于: - tpl没有以相同的方式命名,而是使用破折号而不是下划线 - tpl位于主题的模板文件夹中,而不是模块