web-dev-qa-db-ja.com

データベースクエリをtemplate.phpファイル内に書き込むことはできますか?

Template.phpファイルの次の関数内にクエリを書いています

        function theme_name_process_views_view_field(&$vars) { 
 if ($vars['view']->name == 'view_name') { 
// query is written here
      foreach( $vars['view']->result as $key => $value ) {
          $nid = $value->nid;
          $query = db_select('abc_in', 'abc')
            ->fields('abc', array('study_abc'))
            ->condition('abc_nid', $nid , '=');
          $result =   $query->execute()->fetchField();
        $vars['view']->result[$key]->field_field_abc_in[0]['rendered']['#markup'] = "<div class='abc_code'>" .  $result . "</div>" ;

    } }

Template.phpファイル内にdb_queryを書き込んでも大丈夫ですか?カスタムテーブルからデータを取得して、ビューのフィールドに値を挿入していますか?

1
harshal

あなたは間違いなくそれを行うことができますが、あなたは本当にそうすべきではありません。

テーマレイヤーは、データを提示するためのものです。実際の機能とデータ自体はモジュールから取得する必要があります。

あなたが何をしようとしているのかを述べたら、代わりにそれがどこに行くべきかについていくつかの詳細情報を与えることができます

編集

コード例に基づいて、カスタムデータテーブルを処理する場合は、データベーステーブルとフィールドについてビューに知らせるために hook_views_data() を使用するのが最善です。次に、UIを介して新しいフィールドを使用します。

hook_views_post_execute() のように、ビューフックの1つでカスタムモジュールで現在使用しているのと基本的に同じソリューションを使用できますが、それほど多くのトラブルに行きたくない場合は、現在行っているのと同じような方法で結果をループできます。

ただし、ここでは通常、マークアップを処理しません(abc_code divなど)。ここで実際にデータを変更し、テーマのマークアップを変更しているだけです。フィールドには既にスタイルを設定できるクラスがすでにあるはずなので、そのクラスを追加する必要はおそらくないはずです。

3
rooby

Dbクエリをテーマに追加することはお勧めできません。常にロジックの動作をプレゼンテーションレイヤーから分離する必要があります。

さらに、常にdrupal物事を行うための標準に従う必要があります

1
4life

「テーマ関数」や「.tplファイル」にクエリを記述しないでください。

要素をレンダリングするためにデータが必要な場合は、前処理関数にクエリを記述して、この方法で「テーマ関数」または「.tplファイル」でデータを利用できるようにすることを検討できます。

0
Enxebre