Тематический модуль вывода - PullRequest
0 голосов
/ 06 декабря 2011

То, что я пытаюсь сделать, это сгенерировать какой-то необработанный вывод в модуле.

Я хотел бы передать массив данных в файл шаблона, а затем использовать эти данные для заполнения кода из шаблона. Шаблон представлен файлом в папке моей темы.

У меня настроен хук для определенного URL (/ itunes):

$items['itunes'] = array(
    'page callback'     =>  'itunespromo_buildpage',
    'type'              =>  MENU_SUGGESTED_ITEM,
    'access arguments'  =>  array('access content'),
);

.. внутри itunespromo_buildpage ...

function itunespromo_buildpage() {
    //grab some data to pass through to template file, put into $promo_data
    $details = theme('itunes_page', array(
        'promo_data'    =>   $promo_data,
    ));
    return $details;
}

Вот hook_theme ():

function itunespromo_theme() {
    return array(
        'itunes_page'   =>  array(
            'template'  =>  'itunes_page',
        ),
    );
}

Внутри template.php моей темы:

function geddystyle_itunes_page($vars) {
    return print_r($vars['promo_data'], true);
}

Прямо сейчас, $ promo_data - это , проходящий через штраф, и он print_r будет на странице результатов. Однако я бы хотел взять эту переменную $ promo_data и использовать ее в моем файле шаблона itunes_page.tpl.php.

Я уверен, что я здесь близко. Должен ли я вызвать какую-нибудь функцию рендера и передать ей переменную $ promo_data из функции itunespromo_theme ()?

1 Ответ

0 голосов
/ 06 декабря 2011

Полагаю, вам просто нужно обновить hook_theme (), чтобы предоставить возможность отправлять переменные в файл шаблона.

Что-то вроде этого должно помочь:

function itunespromo_theme($existing, $type, $theme, $path) {
 return array(
  'itunes_page'   =>  array(
    'variables' => array(
      'promo_data' => NULL,
      ),
      'template' => 'itunes_page',
    )
  );
}

Такжевместо непосредственного вызова функции theme () то, что вы хотите делать, - это на самом деле создать визуализируемый массив и позволить Drupal вызывать функцию theme ().То, что вы должны делать, это вызывать drupal_render, который, в свою очередь, вызывает theme () для вас.Посмотрите на этот совет здесь для большей ясности:

http://drupal.org/node/1351674#comment-5288046

В вашем случае вы бы изменили свою функцию itunespromo_buildpage, чтобы она выглядела примерно так:

function itunespromo_buildpage() {
  //grab some data to pass through to template file, put into $promo_data
  $output = array(
  '#theme' => 'itunes_page',
  '#promo_data' => $promo_data //call $promo_data from the tpl.php page to access the variable
  );
  $details = drupal_render($output);
  return $details;
}
...