0

こんにちは、私は現在プロジェクトに取り組んでおり、cakephp で 2 つの検索機能を実行できるかどうか疑問に思っていましたか? たとえば、私はスポーツ ニュースの Web サイトを作成しており、ニュース記事をトップ ストーリー、アンダーストーリー、ヘッドラインとしてグループ化しています。

私がやりたいのは、トップ ストーリーを取得して、これらを顕著なストーリーとして強調表示し、アンダーストーリーをより重要でないストーリーとしてその下に置き、見出しを最も重要度の低いものにすることです。

これは私がこれまでに持っているものです

   function latestnews() {

$articles =  $this->Article->find('all', 
    array('limit' =>3,
    'order' => 
        array('Article.date_created' => 'desc')));
    if(isset($this->params['requested'])) { 
         return $articles; 
         } 
            $this->set('articles', $articles); 

    $articler = $this->Article->find('all', 
        array('Article.type' => 'topstory',
            'Limit' => '1'
    )); 

        $this->set('articles', $articler);

}

ただし、これは機能していないようです。$articles 関数を制限するのではなく、テーブル内のすべてのデータをエコーし​​ます。

ビューで標準の foreach ステートメントを実行してデータをエコーすると、未定義の変数エラーがスローされます。

私が言っていることは可能ですか、それとも別の関数を作成して要素として使用する必要がありますか?

事前にご連絡いただきありがとうございます。

4

3 に答える 3

0

@Arunいいえ、うまくいかなかったようです。このエラーが発生します。Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Article.type' in 'where clause'また、独自の機能を持つ要素に入れようとしたところ、このエラーがスローされました...

注意 (8): 未定義の変数: データ [APP/View/Elements/Articles/topstories.ctp, 5 行目] 警告 (2): foreach() に無効な引数が指定されました [APP/View/Elements/Articles/topstories.ctp, 5 行目] 通知 (8): 未定義のプロパティ: View::$Paginator [CORE/Cake/View/View.php、806 行目] 致命的なエラー: /Applications/ の非オブジェクトに対するメンバ関数 prev() の呼び出しXAMPP/xamppfiles/htdocs/kickoff/app/View/Elements/Articles/topstories.ctp 21 行目

コントローラーコードは次のとおりです...

function topstories() {
    $this->paginate = array(
        'conditions' => array('Article.type' => 'topstory'),
    'limit' => 2,
    'order' => array(
        'date_created' => 'asc'
    )
    );
    $data = $this->paginate('Article');
    $this->set(compact('data'));

}

このエラーは、これを要素に入れずにビューに入れないと、完全に機能するため、混乱を招きます。しかし、それほど完璧ではない要素では、なぜこれが当てはまるのかについてのアイデアはありますか??

于 2012-07-10T10:54:34.617 に答える
0

アソシエーションをそれ自体に動的にバインドできます。このコードを試してください:

function latestnews() {
    $this->Article->bindModel(array('hasMany' => array('TopStory' => array('className' => 'Article',
                                           'foreignKey' => false,
                                           'conditions' => array('Article.type' => 'topstory')
                                           ),
                               'Highlight' .....
                               )));
    $articles =  $this->Article->find('all',
                      array('limit' =>3,
                        'order' =>  array('Article.date_created' => 'desc')));
    if(isset($this->params['requested'])) {
        return $articles;
    }
    $this->set('articles', $articles);

    $articler = $this->Article->find('all',
                     array('Article.type' => 'topstory',
                           'Limit' => '1'
                           ));
    $this->set('articles', $articler);

}

それがあなたのために働くことを願っています。

于 2012-07-10T05:13:48.227 に答える
0

1 つの関数で 2 つの find メソッドを使用する代わりに、単純に異なる関数を作成し、それらを要素として使用することを選択しました...

function premiershiptopstory() {

            $pltopnews = $this->Article->find('all', array(
                    'conditions' => array('Article.league' => 'premiership',
                    'Article.type' => 'topstory')));
                        if(!empty($this->request->params['requested'])) {
                        return $pltopnews;}
                        $this->set('article', $pltopnews);  


            }

ただし、ビューでは、アクションを要求する必要があります。そうしないと、エラーがスローされます。アクションを要求するには、次のコード行を使用するだけです...

 <?php $pltopnews = $this->requestAction('/Articles/premiershiptopstory');

これが他の人に役立つことを願っています!

于 2012-08-08T14:05:49.250 に答える