2010-08-05 113 views
1

我是俄语,所以很抱歉,我没有那么好的英语)的Joomla分页问题

我的问题是关于Joomla分页。 在我们的exemple.php任务中,我们只有一个函数display();使分页 - 容易。

但我有一个真正的问题。在我的页面上例如我有搜索表单,我需要分页搜索结果。当我开始搜索某些东西时,我看到了很好的搜索表单,搜索结果,页面页脚上的好分页,但是当我点击2,3 .....页面时,它们打开时没有任何结果 - 仅搜索表单。在我的任务exemple.php我有4个功能下面。请帮助我在所有分页页面上分页并结果。

谢谢!

class SearchTask extends Controller 

{

var $_plugins  = null; 



function SearchTask() 
{ 
    $this->toolbar = MY_TOOLBAR_SEARCH; 
    $this->_plugins = new MYPlugins(); 
} 

function display() 
{ 
    global $Itemid,$MY_LANG, $_MY_CONFIG, $pagination, $total, $limitstart, $limit; 

    $mainframe =& JFactory::getApplication(); 
    $my   =& JFactory::getUser(); 
    myAddPageTitle(JText::_('SEARCH BLOG ENTRY TITLE')); 


    $template = new Template(time() . $my->usertype . $_MY_CONFIG->get('template')); 

    $blogger  = JRequest::getVar('blogger','','POST','string'); 
    $keyword  = JRequest::getVar('keyword','','POST','string'); 
    $catid   = JRequest::getVar('catid','','POST','int'); 
    $from   = JRequest::getVar('from','','POST'); 
    $to   = JRequest::getVar('to','','POST'); 
    $agefrom   = JRequest::getVar('agefrom','','POST','int'); 
    $ageto   = JRequest::getVar('ageto','','POST','int'); 
    $onan   = JRequest::getVar('onan','','POST','int'); 

    $limitstart = JRequest::getVar('limitstart', '0', 'GET'); 
    $limit  = "2"; 
    // Display form for user 
    $searchURL = JRoute::_('index.php?option=com_exemple&task=search&Itemid=' . myGetItemId()); 

    $template->set('searchURL', $searchURL); 
    $template->set('Itemid', myGetItemId()); 
    $results = false; 
    if((!empty($blogger) && isset($blogger)) || (!empty($keyword) && isset($keyword)) || (!empty($catid) && isset($catid)) || (!empty($from) && isset($from)) || (!empty($to) && isset($to)) || (!empty($agefrom) && isset($agefrom)) || (!empty($ageto) && isset($ageto)) || (!empty($onan) && isset($onan))) 
    { 
     // Post action, perform search 
     $results = $this->_search(array('blogger' => $blogger, 'keyword' => $keyword, 'catid' => $catid, 'from' => $from, 'to' => $to, 'agefrom' => $agefrom, 'ageto' => $ageto, 'onan' => $onan)); 
    } 

    if($results>0) 
    { if ((!empty($blogger) && isset($blogger)) && (!empty($keyword) && isset($keyword)) && (!empty($catid) && isset($catid)) && (!empty($from) && isset($from)) && (!empty($to) && isset($to)) && (!empty($agefrom) && isset($agefrom)) && (!empty($ageto) && isset($ageto)) && (!empty($onan) && isset($onan))) 
     {$sorry = "<div style='padding-top:20px;'>No result for <b>$keyword</b> and <b>$blogger</b></div>";} 
     else {$sorry = "<div style='padding-top:20px;'>No result for <b>$blogger</b><b>$keyword</b></div>";} 
    } 
    else{$sorry = "";} 

    echo $limitstart; 
    echo $limit; 
    $template->set('blogger', $blogger); 
    $template->set('keyword', $keyword); 
    $template->set('catid', $catid); 
    $template->set('from', $from); 
    $template->set('to', $to); 
    $template->set('agefrom', $agefrom); 
    $template->set('ageto', $ageto); 
    $template->set('onan', $onan); 
    $template->set('results', $results); 
    $template->set('total', $total); 
    $template->set('sorry', $sorry); 
    $template->set('pagination', $pagination); 
    $content = $template->fetch($this->_getTemplateName('search')); 

    return $content; 
} 

/** 
* _search 
* params: $filter (assoc array) 
**/    
function _search($filter) 
{ 

    JRequest::checkToken() or jexit('Invalid Token'); 
    global $_MY_CONFIG, $keyword, $pagination, $total, $limitstart, $limit; 

    $db   =& JFactory::getDBO(); 
    $limitstart = JRequest::getVar('limitstart', '0', 'GET'); 
    $limit  = "2"; 
    $blogger = isset($filter['blogger']) ? $db->getEscaped($filter['blogger']) : ''; 
    $keyword = isset($filter['keyword']) ? $db->getEscaped($filter['keyword']) : ''; 
    $catid  = isset($filter['catid']) ? $db->getEscaped($filter['catid']) : ''; 
    $from  = isset($filter['from']) ? $db->getEscaped($filter['from']) : ''; 
    $to  = isset($filter['to']) ? $db->getEscaped($filter['to']) : ''; 
    $agefrom  = isset($filter['agefrom']) ? $db->getEscaped($filter['agefrom']) : ''; 
    $ageto  = isset($filter['ageto']) ? $db->getEscaped($filter['ageto']) : ''; 
    $onan  = isset($filter['onan']) ? $db->getEscaped($filter['onan']) : ''; 

    if (!empty($filter['from']) && !preg_match("^([0-9]{4})-([0-9]{2})-([0-9]{2})$^",$from)) 
    { 
     JError::raiseWarning(100, 'Some error'); 
     return; 
    } 
    if (!empty($filter['to']) && !preg_match("^([0-9]{4})-([0-9]{2})-([0-9]{2})$^",$to)) 
    { 
     JError::raiseWarning(100, 'Some error'); 
     return; 
    } 

    $query = (!empty($filter['blogger']) || !empty($filter['keyword']) || !empty($filter['catid']) || !empty($filter['from']) || !empty($filter['to']) || !empty($filter['agefrom']) || !empty($filter['ageto']) || !empty($filter['onan'])) ? 'SELECT SQL_CALC_FOUND_ROWS id,title,introtext,created_by,catid,created,vozvras,anonym FROM #__content WHERE ' : ''; 


    if(!empty($keyword)) 
    { 
    $query  .= " (`title` LIKE '%{$keyword}%' " 
         . "OR `introtext` LIKE '%{$keyword}%')"; 
    } 


    if(!empty($blogger)) 
    { 
     if(!empty($keyword)) 
     { 
      $query .= " AND `created_by`='" . myGetAuthorId($blogger) ."'"; 
     } 
     else 
     { 
      $query .= " `created_by`='" . myGetAuthorId($blogger) ."'"; 
     } 
    } 


    if(!empty($catid) && is_numeric($catid)) 
    { 
     if(!empty($blogger) || !empty($keyword)) 
     { 
     $query .= ' AND `catid`=' .(int) $catid . ' '; 
     } 
     else 
     { 
      $query .= ' `catid`=' .(int) $catid . ' '; 
     } 
    } 


    if(!empty($from)) 
    { 
     $datefrom =& JFactory::getDate($from); 
     if(!empty($blogger) || !empty($keyword) || !empty($catid)) 
     { 
     $query .= " AND `created`>='{$datefrom->toMySQL()}'"; 
     } 
     else 
     { 
      $query .= " `created`>='{$datefrom->toMySQL()}'"; 
     } 
    } 

    if(!empty($to)) 
    { 

     $to .=' 23:59:59'; 
     $dateto =& JFactory::getDate($to); 
     if(!empty($blogger) || !empty($keyword) || !empty($catid) || !empty($from)) 
     { 
     $query .= " AND `created`<='{$dateto->toMySQL()}'"; 
     } 
     else 
     { 
      $query .= " `created`<='{$dateto->toMySQL()}'"; 
     } 
    } 


    if(!empty($agefrom)) 
    { 
     if(!empty($blogger) || !empty($keyword) || !empty($catid) || !empty($from) || !empty($to)) 
     { 
     $query .= ' AND `vozvras`>=' .(int) $agefrom . ' '; 
     } 
     else 
     { 
     $query .= ' `vozvras`>=' .(int) $agefrom . ' '; 
     } 
    } 



    if(!empty($ageto)) 
    { 
     if(!empty($blogger) || !empty($keyword) || !empty($catid) || !empty($from) || !empty($to) || !empty($agefrom)) 
     { 
     $query .= ' AND `vozvras`<=' .(int) $ageto . ' '; 
     } 
     else 
     { 
     $query .= ' `vozvras`<=' .(int) $ageto . ' '; 
     } 
    } 


    if(!empty($onan)) 
    { 
     if(!empty($blogger) || !empty($keyword) || !empty($catid) || !empty($from) || !empty($to) || !empty($agefrom) || !empty($ageto)) 
     { 
     $query .= ' AND `anonym`=' .(int) $onan . ' '; 
     } 
     else 
     { 
     $query .= ' `anonym`=' .(int) $onan . ' '; 
     } 
    } 
    $sections = $_MY_CONFIG->get('managedSections'); 
    $query .= " AND `sectionid` IN ({$sections}) AND `state`='1' ORDER BY `created` DESC LIMIT $limitstart, $limit"; 
    $db->setQuery($query); 
    $results = $db->loadObjectList(); 
    $db->setQuery("SELECT FOUND_ROWS();"); 
     $total  = $db->loadResult(); 
     jimport('joomla.html.pagination'); 
     $pagination = new JPagination($total , $limitstart , $limit); 
     $pagination = $pagination->getPagesLinks(); 

    $this->_format($results); 


    return $results; 
} 

function _format(&$rows) 
{ 
    global $_MY_CONFIG, $keyword; 

    // Load Plugins 
    $this->_plugins->load(); 

    // Format results 
    for($i =0; $i < count($rows); $i++){ 
     $row =& $rows[$i]; 


     $row->text = SearchHelper::prepareSearchContent($row->introtext, 200, $keyword); 
     $row->text = preg_replace("/$keyword/i", "<span class='highlight'>$keyword</span>", $row->text); 
     $row->user  = myGetAuthorName($row->created_by, $_MY_CONFIG->get('useFullName')); 
     $row->user  = $row->user; 
     $row->link  = myGetPermalinkURL($row->id); 
     $row->userlink = JRoute::_('index.php?option=example&blogger=' . myGetAuthorName($row->created_by)); 
     $row->jcategory  = '<a href="' . JRoute::_('index.php?option=example&task=tag&category=' . $row->catid) . '"><b id="bold">' . myGetJoomlaCategoryName($row->catid) . '</b></a>'; 
     $avatar = 'My' . ucfirst($_MY_CONFIG->get('avatar')) . 'Avatar'; 
     $avatar = new $avatar($row->created_by); 

     $row->avatar = $avatar->get(); 

     $date   =& JFactory::getDate($row->created); 
     $date->setOffSet($_MY_CONFIG->get('dateFormat')); 
     $row->date  = $date->toFormat(); 
    } 
} 

}

回答

0

女贞,

你有愚蠢的问题。你原来的查询生成的选择有限的记录数。

SELECT ... FROM ... WHERE ... LIMIT $limitstart, $limit 

然后你使用"SELECT FOUND_ROWS();"这将是$限制,因此在现实中你只有1分页页面。

您的查询需要是这样的:

  1. SELECT ... FROM ... WHERE ... LIMIT $limitstart, $limit
  2. 'SELECT COUNT(*)FROM ... WHERE ...

Uda4i!

0

一个简单的解决方案到Joomla分页,看看在

...templates/protostar/html/pagination.php和复制粘贴到您的

模板HTML文件夹...templates/mytemplate/html/pagination.php

与风格编辑根据自己的喜好