/** * @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; }
/** * @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); }