在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;
}
?>
答案 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;
}
答案 1 :(得分: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()
。
您报告的代码也包含其他错误:empty()
只能用于变量,如PHP documentation中所述。
empty(trim($name))
仅检查变量,因为其他任何内容都会导致解析错误。换句话说,以下操作无效:<?php $arg1 = arg(1); return (arg(0) == 'video' && !empty($arg1) && !is_numeric($arg1)); ?>
。
我报告的代码显示了像“video / video1”这样的路径的块;如果您还要为“video / video1 / edit”等路径显示该块,则应使用以下代码。
arg()
如果您要查找的路径是路径别名,则使用arg(0)
不起作用。假设“video / video1”是“node / 10”的路径别名;在这种情况下,arg(1)
将返回“node”,$_GET['q']
将返回“10”。 $_GET['q']
的情况也是如此,它将等于“node / 10”。
这是因为Drupal在其引导期间使用以下代码初始化 // 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]));
{{1}}
答案 2 :(得分:0)
不知道,你的论点是什么样的,但我认为你混淆了两种类型。 is_nan()
只有才能使用数字。如果要测试,如果值是数字,
var_dump(is_numeric(arg(1));
is_nan()
测试,如果“数字”值是具体值或“非数字”如“无限”或“0/0”等结果。