Drupal правила php действия

Drupal правила php действия

13.12.2011 12:53:49 Просмотров 58 Источник

Я экспериментирую с модулем правил в первый раз, и я пытаюсь перенаправить своих пользователей с помощью простого кода php, как показано ниже:

drupal_set_message('testing');
drupal_goto('node/3');

Первая строка кода выполняется, но вторая, которая должна направлять моих пользователей к узлу / 3, не имеет желаемого эффекта.

Как я могу заставить эту функцию перенаправления работать?

У вопроса есть решение - Посмотреть?

Ответы - Drupal правила php действия / Drupal rules php action

Является ответом!
Clive

13.12.2011 02:46:04

Это, скорее всего, потому что у вас есть ?destination=some/pathв URL страницы, эти строки в drupal_goto()приводят к тому, что любой путь, который вы передаете функции, будет перезаписан тем, что находится в URL:

if (isset($_GET['destination']) && !url_is_external($_GET['destination'])) {
  $destination = drupal_parse_url($_GET['destination']);
  $path = $destination['path'];
  // ...

Вероятно, вы можете обойти это, просто изменив свой код на этот:

if (isset($_GET['destination'])) {
  unset($_GET['destination']);
}
drupal_goto('node/3');

Если это не работает, попробуйте добавить эту строку перед drupal_goto:

drupal_static_reset('drupal_get_destination');

который сбросит статический кэш для функции drupal_get_destination(), которая также участвует в этом процессе в какой-то момент (я думаю).

Если все остальное терпит неудачу, идите в старую школу:

$path = 'node/3';
$options = array('absolute' => TRUE);
$url = url($path, $options);
$http_response_code = 302;
header('Location: ' . $url, TRUE, $http_response_code);
drupal_exit($url);

Это в значительной степени вырезано прямо из самой drupal_goto()и, безусловно, будет работать.

https://stackoverflow.com/questions/8480687/drupal-rules-php-action/8482013#comment10500157_8482013
Спасибо, Клайв. Разберусь в этом при первой же возможности
https://stackoverflow.com/questions/8480687/drupal-rules-php-action/8482013#comment10515584_8482013
Спасибо за богатый выбор предложений. Из них всех это был последний, поднятый из функции goto, который работал. Можете ли вы дать некоторое представление о том, как вы так тщательно анализируете и понимаете drupal?
https://stackoverflow.com/questions/8480687/drupal-rules-php-action/8482013#comment10534195_8482013
Боюсь, что на это нет простого ответа, мне пришлось согнуть Drupal, чтобы делать вещи, которые не обязательно должны были делать так часто, что мне пришлось копаться в основных файлах и видеть, что происходит сотни раз; теперь это почти вторая натура, чтобы знать, где источник проблемы, вероятно, будет. Я также довольно внимательно следил за развитием Drupal 7, что очень помогло моему пониманию системы. Лучший совет, который я могу дать, - не бойтесь застрять в основных файлах и просто продолжайте следовать по следу функций, пока не найдете, что вызывает проблему :)
Закрыть X