2011-08-25 1 views
0

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

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

domain.com/video/one (Arg 0 'видео' и Arg 1 присутствует и не число)

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

domain.com/video

domain.com/video/1

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

Что именно не работает? Что содержат переменные аргументов? –

+0

Где вы используете этот код? Используете ли вы его в реализации крючка, или используете ли вы его в качестве кода PHP, который определяет, когда должен отображаться модуль? Что вы ожидаете от URL? – kiamlaluno

+0

Извините, это для блока под «параметрами видимости страницы» Аргументы:/video/video1 должен показывать блок,/video/1/video/1/... не должен показывать блок – atb

ответ

0

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

var_dump(is_numeric(arg(1)); 

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

1

Я предполагаю, что это функция 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; 
} 
+0

Возвращаемое значение должно «ИСТИНА», когда должен отображаться блок. – kiamlaluno

+0

В соответствии с оригинальным сообщением 'TRUE' должно быть возвращено, когда блок не должен отображаться. – Clive

+0

Я действительно думал, что, следовательно, мой комментарий в исходном коде: «Вы уверены, что вам нужно возвращать TRUE здесь?» – Clive

1

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

<?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 documentation.

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

Я хочу показать блок, когда второй аргумент не является числом. – atb

+0

Все еще не работает ... – atb

 Смежные вопросы

  • Нет связанных вопросов^_^