コード例 #1
0
 /**
  * @param array $aOptions
  * @return string
  */
 public function getSortLink($aOptions = array())
 {
     $aSearchParams = $this->oInjectedResult->getSearchParams();
     $aSearchParams['order'] = isset($aSearchParams['order']) && $aSearchParams['order'] == 'asc' ? 'desc' : 'asc';
     if (isset($aOptions['order'])) {
         $aSearchParams['order'] = $aOptions['order'];
     }
     $aSearchParams['sort'] = $aOptions['sort'];
     $sPageFragment = '';
     if ($this->getCurrentPage() > 1) {
         switch ($this->getUrlMode()) {
             case self::URL_MODE_QUERY:
                 $sPageFragment = 'page=' . $this->getCurrentPage();
                 break;
             default:
             case self::URL_MODE_PAIRS:
                 $sPageFragment = 'page/' . $this->getCurrentPage();
                 break;
         }
     }
     $sLink = '<a href="' . $this->getUrlPrefix() . $this->getUrlSuffix($aSearchParams) . $sPageFragment . '" ';
     if ($aOptions['title']) {
         $sLink .= ' title="' . $aOptions['title'] . '" ';
     }
     $sLink .= 'class="' . $this->sSortLinkClass . '">' . $aOptions['label'] . '</a>';
     return $sLink;
 }
コード例 #2
0
 /**
  * @param $sQuery
  * @param $aBind
  * @param $aSearchParams
  * @param string $sFields
  * @return Result
  */
 protected function fetchPaginatedResult($sQuery, $aBind, $aSearchParams, $sFields = '*')
 {
     $iRowCount = null;
     if (!strpos($sQuery, 'SQL_CALC_FOUND_ROWS')) {
         $iRowCount = $this->getDb()->fetchOne(sprintf($sQuery, 'count(*) as num'), Db::FETCH_ASSOC, $aBind);
         $iRowCount = isset($iRowCount['num']) ? $iRowCount['num'] : 0;
     }
     if ($aSearchParams['sort']) {
         $sQuery .= ' ORDER BY ' . $aSearchParams['sort'] . ' ' . $aSearchParams['order'];
     }
     if ($aSearchParams['limit']) {
         $iPage = (int) $aSearchParams['page'] < 1 ? 1 : $aSearchParams['page'];
         $sStartRow = $iPage == 1 ? 0 : ($iPage - 1) * $aSearchParams['limit'];
         $sQuery .= ' LIMIT ' . $sStartRow . ', ' . $aSearchParams['limit'];
     }
     if (is_array($sFields)) {
         if (empty($sFields)) {
             $sFields = '`main`.*';
         } else {
             foreach ($sFields as &$sField) {
                 if (is_string($sField) && stripos($sField, '`') === false) {
                     $aSubFields = explode('.', $sField);
                     foreach ($aSubFields as &$sSubField) {
                         $sSubField = '`' . $sSubField . '`';
                     }
                     $sField = implode('.', $aSubFields);
                 }
             }
             $sFields = implode(', ', $sFields);
         }
     }
     $sQuery = sprintf($sQuery, $sFields);
     $aRows = $this->getDb()->query($sQuery, $aBind)->fetchAll();
     if (strpos($sQuery, 'SQL_CALC_FOUND_ROWS')) {
         $iRowCount = $this->getDb()->fetchOne('SELECT FOUND_ROWS() as `found`');
         $iRowCount = isset($iRowCount['found']) ? (int) $iRowCount['found'] : 0;
     }
     foreach ($aRows as &$aRow) {
         foreach ($aRow as $k => &$v) {
             if (is_numeric($k)) {
                 unset($aRow[$k]);
             }
         }
     }
     $r = new Result($aRows, $iRowCount);
     return $r->setSearchParams($aSearchParams);
 }