Drupalのサイト構築 

Drupalをインストールしてから最初につまずいたのは独特の用語。 そしてメニューの作成の仕方。
インターネットで検索してもモジュールの追加やテーマのことは書いてあっても、基本的な使い方が書いてあるところが見つからなかった。本を探しても英語の本しか見つからないし、英語は苦手なので無理。もちろん本家のフォーラムとかは英語なので無理。 これは困った。自分で色々試してみるしかなかった。

デフォルトで表示されているナビゲーションは管理メニューなんかも付いていてウザイ。だけど非表示にしたら今度は管理メニューに行くにはURLを直接叩くことになって面倒。 プライマリーリンクって何?どう使えばいいの? 独自のメニューを作るには?
 色々思考錯誤していたらだんだん分かってきたので、ここで一旦まとめてみようと思う。

ブログ、ブック、ページ、ストーリーの違い


最初に戸惑ったのは「どれで記事を書きゃいいの?」ということ。 記事を書こうとすると、どのフォームへ行っても似たようなフォームで「何がどう違うの?」と思ってしまった。 それぞれ意味があって、フォームは似ていても表示の仕方やページの移動の仕方が違う。

ブログ:
これは今となっては一番分かりやすい。日記のような記事を書く時に使う。 新着順に表示されるので、サイトによっては更新記録とかにも使える。


ブック:
これが一番よく使うと思う。 他との大きな違いは「上位」や「優先順位」というフォームがある。これで記事の順序や階層をつけるのである。ページの順序を自由に変えられ階層も付けられるので、ひとまとまりの記事にいい。 例えば、サービス概要やサイトの使い方など後から記事が追加されるようなものに向いている。また、タクソノミーモジュールを上手く使えばちょっとしたデータベースとしても使える。


ページ:
これはDrupalの説明にもあるように静的なページに使う。 会社概要とかプライバシーポリシーとか。


ストーリー:
これがややこしいというか、違いが分からなかったもの。
機能はほとんどブログと同じで新着順に表示されて、それぞれのストーリーに順番は付けられない。ページも同じと言えば同じなんだけど…。


ブログは個人が発言しているので執筆者名が主張されていて、ストーリーはされていないということらしい。確かに、ブログで記事を書くと「○○さんのブログ」というリンクが作成されて、ナビゲーションにも「マイブログ」というメニューがあるので個人が書きやすい。「最近のブログ投稿」というブロックもある。
対してストーリーはメニューに関連付けない限りアクセスしづらく、投稿者も主張してない。自分の記事という感じではない。
参考:http://perltips.twinkle.cc/drupal/index.php#001213


でも、ブログ以外も「投稿者」が表示されているのでなんだか見た目はブログみたいだ。ややこしいので、後でこの投稿者の表示を消そうと思う。


独自管理メニューの作成


デフォルトでは「ナビゲーション」に管理メニューとコンテンツメニューが一緒になっていて、ややこしいので管理メニューとコンテンツメニューを分けようと思う。

1.ロールに管理者を追加
ログイン > 管理セクション > ユーザ管理 > ロール
ここで管理者のロールを追加します。日本語でもOK。 追加したら「権限の編集」で全ての権限を与えておく。


2.管理者権限を与える
管理セクション > ユーザ管理 > ユーザ
へ行き、管理メニューを使わせたいユーザに管理者権限を与える。 与えたいユーザの右にある「設定」をクリックし、「ロール」の「管理者」にチェックを入れる。


3.管理メニューを作る
管理セクション > サイトの構築 > メニュー
ここでメニューの追加を行なう。 タイトルは「管理メニュー」とかにする。 そしたら 
サイトの構築 > メニュー 
に戻って 管理メニューというメニューができているので 「項目の追加」をクリック。 管理メニューに追加したいリンクを追加する。
例えば、


タイトル:管理TOP
パス:admin
上位の項目:管理メニュー


タイトル:ユーザー管理
パス:admin/user
上位の項目:管理メニュー


という風に。


4.管理メニューブロックを設定
管理セクション > サイトの構築 > ブロック
ブロック設定画面へ行くと、新しいブロック「管理メニュー」ができているので設定する。 「設定」ボタンを押し、「ロール固有の表示設定」で最初に作成した「管理者」にチェックを入れる。


