Передача переменных в шаблон drupal - PullRequest
0 голосов
/ 05 ноября 2011

Мне нужно отобразить страницу в drupal, созданную шаблоном и основанную на конкретной записи из моей таблицы.

Я создал модуль "item" (в качестве примера).

Я сделал хук item_menu:

  $items['items/%item'] = array(
    'title' => 'Items',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('show_item', 1),
    'access callback' => true,
    'access arguments' => array(),
  );  

Я создал функцию загрузки для элемента:

function item_load($itemid)
{
  $sql = 'SELECT * FROM {items} it WHERE it.id = :itemid';

  $result = db_query(
    $sql, 
    array(':itemid' => $itemid), 
    array( 'target' => 'mydatabase' ));

  $item = $result->fetchObject();
  return $item;
}

Теперь я хочу использовать шаблон для отображения специфики для элемента,поэтому я создал модуль item item.tpl.php.и ловушка item_theme для регистрации шаблона:

function item_theme($existing, $type, $theme, $path) 
{
  return array(
    'show_item' => array(
      'template' => 'item',
      'variables' => array(),
    ),
  );
}

Последнее, что мне нужно сделать, это передать объект item в item.tpl.php, чтобы я мог отобразить свойства элемента.

Но я не знаю, как это сделать.Как я могу сделать элемент известным в шаблоне ??

Надеюсь, вопрос достаточно ясен.Заранее спасибо.

[edit]

Я обнаружил, что arg (1) содержит значение подстановочного знака из аргументов страницы меню, если я использую arg (1) для поиска элементав базе данных?

1 Ответ

0 голосов
/ 06 ноября 2011

Вам необходимо объявить имена и значения по умолчанию для переменных, которые вы хотите использовать в variables части вашего массива в hook_theme:

function item_theme($existing, $type, $theme, $path) {
  return array(
    'show_item' => array(
      'template' => 'item',
      'variables' => array('var1' => NULL, 'var2' => NULL, 'etc...'),
    ),
  );
}

Затем вызвать функцию темы следующим образом:

$item_output = theme('show_item', array('var1' => $a_var, 'var2' => $another_var));

** ОБНОВЛЕНИЕ **

Для обращения к функции load(), вызываемой 4 раза, вы можете использовать статические переменные, чтобы избежать выполнения запроса каждый раз:

function item_load($itemid) {
  $items = &drupal_static(__FUNCTION__, array());

  if (!isset($items[$itemid])) {
    $sql = 'SELECT * FROM {items} it WHERE it.id = :itemid';
    $items[$itemid] = db_query(
      $sql, 
      array(':itemid' => $itemid),
      array('target' => 'mydatabase')
    )->fetchObject();
  }

  return $items[$itemid];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...