403や404でブロック領域を表示させるのをUIでon/offさせてみました | LOGIN,PASSWORD or REGIST

403や404でブロック領域を表示させるのをUIでon/offさせてみました

Posted by amayadori on 2007/11/12(月) 16:35 in

テーマテンプレート : 403/404 エラーのページでもサイドブロックを表示する | Drupal.0829.info
で、Drupalの仕様が、403(そんなページはありませんあなたにはページを表示する権限がありません)エラーや、404(あなたにはページを表示する権限がありませんそんなページはありません)エラーの時に、エラーメッセージを表示しますが、サイドブロックが表示されない様に変更になりました。
Drupal本体の効率化のために、一番負担の大きいメニューブロックが含まれる可能性がかなり高いブロックを非表示にすることで負担軽減を狙ったものだろうとは想像がつきます。
しかし、ユーザーの視点から見ると実に不親切です。
エラーの時だからこそ、ナビゲーションを表示して欲しいとか思うのですがね。
で、例によって、0829さんがそんな方法を見つけてきました。
他にもいくつか方法が提示されているようですが、一番リスクの少ない方法を紹介してくださっています。
詳細は上のリンクから見に行ってくださいね(笑)

方法として、テーマデザインに含まれていることが多い(て言うか、最近ではほぼ当たり前)template.phpに4行加えるだけなので、ワタシのようにテーマを頻繁に入れ替えるような不届きものではない皆さんは一度書き込んだら後はそのままでも十だと思われます。
しかし、この状態のon/offを何らかの理由で切り替えたいとう場合には別の仕掛けが必要になります。
で、話の成り行きで出てきたのがテーマデザインに設定項目を追加して、テーマから参照できるようにするAPIモジュールのthemesettingsapiモジュールを使って、on/off出来るように出来ないか?という事がこのトビになります(笑)

まず、当然ながらthemesettingsapiモジュール1は必要になります。
これは通常通りモジュールとしてインストールして有効にします。
次は、設定用のファイルを作ります。
ファイル名は settings.php にします。

<?php

function phptemplate_settings($saved_settings) {

  $settings = theme_get_settings('sky');

  $defaults = array(
    'sky_errorblock' => 0,
  );

  $settings = array_merge($defaults, $settings);

  $form['sky_errorblock'] = array(
    '#type' => 'checkbox',
    '#title' => t('error block'),
    '#default_value' => $settings['sky_errorblock'],
  );

  return $form;
}


赤字は、適用するテーマデザインの名称。青字は任意の変数名です。
このファイルは適用するテーマデザインのフォルダ内に保存します。
次に、テーマデザインに付属している template.php に以下の記述を追記します。
場所は最後最初の方(ただし、<phpの後)?がいいのかな?

if (theme_get_setting('sky_errorblock')) {
  function sky_page($content, $show_blocks = TRUE) {
    $show_blocks = $show_blocks ? $show_blocks : TRUE;
  return phptemplate_page($content, $show_blocks);
  }
}

青字はsettings.phpで使った変数名と同じにします。
これで、準備完了です。
themesettingsapiモジュールが有効になっているとテーマの設定画面で、ロゴ画像や、アイコンの競っているする部分が折りたたみ表示なっていると思います。
適用するテーマデザインの設定画面の一番下の方に追加した項目"erroe block"が出現していると思います。
ここにチェックを入れて保存後、存在しない適当なページを開いてみてください。
どうですか?サイドブロックは表示されたでしょうか?表示されていれば万事オッケーのようです。

ま、通常使う分にはわざわざこんな面倒な事をしなくても良さそうな気がしますが、テーマを作って配布するような人にはメリッとある?

  1. 1. Theme Settings API | drupal.org
トラックバック


URLから "-notspam" を削除してトラックバックを送信してください。トラックバックポリシーは こちらに提示しています。
コメント表示オプション
お好みのコメントを表示方法を選択してください「設定の保存」をクリックすると変更が有効になります。
Re: 403や404でブロック領域を表示させるのをUIでon/offさせてみました

色々、アンテナ、ありがとうございます。

wrote:
はそれぞれ、403 Forbidden と 404 File Not Found だったと思いますので、()内の説明が逆かも。

あー、スミマセン。速攻で治しました(笑)
普段あんまり気にしてないので・・・抜かりました(^_^;)

wrote:
となっているようです。たまたま、「コード書くのは最初の方がいいわけだな、なるほど。」と思ったところだったので…

ありがとうございます。
"そんなもの見てねーよ"というのが正直なところです(笑)いけませんねー(^_^;)
でも、最初は雰囲気的に前の方に書かないといけなそうな雰囲気は感じてたんですよ。
前の方はテーマデザインに依存した「固定」的な列記だけど、後ろの方へ行けば行くほどphptemplateあての「汎用」的な列記になっているので、前の方がいいかな?とは思いましたけど。
でも、そんな確証はなかったので後ろに記述してみたのでした。
勘通りにしておけば良かったですね(笑)

ま、なんにしても、ありがとうございます。
あんまり真剣に考えないで"実験"みたいな乗りでやってしまいましたので(^_^;)
でも、これ読んで真剣に考えた人にはよろしくないですね。反省しますっ。

Posted by amayadori on 2007/11/12(月) 18:22
Re: 403や404でブロック領域を表示させるのをUIでon/offさせてみました

なるほどです。いつもいろいろありがとうございます。

と、老婆心ながら…

Quote:
403(そんなページはありません)エラーや、404(あなたにはページを表示する権限がありません)エラー

はそれぞれ、403 Forbidden と 404 File Not Found だったと思いますので、()内の説明が逆かも。です。

あと、template.php への記述については、Custom Theme Settings | drupal.org のサンプルでは、

Quote:
Add the following code near the top of your template.php file:

となっているようです。たまたま、「コード書くのは最初の方がいいわけだな、なるほど。」と思ったところだったので…
動作すればそれで問題ないんですけどね、実際には。

Posted by 0829@drupal.org on 2007/11/12(月) 17:17