web-dev-qa-db-ja.com

Drupal 7のデータベースからカスタムコンテンツタイプのフィールドを取得する

カスタム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 =バージョン。

1
Shafiul

必要なフィールドの名前がわかっている場合は、常に field_get_items を試すことができます。 field_get_items('node', $node, 'field_name');

Node_load()shouldがフィールドを提供しているはずですが、$node->field_nameにあります

また、アティックスのアドバイスは健全です、私はこれをtplで行うこともお勧めしません

2
LSU_JBob

最初に少しアドバイスをします。そのままにしておくか、そのままにしておきます。しかし、tpl.phpファイルでこれを行わないでください。いくつかの前処理フックを使用してみてください。

$ nodeで利用可能なフィールドを確認するには、node_loadの後にprint_r($ node)を追加します。これにより、$ nodeで定義されているすべてが表示されます。

たくさんのテンプレートファイルを作成せずにディスプレイを完全に制御したい場合は、 Display suitecustom_formatters を参照してください。

1
Attiks

Attiksは正しいです!最初にprint_r($ node)またはvar_dump($ node)を使用します。情報が印刷されているページのソースを表示すると、おそらく読み取り可能な形式で表示されます。

データを取得するには、次の形式または同様のもの(必要なものに応じて)を使用します。

$node->field_my_cck_field['und'][0]['value']
1
Nevos

Drupal 7のノードコンテンツタイプのフィールドのリストを取得するには、 field_info_instances関数 を試してください。カスタムのすべてのフィールドを取得する使用例は次のとおりです。ノードコンテンツタイプ:

$my_fields = field_info_instances("node", "my_custom_content_type");
1

この関数を使用して、フィールドを持つコンテンツタイプの配列を取得します

 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;
}
0
nmeegama