Передать переменную PHP из вида в блок в Drupal - PullRequest
0 голосов
/ 15 февраля 2011

Я бы хотел передать переменную PHP из представления (вывода в виде блока) в статический блок.В представлении я установил нижний колонтитул на PHP и написал что-то вроде этого:

<?php $name = "Sam"; ?>

В статическом блоке под ним я просто пытаюсь получить значение этой переменной:

<?php echo $name; ?>

Но, увы, там ничего нет.Скорее всего, есть более Drupaly способ сделать это ... и я рад идти в этом направлении ... но если это вообще возможно, я хотел бы попытаться сделать эту работу.

Есть мысли?

Ответы [ 2 ]

2 голосов
/ 15 февраля 2011

Попробуйте добавить «global $ name;» перед обеими строками.

Это должно работать, но глобальных функций следует избегать, по крайней мере, вы должны использовать уникальную переменную с префиксом. Что именно вы пытаетесь сделать конкретно?

Лучшим способом было бы объявить некоторые вспомогательные функции и использовать шаблон, который используют многие такие функции в ядре Drupal, например form_set_error . Если вы посмотрите на первую функцию, вы увидите, что вы можете передать ей что-то, что хранится в статической переменной, а затем возвращается. Он может быть вызван без аргумента, тогда он просто возвращает то, что в нем в данный момент сохранено.

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

<?php
function yourmodule_set_name($name = NULL) {
  static $stored_name = NULL;
  if ($name) {
    $stored_name = $name;
  }
  return $stored_name;
}

yourmodule_set_name('Sam');

// Prints Sam.
echo yourmodule_set_name();
?>

В Drupal 7 есть вспомогательная функция с именем drupal_static , которую вы можете напрямую (ab-) использовать для этого.

<?php
$name = &drupal_static('yourmodule_name');
$name = 'Sam';

// Anyhwere else, prints also Sam.
echo drupal_static('yourmodule_name');
?>
0 голосов
/ 15 февраля 2011

Если вы устанавливаете постоянную переменную (такую, которая выдержит несколько загрузок страницы), вы также можете использовать variable_set () & variable_get () для установки и получения переменной. Хотя, как отмечает Бердир, это было бы довольно опасно для производительности, если бы это происходило при каждой загрузке страницы.

По вашему мнению, нижний колонтитул с помощью variable_set ():

<?php
  $name = "name";
  $value = "Sammy";
  variable_set($name, $value);
?>

И тогда в вашем блоке вы можете получить эту переменную с помощью variable_get ():

<?php
$default = "default";
$echome = variable_get("name", $default);
echo $echome;
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...