0

カスタムモジュールとコンテンツタイプを作成しています。そして、このアイテムを私のページに表示します。私のモジュールは:

function theme_news(){
    global $language;

    $output = '';

    drupal_set_title('News');


    $m_query = db_select("node","n")->extend("PagerDefault")->limit(10);
    $m_query->fields("n",array('nid','title','language'));
    $m_query->condition('status','1',"=");
    $m_query->condition('n.type','news','=');
    //$m_query->condition('n.language',$language->language,'=');
    $m_query->orderBy('n.sticky','desc');

    if(arg(1) == 'latest_news'){
        $m_query->join('field_data_field_etype','fe','n.nid=fe.entity_id');
        $m_query->condition('fe.field_etype_value','ap','=');
        if(arg(2) != ''){
            $m_query->join('field_data_field_myear','fy','n.nid=fy.entity_id');
            $m_query->condition('fy.field_myear_value',arg(2),'=');
        }

    }

    if(arg(1) == 'feature_news'){
        $m_query->join('field_data_field_etype','fe','n.nid=fe.entity_id');
        $m_query->condition('fe.field_etype_value','sp','=');
        if(arg(2) != ''){
            $m_query->join('field_data_field_myear','fy','n.nid=fy.entity_id');
            $m_query->condition('fy.field_myear_value',arg(2),'=');
        }
    }

この関数は2つのサブメニューを作成し、これらのサブメニューの内容を表示します。コードは機能していますが、field_myear値が表示されない理由がわかりません。

どうすれば修正できますか?

4

2 に答える 2

1

ビューを使用したくない場合は、リレーション、順序、フィールド、および必要なすべてを備えたビューを作成し、モジュール内のビューによって生成されたSQLクエリをコピーします。これは機能します。

于 2012-07-22T18:30:14.797 に答える
0

I'd suggest that you solve your task by combining Drupal views and filters, instead of crafting custom SQL queries in your custom module, right away. In most cases this is sufficient, and leads to less headache later.

condition clauses should be view filters.

joins should be view relationships

and your custom fields should be CCK fields indeed.

于 2012-07-22T18:26:33.553 に答える