カスタムcontent-type
"slideshow"のカスタムfields
を取得しようとしています。 fieldsをテンプレート(.tpl.php
)ファイルから取得することを選択した理由はいくつかあります(主に、 HTMLのフォーマットや多数のテンプレートファイルの変更はうまくいきませんでした)。
これまでのところ、私が持っているのは個人のnodes
です。
$result = db_query_range('SELECT n.nid
FROM {node} n WHERE n.type = :ntype', 0, 10, array(':ntype' => 'slideshow'));
foreach ($result as $record) {
$node = node_load($record->nid);
// Got $node! What to do now????
}
コードは機能し、$node
にノードがあります。では、個々のカスタムフィールドを取得して、これらのフィールドの生データを処理するにはどうすればよいでしょうか。助けてください。
PS私は試しました PHPデータベースから)でコンテンツタイプを取得します しかし、コードは機能しません...古いDrupal =バージョン。
必要なフィールドの名前がわかっている場合は、常に field_get_items を試すことができます。 field_get_items('node', $node, 'field_name');
Node_load()shouldがフィールドを提供しているはずですが、$node->field_name
にあります
また、アティックスのアドバイスは健全です、私はこれをtplで行うこともお勧めしません
最初に少しアドバイスをします。そのままにしておくか、そのままにしておきます。しかし、tpl.phpファイルでこれを行わないでください。いくつかの前処理フックを使用してみてください。
$ nodeで利用可能なフィールドを確認するには、node_loadの後にprint_r($ node)を追加します。これにより、$ nodeで定義されているすべてが表示されます。
たくさんのテンプレートファイルを作成せずにディスプレイを完全に制御したい場合は、 Display suite と custom_formatters を参照してください。
Attiksは正しいです!最初にprint_r($ node)またはvar_dump($ node)を使用します。情報が印刷されているページのソースを表示すると、おそらく読み取り可能な形式で表示されます。
データを取得するには、次の形式または同様のもの(必要なものに応じて)を使用します。
$node->field_my_cck_field['und'][0]['value']
Drupal 7のノードコンテンツタイプのフィールドのリストを取得するには、 field_info_instances関数 を試してください。カスタムのすべてのフィールドを取得する使用例は次のとおりです。ノードコンテンツタイプ:
$my_fields = field_info_instances("node", "my_custom_content_type");
この関数を使用して、フィールドを持つコンテンツタイプの配列を取得します
function get_content_fields_array() {
$list = node_type_get_names(); //get the list of content types
$contenttypes = array();
$type_count =0;
foreach ($list as $key => $value) {
$field_list = field_info_instances('node', $key); //get field list for content type
$field_count =0;
$field_max = count($field_list);
foreach ($field_list as $field_key => $field_value) {
if($field_count == 0) {
$contenttypes [$type_count]['label'] = $value;
$contenttypes [$type_count]['machine_name'] = $key;
}
$contenttypes [$type_count]['fields'][$file_field_count]['machine_name'] = $field_key;
$contenttypes [$type_count]['fields'][$file_field_count]['field'] = $field_value;
if($field_count == ($field_max -1)) {
$type_count ++;
}
$field_count++;
}
}
return $contenttypes;
}