4

私のオーサーコントローラーファイル

class AuthorController extends AppController {
public function author_quotes_list($author,$page="null")
    {
        $perpage=30;
        $this->commen();
        $author_data=$this->Author->query("select author.*,professions.professions_name from author,professions where author.professions_id=professions.id and author.author_name='$author' and author.status=1  ");
        $this->set('author_data',$author_data);

        //paging
        $count=$quotes_data=$this->Author->query("select count(id) from quotes where author_id=".$author_data[0]['author']['id']." and status=1");
        $limit=$this->paging($page,$count,$perpage);
        $quotes_data=$this->Author->query("select id,quotes from quotes where author_id=".$author_data[0]['author']['id']." and status=1 limit $limit,$perpage");
        //print_r($quotes_data);
        $this->set('quotes_data',$quotes_data);

    }
public function ratings($q_id)
    {
        //echo $quotes_id;
        $tuser=$this->Author->query("select count(id) from user where status=1");
        //print_r($tuser);
        if($tuser==NULL)
        {
            $this->set('tuser',0);
        }
        else
        {
            $this->set('tuser',$tuser[0][0]['count(id)']);
        }
        $vusers=$this->Author->query("select * from totalrate where quoteid=$q_id");
        print_r($vusers);

        if($vusers==NULL)   
        {
            $this->set('vuser',0);
            $this->set('trate',0);
        }
        else
        {

            $this->set('vuser',$vusers[0]['totalrate']['totaluser']);
            $this->set('trate',$vusers[0]['totalrate']['totalrate']);
        }
}

私の author_quotes_list.ctp ファイル

 <?php  $this->requestAction(array('controller' => 'Author', 'action' => 'ratings/'.$quotes['quotes']['id']));?>
                    <div class="star_txt">(<?php echo $trate; ?>/5,  <?php echo $vuser; ?> votes) from <?php echo $tuser; ?> Users</div>

オーサーコントローラーの評価関数を呼び出すと、この関数が呼び出されますが、$trate、$vuser、および $tuser の値は設定されません。

4

3 に答える 3

0

if else の後のコントローラーで次のように書くことをお勧めします: debug($tuser); そして新しい行に次のように書きます: debug($vusers);

私はこのステートメントを考えます: $this->set('tuser',$tuser[0][0]['count(id)']); $tuser[0][0][count(id)] が有効なインデックスではないと思うため、変数 $tuser を設定していません。デバッグ機能は、デバッグする配列の内容とインデックスを表示します

于 2013-03-24T12:01:00.747 に答える
0

まず第一に、CakePHP のより良いプラクティスに注意を払います。このページも見てください:http://book.cakephp.org/2.0/en/views.html

このページの途中に、「requestAction() を使用すると、要素を最大限に活用できます。requestAction() 関数は、コントローラー アクションからビュー変数をフェッチし、それらを配列として返します。」と述べています。

そのため、変数は requestAction によって返され、ビューの標準変数のようには設定されません。それらを requestAction から取得し、そこから次のように使用する必要があります。

<?php $vars =  $this->requestAction(array('controller' => 'Author', 'action' => 'ratings/'.$quotes['quotes']['id']));?>
<?php echo $vars[...] ?>
于 2014-01-04T10:03:41.720 に答える
0

より良い「CakePHPプラクティス」を使用することができると思います。最初に、よりOOPのアプローチを取り、

if (!empty($vusers)) {

次に、モデルが正しくセットアップされている場合は、find(); を使用する方がはるかに優れています。

$this->Author->Rate->find('first', array('conditions' => ....)));

最後に、上記のように print_r の代わりに Cakephp コマンドを使用します

debug();
于 2013-09-09T12:57:44.997 に答える