Как получить доступ к переменным Drupal в файле, включенном в PHP?


У меня есть фрагмент HTML, который я сохранил в своей теме как mysnippet.inc. Я использую этот код в файлах шаблонов (например. node.tpl.php ) чтобы включить его:

<?php include($directory."/includes/mysnippet.inc"); ?>

Это работает нормально, но фрагменту также необходимо получить доступ к переменной Drupal $node_url. Поэтому я попытался включить его в свой фрагмент:

<?php global $node_url ; ?>
<?php print $node_url; ?>

Это не работает.

Каков был бы наилучший способ достичь этого? Должен ли я использовать template.php чтобы создать переменную, содержащую мой фрагмент кода вместо этого?

 2
7
Author: kiamlaluno, 2011-12-12

2 answers

Лучший способ достичь этого - это:

1. Создайте пользовательскую функцию темы с помощью hook_theme().

2. Внедрите препроцессор в свой template.php (вы также можете сделать это в пользовательском модуле). Вот документ D.O., описывающий, как это сделать. Предполагая, что вы хотите предварительно обработать node.tpl.php шаблон, препроцессор, который будет выполняться независимо от того, какую тему вы используете, будет называться phptemplate_preprocess_node.

3. Внутри ваш препроцессор, вызовите пользовательский theme() функция, созданная вами на шаге № 1. Добавьте результаты вашей функции темы в массив $variables, которые передаются вашему препроцессору. Например:

<?php
// In your template.php...
function phptemplate_preprocess_node($variables) {
  $variables['foo_bar'] = theme('my_theming_func', $params);
}

4. Теперь на node.tpl.php все, что вам нужно сделать, это:

<?php
if(isset($foo_bar)):
  print $foo_bar;
endif;

Я знаю, что это звучит сложнее, чем то, что вы пытаетесь сделать, однако использование PHP-глобалов в Drupal и include_once в шаблонах крайне не рекомендуется.

 0
Author: amateur barista, 2011-12-12 23:20:10

Вы можете получить доступ к массиву $variables в вашем включенном файле следующим образом:

 // assuming you are viewing a node
 $node = $variables['node'];
 // the node is an object, so to display the url do
 echo drupal_get_path_alias('node/'.$node->nid);

Чтобы увидеть, какие данные содержит массив $variables, сделайте что-то вроде:

 echo '<pre>';
 print_r($variables);
 echo '</pre>';
 0
Author: Cyclonecode, 2011-12-12 19:58:18