[英]Drupal PHP block visibility rules
在Drupal塊的頁面可見性設置中,我想阻止某個塊顯示路徑中的第二個值是否為數字。 這對我來說似乎沒有用。 干杯。
僅在參數為時顯示塊:
domain.com/video/one(arg 0是'video',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;
}
?>
我假設這是在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;
}
您只需使用以下代碼:
<?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)
將返回“node”,而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]));
不知道,你的論點是什么樣的,但我認為你混淆了兩種類型。 is_nan()
僅適用於數字。 如果要測試,如果值是數字,
var_dump(is_numeric(arg(1));
is_nan()
測試,如果“數字”值是具體值或“非數字”如“無限”或“0/0”等的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.