Drupal 7での「page.tpl.php」などのテンプレート内で、ユーザーの権限(ロール)によって処理を変えたい場合に、判定するためのコードのメモです。
|
<?php global $user; if (in_array('administrator', $user->roles)) { //administrator権限ユーザーの場合の処理 } ?> |
また、複数の権限を判定したい場合には、下記の様にも書けます。
|
<?php global $user; if (checkValuesInArray(array('administrator', 'manager'), $user->roles)) { //administrator、またはmanager権限ユーザーの場合の処理 } function checkValuesInArray($search, $target) { $sign = false; foreach ($search as $value) { if (in_array($value, $target)) $sign = true; } return $sign; } ?> |
Drupalではコンテンツの表示には「$content」という変数を使います。
これは「node.tpl.php」テンプレート内で使うことができますが、汎用的なテーマのテンプレートの場合、次のように記述して、コンテンツに含まれるフィールドをまとめて出力しています。
|
<?php print render($content); ?> |
フィールドの表示順やラベル表示の有無は「サイト構築 > コンテンツタイプ」内の「表示の管理」から変更をすることもできます。
もしオリジナルテーマを作成して、レイアウト内で個別にフィールドを出力したい場合には次のように個別指定も可能です。
|
<?php print render($content['field_image']); ?> |
上記では「field_image」フィールドのみを出力しています。
画像などでは、一つのフィールドに複数点アップするケースもありますが、その内の一つ目の項目のみを出力したい場合は次のようにします。
|
<?php print render($content['field_image'][0]); ?> |
Drupal 7のコアモジュールで利用されている、主要テンプレートファイルの一覧です。
DrupalではPHPテンプレートエンジンにより「.tpl.php」という拡張子を持つテンプレートファイルをもとにHTMLをレンダリングされます。
これらのファイルはシステム側にデフォルトのものが用意されていますが、オリジナルのテーマを作成する際には、このテンプレートファイルを自分のテーマディレクトリに同じ名前で格納することで、デフォルトよりも優先的に読み込み、レンダリングに反映させることができます。
ですので、オリジナルのテーマを作成する際には、これらのテンプレートファイルの編集が重要になってきます。
またデフォルトの各テンプレートファイルには、テンプレートファイル内で使える変数の説明をコメントに記載されていますので、編集の際に参考になります。
HTML(DOCTYPE、HEADなどBODYの外側) |
/modules/system/html.tpl.php |
ページ(BODYの内側) |
/modules/system/page.tpl.php |
領域(ヘッダー、コンテンツなど、レイアウト内の各領域) |
/modules/system/region.tpl.php |
ノード |
/modules/node/node.tpl.php |
フィールド(ノード内の本文や画像、その他追加フィールド) |
/modules/field/theme/field.tpl.php |
ブロック |
/modules/block/block.tpl.php |
コメント(コメント一覧、および各コメント) |
/modules/comment/comment-wrapper.tpl.php
/modules/comment/comment.tpl.php
|
検索(検索フォーム、および検索結果) |
/modules/search/search-block-form.tpl.php
/modules/search/search-result.tpl.php
/modules/search/search-results.tpl.php
|
サイトメンテナンス時のHTML |
/modules/system/maintenance-page.tpl.php |
タクソノミー |
/modules/taxonomy/taxonomy-term.tpl.php |
ユーザー(アバターや、ユーザー名などの各情報) |
/modules/user/user-picture.tpl.php
/modules/user/user-profile-category.tpl.php
/modules/user/user-profile-item.tpl.php
/modules/user/user-profile.tpl.php
|
Drupal 7でノードのテンプレート内で日時の表示のメモです。
ノードのテンプレート内では「$created」で投稿日時の値を使えますが、Drupalで用意している日時フォーマットで表示するには次のように記述します。
|
<?php print format_date($created, 'short'); ?> |
2つ目の引数がフォーマットの名称で、「short」「medium」「long」が入ります。デフォルトでは「medium」なので、省略も可能です。
Drupalで用意しているフォーマット以外の書式にしたい場合は次のようにします。
|
<?php print format_date($created, 'custom', 'Y-m-d'); ?> |
フォーマットを「custom」として、3つ目の引数で書式を渡します。この場合はdate()関数を使うのと同じ働きになります。
Drupalで表示しているページのパスをスラッシュで分割し、各パートを配列で取得するスクリプトのメモです。
|
<?php function THEMENAME_preprocess_page(&$variables) { $alias = drupal_get_path_alias($_GET['q']); if (strpos($alias, '/') !== false) { foreach (explode('/', $alias) as $part) { $variables['parts'][] = $part; } } else { $variables['parts'][] = $alias; } } ?> |
テーマの中の「template.php」にページのプリプロセスとして以下のように記述すると、ページのテンプレート(page.tpl.php)内で「$parts」という変数名で利用できます。
|
print_r($parts); /* Array ( [0] => article [1] => 1 ) */ |
URLエイリアスごとに表示方法をカスタマイズしたい場合に有効です。