次のコードを使用するだけです。
<?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
あなたが報告したコードには別のエラーも含まれています: PHP ドキュメントempty()
で報告されているように、変数でのみ使用できます。
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']
「ノード/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]));