web-dev-qa-db-ja.com

D7のページエイリアスを使用してページが存在するかどうかを確認する方法

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()を使用することに非常に消極的です。内部パスをチェックする簡単な方法があるべきではありませんか?

5
Ari Linn

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!');

}
7
Clive

これを試してみてください

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!');
}
2
Ahmed