2013-03-23 15 views
4

我authorcontroller文件蛋糕PHP沒有設置當從CTP文件調用函數

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值的值。

+3

題外話,但你似乎沒有使用你的CakePHP模型,因爲它們應該被使用。你幾乎不需要*寫你自己的查詢,這將完全跳過框架的功能。請閱讀本章[檢索數據](http://book.cakephp.org/2.0/en/models/retrieving-your-data.html) – thaJeztah 2013-03-23 13:03:10

+0

另外,CakePHP在按照預期使用模型時提供了「分頁」盒子'。本章解釋了CakePHP中的分頁:[分頁](http://book.cakephp.org/2.0/en/core-libraries/components/pagination.html) – thaJeztah 2013-03-23 13:06:12

+1

看來英語正在成爲一種解釋障礙這適當。我在我的評論中包含了一些鏈接,其中包含有關如何在CakePHP中使用模型和分頁的示例。但是,這些僅僅是改善代碼和優化CakePHP的建議。這不是直接問題的答案,但至少爲您的應用程序提供了進一步開發的堅實「起點」 – thaJeztah 2013-03-23 13:30:02

回答

0

我認爲你可以堅持使用一些更好的「CakePHP實踐」。首先採取更面向對象的方法,做

if (!empty($vusers)) { 

其次,如果你有一個模型設置正確,你一定會覺得很更好使用查找();

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

最後如上代替的print_r使用CakePHP的命令

debug(); 
0

我建議在控制器之後if if 你寫:debug($ tuser); 並在新行中寫入:debug($ vusers);我想這句話:$ this-> set('tuser',$ tuser [0] [0] ['count(id)']);是不是設置hte變量$ tuser,因爲我認爲$ tuser [0] [0] [count(id)]不是有效索引。 所以調試功能會告訴你你調試的數組的內容和索引

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[...] ?>