Posted by s-jack on April 12, 2012 at 9:40am
http://groups.drupal.org/node/56708 にて以前質問させていただいたのですが、どうしても調べがつかないし理解できないので、お手上げ状態、再質問させてください。
CCKで作ったカスタムフィールド、myfieldを、コンテンツタイプ mycontentstypeに限り、テーブル内のセルに、フィール名、値みたいに分けてデザインしたいです。
Drupal実践プログラミング徹底入門も読んでいるのですが、
D6では、いろいろな変数がラップされている$contentではなく$nodeを使うべしということで、$nodeオブジェクトの中身を見るべく、node--mycontenttype.tpl.phpに
<?php print_r($node); ?>で中身をしらべたところ、
$node->field_myfield['und'][0]['value']を発見しましたが、値はあるがフィールドラベルの値を持っていない!
そこでググりまくり、D7の場合は、
<?php print render($content['field_myfield']); ?>で表示されるとのこと、なにっ$nodeオブジェクトを使わないの!と思いきや、表示されるのはフィールドラベルと値がセットで格納されているので一緒に表示されてしまいます。
カスタムのフィールドラベルと、フィールドの値を別々に出力するにはどうすれば良いのでしょうか。
またティーザーと通常の単ページノードを表示分けするには、条件分岐しなければならないのでしょうか?
お助けください。

Comments
一応はラベルが表示できた
CCKフィールドのmyfieldは、ラベル名は$content経由、値は$nodeオブジェクト経由で取得できました。
<table><tr>
<td><?php print render($content['field_myfield']['#title']); ?></td>
<td><?php print $node->field_myfield['und'][0]['value']; ?></td>
</tr>
</table>
</pre>
$nodeオブジェクトにフィールドの値や言語情報は持っているが、ラベル名を持っていない以上、このようにするしかありません。
$nodeオブジェクトに全てデータがあれば、済む話なんですが、難しいです。^^
言語を切り替えた場合、値は切り替わりますが、ラベルが切り替わりません。
$contentを作る段階まで深追いしてみます。
$nodeを作る段階ってハックとかフックする仕組みってあるのだろうか、しちゃっていいものだろうか。
どっちがよいのだろう。
entity と fieldがアリスワンダーランド的なところがなんとなく想像できます。
とんちんかんなことをしてるのかな
レスをいただけないようで、とんちかんなところで私は彷徨っているのでしょうか?^^
Doc-JP(drupal.orgのマニュアルを翻訳作業しましょうグループの移転)のモックアップにも、テーブル表記でカスタムフィールドを表示させていたいのですけど、どなたかご教示いただけませんでしょうかm(__)m
$nodeを作る段階ってハックとかフックする仕組みってある
以下いずれかのフックで対応できるはずです:
後者を利用する場合は、フックの実装の際に $node->type で処理するか否かを判断してください。
2つの関数を教えていただき感謝です!!! じっくり読み込ん
2つの関数を教えていただき感謝です!!!
じっくり読み込んでみます、取り急ぎ御礼まで。
こんにちは、s-jackさん 私も以前、 Drupalのフ
こんにちは、s-jackさん
私も以前、
Drupalのフォーム部分のテーブル化だけで納期を一ヶ月ずらすはめになった記憶があります。
その際に学んだベストプラクティスは、
FORMの標準出力にCSSでLABELとDIVに色、枠をつけて、テーブルレイアウトに見せるという方法でした。
これなら、nodetype毎にもレイアウトを変更が可能です。
ただ、最近になりましてフォームのレイアウトをいじくれるモジュールも出て来ているようなので、
まずは以下のモジュールを試されるのがよいかと思われます。# 自分では全ては試しておりません。
Tableform(drupal7のみ)
http://drupal.org/project/tableform
fixed_field(drupal7のみ)
http://drupal.org/project/fixed_field
arrange fields(無理矢理、position:absoluteでフォームの位置を固定化)
http://drupal.org/project/arrange_fields
how to render a form in table layout(drupal6での、カスタムモジュールハック)
http://drupal.stackexchange.com/questions/5374/how-to-render-a-form-in-t...
ご質問ありましたら気軽にくださいっ。
私も以前、 Drupalのフォーム部分のテーブル化だけで納
お仕事をされてる方も苦悩される事例でほっとしました^^
phpの知識が浅いため、おいおいそんなところで悩んでるようじゃ、説明しきれん!と思われてるのかと思ってました。
この場合は、print render($content[])で出力されたところにcssのclass等がフィールド名と値で別々に振られているので、デザイン的に分けちゃえということでしょうか。firebugで覗いてみます。
沢山のモジュールをご紹介いただき感謝です。
できればHackしたくないので(モジュールの開発が止まると意味ないですが)、モジュールを1つずつ試してみます、ありがとうございます。
またフィードバック&質問させていただきますので、よろしくお願いします。
折角教えていただいたのですが
jun784さん、教えていただいたモジュールですが、入力フォームではなくて、出力のほうをいじりたいのです!
(フォームも後日弄りたいのでそのときに活躍しそうです ^^)
CCKでつくったカスタムフィールドを、特定のコンテンツタイプに限り、フィールドラベルと値を分けてテーブルに配置したいです。
このようなことをモジュールでできちゃうのもご存知でしょうか??
s-jackさん、これは申し訳ありません。 てっきり入力フ
s-jackさん、これは申し訳ありません。
てっきり入力フォームの方と勘違いしておりました。
こういったモジュールももちろんあると思いますが、
こちらはテンプレートの領分かと思います。
あまりいい方法とは言えないかもしれませんが、
私は最近、ラベルはテンプレートに直接書いてしまっています。
t()関数で取り回しすれば多言語可も用意ですので、運用上問題なければ
無理にdrupalのcontentやフィールドをhookしなくてもいいかなと思っております。
また、ラベルを出力するのに以下のような手法もあります。
<?phpラベルを出力する方法、その3
$info = field_info_instance('node','field_name','content_type_name');
print $info['label'];
?>
よろしくお願いします。
jun784さん、こんにちは。 なるほど直書き、さらにt関
jun784さん、こんにちは。
なるほど直書き、さらにt関数ですか^^
ナイスアイデアですが、なんか悔しいな。最悪の場合これにしますけど。
方法その3ありがとうございます。
ラベル数多いとかなり大変ですね^^
やっぱ$nodeにラベル組み込むのがいいんでしょうかねえ。
これができるとデザインする方は汎用的に使えますね。
ただdokumoriさんに教えていただいたfook関数がまだ理解できてないです^^;
これか!
http://drupal.org/node/209229
これかな〜。