5.管理メニューブロックを表示させる
再び 管理セクション > サイトの構築 > ブロック
に行き、管理メニューを表示させたい領域を選択して「ブロックの保存」を押せば完成。 ここで「ナビゲーション」メニューを非表示にしてもいいが、ログアウトができなくなる(URL直叩きすればできる)ので、まだしない。


マイメニューの作成


管理メニューと同じようにメニューを作成するのだが、こっちは権限を設定しなくても最初からログインユーザには「authenticated user」というのがあるので、少し楽かな。

1.マイメニューを作る
管理セクション > サイトの構築 > メニュー
ここでメニューの追加を行なう。 タイトルは「マイメニュー」とかにする。 そしたら サイトの構築 > メニュー に戻って マイメニューというメニューができているので 「項目の追加」をクリック。 マイメニューに追加したいリンクを追加する。


例えば、


タイトル:アカウント情報
パス:user
上位の項目:マイメニュー


タイトル:ログアウト
パス:logout
上位の項目:マイメニュー


という風に。


2.マイメニューブロックを設定
管理セクション > サイトの構築 > ブロック
ブロック設定画面へ行くと、新しいブロック「マイメニュー」ができているので設定する。 「設定」ボタンを押し、「ロール固有の表示設定」で「authenticated user」にチェックを入れる。


3.マイメニューブロックを表示させる
再び
管理セクション > サイトの構築 > ブロック
に行き、マイメニューを表示させたい領域を選択して「ブロックの保存」を押す。 ここで「ナビゲーション」メニューを非表示にすれば完成。


と思いきや、不具合が残っていた。 「authenticated user」にだけチェックを入れれば、ログアウトすればマイメニューは表示されないはず。なのになぜか表示される。「ログアウト」は消えるけど「アカウント情報」は表示されてしまう。ブロックの「ページ固有の表示設定」にPHPでログインしているかのチェックを入れても、テーマに直接PHPを書いても効果がない。ハマッた…。


結局、これを非表示にするにはDrupalのソースを直接いじるしかなかった…。
参照:http://drupal.org/node/77414#comment-148719


drupal/includes/menyu.inc
1148行目あたりから


function _menu_item_is_accessible($mid) {
$menu = menu_get_menu();

// Follow the path up to find the first "access" attribute.
$path = isset($menu['items'][$mid]['path']) ? $menu['items'][$mid]['path'] : NULL;

// ここから追加
if (substr($path, 0, 5) == 'node/') {
$nid = substr($path, 5);
if (is_numeric($nid)) {
$node = node_load($nid);
return node_access('view', $node);
}
}
// ここまで追加

while ($path && (!isset($menu['path index'][$path]) || !isset($menu['items'][$menu['path index'][$path]]['access']))) {
$path = substr($path, 0, strrpos($path, '/'));
}
if (empty($path)) {
// Items without any access attribute up the chain are denied, unless they
// were created by the admin. They most likely point to non-Drupal directories
// or to an external URL and should be allowed.
return $menu['items'][$mid]['type'] & MENU_CREATED_BY_ADMIN;
}
return $menu['items'][$menu['path index'][$path]]['access'];
}

これでログインしないとマイメニューが表示されないようになる。 Drupalのソースを直接いじったので、Drupalのバージョンアップ時には気をつけよう。

 


マイメニューに「こんにちは○○さん」と表示させる


これは結構簡単。テーマを修正するだけ。

1.マイメニュー用テーマを作成する
今使用しているテーマの「block.tpl.php」を複製し、ファイル名を「block-menu-(マイメニューのメニューID).tpl.php」とする。 マイメニューのメニューIDは、マイメニューのブロックを編集しようとすればURLの最後にIDが表示される。↓
http://mydomain.com/admin/build/block/configure/menu/(ここにIDが表示される)


2.マイメニュー用テーマを編集する
マイメニューのテーマファイルを開き、以下のように修正する。


<div class="dbx-box" id="<?php print 'block-'.$block->module.'-'.$block->delta ?>">

<?php if ($block->subject): ?>
<h3 class="dbx-handle"><?php print $block->subject ?></h3>
<?php endif;?>

<div class="dbx-content">
こんにちは<?php global $user; print $user->name ?>さん
<?php print $block->content ?></div>
</div>

 


3.マイメニュー用テーマをアップロードする
今使用しているテーマフォルダ内にアップロードすれば完成。

コメント

コメントの投稿















管理者にだけ表示を許可する

トラックバック

この記事のトラックバックURL
http://shotets.blog21.fc2.com/tb.php/27-e76d6913