Drupal 7 - получить переменные из 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 Наконец, я создал TPL с именем "example-fancybox-photos.tpl.php" в папке шаблонов (в папке темы)

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

Результат NULL

Я провел некоторые исследования, но я не понимаю, почему переменная по-прежнему NULL.

Спасибо за вашу помощь!

2 ответа

Вы прошли $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; ?>

Мне наконец удалось получить переменную из модуля в 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 Я наконец создал tpl с именем "example_fancybox_photos.tpl.php" в папке шаблонов (в папке MODULE (пример))

Проблемы заключались в том, что: - tpl не был назван одинаково и с черточками вместо подчеркивания - tpl был в папке с шаблонами темы, а не модуля

Другие вопросы по тегам