2013-10-30 42 views
1

有人可以告訴我如何改變頁面查詢的order_by嗎?我正在使用的網站使用Hire Experts的網頁插件。我不能爲了我的生活讓它通過displayname asc訂購訂單。更改訂單SocialEngine頁面插件

我對Zend Framework並不太熟悉,但是我已經檢查了Zend_Paginator上的文檔,但沒有運氣。任何幫助,將不勝感激。

這裏是插件代碼

<?php 
/** 
* SocialEngine 
* 
* @category Application_Extensions 
* @package Page 
* @copyright Copyright Hire-Experts LLC 
* @license http://www.hire-experts.com 
* @version $Id: Controller.php 04.11.11 15:50 TeaJay $ 
* @author  Taalay 
*/ 

/** 
* @category Application_Extensions 
* @package Page 
* @copyright Copyright Hire-Experts LLC 
* @license http://www.hire-experts.com 
*/ 

class Page_Widget_BrowsePagesController extends Engine_Content_Widget_Abstract 
{ 
    public function indexAction() 
    { 


    /** 
    * @var $table Page_Model_DbTable_Pages 
    */ 
    $table = Engine_Api::_()->getDbTable('pages', 'page'); 
    $settings = Engine_Api::_()->getApi('settings', 'core'); 

    $fc = Zend_Controller_Front::getInstance(); 
    $request = $fc->getRequest(); 
    $params = $request->getParams(); 

    if (isset($params['sort_type']) && $params['sort_type'] != '') { 
     if (isset($params['sort_value']) && $params['sort_value'] != '') { 
     switch ($params['sort_type']) { 
      case 'tag': 
      $sort_type = 'tag_name'; 
      break; 
      case 'location': 
      $sort_type = 'city'; 
      break; 
      case 'category_set': 
      $sort_type = 'setId'; 
      $dba = Engine_Db_Table::getDefaultAdapter(); 
      $prefix = $table->getTablePrefix(); 
      $params['sort_value'] = $dba->fetchOne("SELECT id FROM {$prefix}page_category_set WHERE `caption` = ? ", array($params['sort_value'])); 

      break; 
      case 'sort': 
      $sort_type = 'sort'; 
      break; 
      case 'abc': 
      $sort_type = 'abc'; 
      break; 
      default: 
      $sort_type = 'category_name';   
      break; 
     } 
     $params[$sort_type] = $params['sort_value']; 
     unset($params['sort_type']); 
     unset($params['sort_value']); 
     } 
     // MY ATTEMPT TO GET THIS TO WORK...NO LUCK 
     else if (isset($params['sort_type']) && $params['sort_type'] != '') { 
     if ($params['sort_type'] == 'abc' && isset($params['sort_value']) && $params['sort_value'] = '') { 
      $dba = Engine_Db_Table::getDefaultAdapter(); 
      $prefix = $table->getTablePrefix();   
      $params['sort_value'] = $db->fetchAll("SELECT * FROM {$prefix}page_pages Order By displayname DESC"); 
     } 
     } 
    } 

    if(isset($params['keyword']) && $params['keyword'] == 'Search') 
     unset($params['keyword']); 
    if(isset($params['profile_type'])){ 
     $params['category'] = $params['profile_type']; 
     unset($params['profile_type']); 
     unset($params['submit']); 
    } 

    $params['view'] = 'map'; 
    $params['search'] = 1; 
    $params['approved'] = 1; 
    $params['page'] = $request->getParam('page', 1); 
    $params['ipp'] = $settings->getSetting('page.browse_count', 5); 
    $params['fields']['profile_type'] = (isset($params['category']) && $params['category']) ? $params['category'] : 0; 
    $this->view->sort = $params['sort'] = (isset($params['sort'])) ? $params['sort'] : 'recent'; 

    if (!$params['fields']['profile_type']) { 
     $params['fields'] = ''; 
    } 
    else { 
     // Process options 
     $tmp = array(); 
     foreach($params as $k => $v) { 
     if(null == $v || '' == $v || (is_array($v) && count(array_filter($v)) == 0)) { 
      continue; 
     } else if(false !== strpos($k, '_field_')) { 
      list($null, $field) = explode('_field_', $k); 
      $tmp['field_' . $field] = $v; 
     } else if(false !== strpos($k, '_alias_')) { 
      list($null, $alias) = explode('_alias_', $k); 
      $tmp[$alias] = $v; 
     } 
     } 
     $params['fields'] = array_merge($params['fields'], $tmp); 
    } 

    $this->view->paginator = $paginator = $table->getPaginator($params); 
    // print_r($paginator); 
    // die(); 

    $isOffersModuleEnabled = Engine_Api::_()->getDbTable('modules', 'core')->isModuleEnabled('offers'); 
    $isPageSortOffersEnabled = $settings->getSetting('page.sort.active.offers', 1); 
    if ($isOffersModuleEnabled && $isPageSortOffersEnabled) { 
     $offersTbl = Engine_Api::_()->_()->getDbTable('offers', 'offers'); 
     $pagesIdsActiveOffers = $offersTbl->getPagesIdsActiveOffers(); 
     $this->view->pagesIdsActiveOffers = $pagesIdsActiveOffers; 
    } 
    else { 
     $this->view->pagesIdsActiveOffers = array(); 
    } 

    $this->view->count = $paginator->getTotalItemCount(); 
    $markers = Engine_Api::_()->getApi('gmap', 'page')->getMarkers($paginator->getCurrentItems()); 
    $bounds = Engine_Api::_()->getApi('gmap', 'page')->getMapBounds($markers); 
    $this->view->field_ids = Zend_Json_Encoder::encode(Engine_Api::_()->page()->getCategorizedFieldIds()); 

    $page_ids = array(); 
    foreach ($paginator as $page) { 
     $page_ids[] = $page->getIdentity(); 
    } 

    $path = $fc->getControllerDirectory('page'); 
    $path = dirname($path) . '/views/scripts'; 
    $this->view->addScriptPath($path); 
    $this->view->page_tags = Engine_Api::_()->page()->getPageTags($page_ids); 
    $this->view->page_likes = Engine_Api::_()->like()->getLikesCount('page', $page_ids); 

    $browse_mode = $settings->getSetting('page.browse.mode', 'list'); 
    $browse_mode = ($request->getParam('view_mode')) ? $request->getParam('view_mode') : $browse_mode; 
    $this->view->view = ($browse_mode) ? $browse_mode : 'list' ; 

    $this->view->gmap_js = Engine_Api::_()->getApi('gmap', 'page')->getMapJS(); 
     $this->view->markers = (!empty($markers)) ? Zend_Json_Encoder::encode($markers) : ''; 
     $this->view->bounds = Zend_Json_Encoder::encode($bounds); 

    if(empty($params['category_name'])) $params['category_name'] = ''; 
    if(empty($params['tag_name'])) $params['tag_name'] = ''; 
    if(empty($params['city'])) $params['city'] = ''; 

    $this->view->params = $params; 
    } 
} 

回答

0

好吧,我不知道這個問題的答案,因爲這是一個插件代碼,但有一件事我已應用的代碼注意到 $dba = Engine_Db_Table::getDefaultAdapter(); $prefix = $table->getTablePrefix();
$params['sort_value'] = $db->fetchAll("SELECT * FROM {$prefix}page_pages Order By displayname DESC");

您已初始化$dba並使用$db。這應該給你一些錯誤,以及如果「如果」條件執行elseif條件將不被考慮。所以它永遠不會進入這部分else if (isset($params['sort_type']) && $params['sort_type'] != '') { if ($params['sort_type'] == 'abc' && isset($params['sort_value']) && $params['sort_value'] = '') { $dba = Engine_Db_Table::getDefaultAdapter(); $prefix = $table->getTablePrefix();
$params['sort_value'] = $db->fetchAll("SELECT * FROM {$prefix}page_pages Order By displayname DESC"); } }