ノードテンプレートの編集

「基本ページの作成」から読まれている方は、既に編集用のテーマが適用されていると思います(※About us メニューコンテンツの追加を参照)。ここで編集したい箇所のテンプレートファイルは node.tpl.php('sites/all/themes/bartik/templates/node.tpl.php')です。しかしこれを編集してしまうと、「賃貸物件」以外のコンテンツタイプ(基本ページやブログ投稿など)の記事にも反映してしまいます。特定のコンテンツタイプだけを編集するには、node.tpl.php をコピーして node--{コンテンツタイプ名}.tpl.php とリネームして設置し、それを編集するようにします。「賃貸物件」の場合は、node--forrent.tpl.php となります。

node--forrent.tpl.php を設置したら、テーマ管理ページ(「管理」 > 「テーマ」)にアクセスし、そのままページ下の「設定を保存」ボタンをクリックして、テーマレジストリを再構築してください。そのあとパフォーマンスページ(「管理」 > 「環境設定」 > 「パフォーマンス」)から、「すべてのキャッシュをクリアー」ボタンをクリックして、キャッシュをクリアしてください。これで node--forrent.tpl.php が編集出来る状態になりました。

node--forrent.tpl.php の中の、以下の部分を探してください。

    <?php
      // We hide the comments and links now so that we can render them later.
      hide($content['comments']);
      hide($content['links']);
      print render($content);
    ?>

実は print render($content); の部分で、コンテンツの各フィールドを含む内容の出力をすべて担っています。変数 $content の中には表示すべき各フィールドの内容が含まれ、レンダー関数は子要素を再帰的にレンダリングするためです。特定のフィールドのみをレンダリングしたい場合は、

<?php print render($content['フィールド名']); ?>

のようにします。たとえば「敷金(field_deposit)」フィールドを表示したい場合は、

<?php print render($content['field_deposit']); ?>

となります。これを、いわゆるブログでいうところのテンプレートタグのように使い、あとはデザイン担当者が好きなようにHTML を使ってマークアップし、 <?php /* ~ */ print render($content); ?> の部分と置き換えてください。

編集した node--forrent.tpl.php(8KB)を適用したところです。少し形が見えてきました。画像がやたら大きいですが、これについては次回「画像スタイルの設定」のところで調整することにします。

ラベルの表示設定

あとは各フィールドのラベルが表示されているので、これを非表示にします。賃貸物件の表示管理ページ(「管理」 > 「サイト構築」 > 「コンテンツタイプ」 > 「賃貸物件」 > 「表示管理」)にアクセスしてください。

表示に設定されているすべてのフィールドについて、「ラベル」のセレクトボックスに<非表示>を選択し、ページ下の「保存」ボタンをクリックして、設定を保存します。

もういちど、作成した賃貸物件ノードにアクセスします(「管理」 > 「コンテンツ」からアクセス出来ます)。詳細データを表示するテーブル部分は、大体イメージ通りになってきました。(※1)


※1 ラベルを非表示にするのではなく、逆にそれを利用したカスタマイズ方法もありますが、ここでは現時点で一番自由度の高いやり方を採用しました。

コメント

大変参考に読ませていただきましたm(__)m
フィールドラベルを消さずに、関数で表示する方法ってあるのでしょうか?
field_view_field() を使うべし!も読ませていただきましたが、なかなか難しいです。

ご質問の意味が、ちょっとよく分からないので、ピンとはずれだったらすみません。

ノードテンプレートの中で、変数として各フィールドのラベルを取得したいということでしょうか?

その場合は field_view_field() を使っても取得できますが、ここでは $content['フィールド名']['#title'] でも取れると思います。

レスありがとうございます。
そうです、render($content['フィールド名'])で、ラベルを管理画面より非表示に設定するのではなく、テンプレートファイルに、ラベルはラベル、値は値で、直打ちしたいと思いました。

まだ試していませんが、$content['フィールド名']['#title'] でとれるんですね、ありがとうございます。
差し支えなければ、 field_view_field() での取得もご教示いただければうれしいです。

$field = field_view_field('node', $node, 'フィールド名');
print $field['#title'];

としても取れますが、$content を使ったほうが簡単だと思います。

$content のほうが簡単ですね、実際に取得できました。
実のところ$contentからラベルを取得するのを結構調べて、g.d.oでも聞いたのですが、行き当たりませんでした。
とても助かりました、ありがとうございました。

※ コメントの受け付けは終了しました。