D7では、ページエイリアスによってページが存在するかどうかをどのように確認しますか? 同じ質問 を尋ねる人を見つけましたが、menu_valid_path()(またはD7のdrupal_valid_path())関数の使用に問題があります。どんなに奇妙なパスを渡しても、常にTRUEを返します。これがサンプルコードです:
if(drupal_valid_path($GLOBALS['base_url'] . '/contacts')) //this exists
{
print_r('Exists!');
}
if(drupal_valid_path($GLOBALS['base_url'] . '/weird_alias')) //this doesn't exist
{
print_r('Exists!');
}
/ weird_aliasページが存在せず、「ページが見つかりません」というエラーが返されるにもかかわらず、「exists」が2つ表示されます。ヘッダーやタイムアウトなどの不要なものがたくさんあるので、私はdrupal_http_request()を使用することに非常に消極的です。内部パスをチェックする簡単な方法があるべきではありませんか?
drupal_valid_path()
のコードを見ると、エイリアスが url_is_external()
を介して渡され、http://
接頭辞を外部にします。関数はデフォルトでこれらの種類のパスへのアクセスを許可し、単にその事実を返します。 「外部」URLが存在するかどうかはチェックしません。
追加しているので$GLOBALS['base_url']
エイリアスに対しては、外部にあるように見えます。ベースURLを付けずにエイリアスを関数に渡すだけです。
if(drupal_valid_path('weird_alias')) {
// This code is never run
print_r('Exists!');
}
これを試してみてください
if(drupal_valid_path('contacts') == 1) //this exists
{
print_r('Exists!');
}
if(drupal_valid_path('weird_alias') == 1) //this doesn't exist
{
print_r('Exists!');
}