存在しないページにアクセスしても、他のページと同様にプライマリリンクとセカンダリリンクが表示されるはずですが、404ページにはナビゲーションリンクがありません。404ページのナビゲーションリンクも参照してください。
私は解決策を見つけましたが、他の何かがこれを修正できる場合は幸せです(おそらく追加のモジュールを使用せずに)。
存在しないページにアクセスしても、他のページと同様にプライマリリンクとセカンダリリンクが表示されるはずですが、404ページにはナビゲーションリンクがありません。404ページのナビゲーションリンクも参照してください。
私は解決策を見つけましたが、他の何かがこれを修正できる場合は幸せです(おそらく追加のモジュールを使用せずに)。
回答:
カスタムモジュールでページを定義することでそれを行うことができます。
を使用して、カテゴリ「ページが見つかりません」のページを作成しますhook_menu()
。
function MODULE_menu() {
$items['page-not-found'] = array(
'title' => '',
'page callback' => 'MODULE_page_not_found',
'access callback' => TRUE,
);
return $items;
}
function MODULE_page_not_found() {
drupal_set_title('Page not found');
$cust_err = "";
$cust_err = $cust_err . "The requested page " . current_path() . " could not be found";
return $cust_err;
}
ページコールバックはcurrent_path()
、404エラーの原因となっているページのパスを返すために使用します。
行く[管理]> [構成]> [システム]> [サイトの情報、および入力ページを-が見つからない(で定義されている同じ名前hook_menu
の下に)デフォルト404(見つかりません)ページ。
次のスクリーンショットのように、エラーページが表示されます。
すべてのナビゲーションリンクと、エラーを生成するページのURL(元のページが見つからないのと非常に似ている)が含まれていることは明らかです。上記の回答で@ Nikhilが言及したモジュールは、「要求されたページが見つかりませんでした」と出力します。エラーの原因となっているページのURLは含まれていません。
これを機能させるモジュールがあります404ナビゲーション
404 Not Foundエラーページでは、パフォーマンス上の理由から、DrupalはWebサイトのすべてのナビゲーションリンクのレンダリングをスキップします*。これらのいくつかは次のとおりです。
「プライマリリンク」ブロックとその他のメニューリンクブロック。テーマのプライマリリンクとセカンダリリンク。* admin / config / system / site-informationで「デフォルト404(見つかりません)」ページを設定していない限り。
また、D7でこれを修正するパッチもあります。
良いモジュールの選択肢もあります:
標準の「404ページが見つかりません」を表示する代わりに、このモジュールはURLのキーワードで検索を実行します。たとえば、ユーザーがhttp://example.com/does/not/existにアクセスした場合、このモジュールは検索を実行します「存在しない」の場合、404ページの代わりに検索結果が表示されます。これは、他のサイトや検索インデックスからリンクされた古いURLからの訪問者を維持するのに役立ちます。
Drupalには高額な404エラーがあります。「平均」モジュール負荷の「平均」サイトでは、サーバーで消費される404〜100MBのメモリを確認できます。不正な.gifリンクと欠落した.cssファイルのあるページを検討してください。そのページは、ページの実際のロードとともに2つの404を生成します。ほとんどの場合、そのページを処理するために必要な60 MBではなく、180 MBのメモリを使用しています。
カスタムモジュールでページを定義することでそれを行うことができます。
hook_menu()を使用して、カテゴリ「ページが見つかりません」のページを作成します。
function MODULE_menu() {
$items['page-not-found'] = array(
'title' => '',
'page callback' => 'MODULE_page_not_found',
'access callback' => TRUE,
);
return $items;
}
function MODULE_page_not_found() {
drupal_set_title('Page not found');
$cust_err = "";
$cust_err = $cust_err . "The requested page " . current_path() . " ould not be found";
return $cust_err;
}
それはほぼ良好です。しかし、このコードは次を返します:
「リクエストされたページpage-not-foundが見つかりませんでした」
current_path()をrequest_uri()に変更する必要があり、次を返します:
「リクエストされたページ/ request_uriが見つかりませんでした」
t('The requested page "@path" could not be found.', array('@path' => request_uri()));
。このように、サイトが多言語の場合、デフォルトのDrupal翻訳が使用されます。