2013-06-27 104 views
1

我想使用 http://net.tutsplus.com/tutorials/php/how-to-paginate-data-with-php/中的paginator類,但由於某種原因,我無法在我的模板中輸出smarty var中的分頁鏈接。smarty變量不會輸出

我已經試過這樣:

function listadverts($where = null, $orderby = null, $limit = null) {   

     $pages = new Paginator; 
     $pages->items_total = $this->countadverts($where); 
     $pages->mid_range = 9; 
     $pages->paginate(); 

     $row = $this->db->dbh->query('SELECT ad.*, (SELECT img.image FROM '.$this->config->db_prefix.'_images AS img WHERE img.aid = ad.aid LIMIT 1) AS img FROM '.$this->config->db_prefix.'_adverts ad WHERE (ad.approved = 1) '. $where .' ORDER BY '.$orderby.' cr_date DESC '. $pages->limit .''); 

     $smarty = new Smarty(); 

     $smarty->assign('paginate', $pages->display_pages()); 
     return $row; 
    } 

,在我的模板,我有

{$paginate} 

功能

$pages->display_pages() 

回報$this->return;

其中$這個 - >換貨政... RNS包含此HTML

$this->return .= ($i == $this->current_page) ? "<a class=\"current\" href=\"#\">$i</a> ":"<a class=\"paginate\" href=\"$target?page=$i&ipp=$this->items_per_page\">$i</a> "; 

{$ PAGINATE | @var_dump}剛剛返回NULL,但如果我的var_dump($ Smarty的),我可以看到

["paginate"]=> object(Smarty_Variable)#114 (3) { ["value"]=> string(227) "1 2 3 4 All " 

SOLUTION:

return array(0 => $row, 1 => $pages->display_pages()); 

$res = $adverts->listadverts();  
$app->view()->setData('adverts', $res[0]); 
$app->view()->setData('paginate', $res[1]); 
+0

什麼是SQL查詢?您將其分配給$ row,但除了返回它之外,您似乎沒有對其執行任何操作。如果這一段代碼不需要知道$ row,那麼它應該在一個單獨的函數中。另外,如果可以避免使用字符串連接,則不會將字符串連接視爲構建查詢的智能方式,尤其是在不使用轉義函數來確保無法進行SQL注入的情況下。 – GordonM

+0

代碼示例建議$ smarty __should__只存在於您的函數中。試試'global $ smarty;'讓外部也可以訪問,或者在你的函數外面插入數據到$ smarty – Waygood

+0

Garh ...沒有返回$ pages對象...我的問題更新顯示了我的解決方案。 –

回答

1

的代碼示例建議$ smarty應該只存在於你的函數中。嘗試全球$ smarty;也可以在外部訪問或在您的功能之外插入數據到$ smarty

function listadverts($where = null, $orderby = null, $limit = null) { 

    $pages = new Paginator; 
    $pages->items_total = $this->countadverts($where); 
    $pages->mid_range = 9; 
    $pages->paginate(); 

    $row = $this->db->dbh->query('SELECT ad.*, (SELECT img.image FROM '.$this->config->db_prefix.'_images AS img WHERE img.aid = ad.aid LIMIT 1) AS img FROM '.$this->config->db_prefix.'_adverts ad WHERE (ad.approved = 1) '. $where .' ORDER BY '.$orderby.' cr_date DESC '. $pages->limit .''); 

    return $pages->display_pages(); 
} 

$smarty = new Smarty(); 
$smarty->assign('paginate', listadverts(...));