您可以简单地使用以下代码:
<?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]));