Drupal PHP блокирует правила видимости - PullRequest
0 голосов
/ 25 августа 2011

В настройках видимости страницы блока Drupal я бы хотел запретить показ определенного блока, если второе значение в пути - это число. Это не похоже на работу для меня. Приветствия.

Показывать блок ТОЛЬКО, когда аргументы:

domain.com / video / one (аргумент 0 - это «видео», а аргумент 1 присутствует, а НЕ число)

Не показывать:

domain.com / видео

domain.com / видео / 1

<?php
  if (arg(0) == 'video' && is_nan(arg(1)) && empty(arg(2))) {
    return TRUE; 
  }
  else {
    return FALSE;
  }
?>

Ответы [ 3 ]

1 голос
/ 25 августа 2011

Я предполагаю, что это в функции hook_block / hook_block_view? Вы можете попробовать другой подход:

if (preg_match('/^video\/[0-9]+$/', $_GET['q'])) {
  // Path has matched, don't show the block. Are you sure you should be returning TRUE here?
  return TRUE; 
}
else {
  // Path has matched, go ahead and show the block  
  return FALSE;
}
1 голос
/ 26 августа 2011

Вы можете просто использовать следующий код:

<?php
  $arg1 = arg(1);
  $arg2 = arg(2);
  // Check arg(1) is not empty, or is_numeric() returns TRUE for NULL.
  return (arg(0) == 'video' && !empty($arg1) && !is_numeric($arg1) && empty($arg2));
?>

Как уже сказал KingCrunch, is_nan() не возвращает TRUE, когда его аргумент является числом. В сообщенном вами коде содержится и другая ошибка: empty() может использоваться только с переменными, как указано в документации PHP .

empty() проверяет только переменные, так как все остальное приведет к ошибке разбора. Другими словами, следующее не будет работать: empty(trim($name)).

Код, который я сообщил, показывает блок для таких путей, как "video / video1"; если вы хотите показать блок также для таких путей, как «video / video1 / edit», то следует использовать следующий код.

<?php
  $arg1 = arg(1);
  return (arg(0) == 'video' && !empty($arg1) && !is_numeric($arg1));
?>

Использование arg() не работает, если искомый путь является псевдонимом пути. Предположим, что «video / video1» является псевдонимом пути для «node / 10»; в этом случае arg(0) вернет "узел", а arg(1) вернет "10." То же самое верно для $_GET['q'], который будет равен "node / 10".

Это происходит потому, что Drupal во время начальной загрузки инициализирует $_GET['q'] с помощью следующего кода:

  // Drupal 6.
  if (!empty($_GET['q'])) {
    $_GET['q'] = drupal_get_normal_path(trim($_GET['q'], '/'));
  }
  else {
    $_GET['q'] = drupal_get_normal_path(variable_get('site_frontpage', 'node'));
  }
  // Drupal 7.
  if (!empty($_GET['q'])) {
    $_GET['q'] = drupal_get_normal_path($_GET['q']);
  }
  else {
    $_GET['q'] = drupal_get_normal_path(variable_get('site_frontpage', 'node'));
  }

Если вы проверяете псевдоним пути, вам следует использовать следующий код:

// Drupal 6.
$arg = explode('/', drupal_get_path_alias($_GET['q']);
return (arg[0] == 'video' && !empty($arg[1]) && !is_numeric(arg[1]) && empty($arg[2]));
// Drupal 7.
$arg = explode('/', drupal_get_path_alias();
return (arg[0] == 'video' && !empty($arg[1]) && !is_numeric(arg[1]) && empty($arg[2]));
0 голосов
/ 25 августа 2011

Не знаю, как выглядят ваши аргументы, но я предполагаю, что вы перепутали два типа типов.is_nan() только работает с числами.Если вы хотите проверить, если значение является числом,

var_dump(is_numeric(arg(1));

is_nan() проверяет, является ли «числовое» значение конкретным значением или «не число», как «бесконечное» или результат"0/0" или что-то подобное.

...