質問: k2 + sh404sef + t3フレームワークでのjoomlaページネーションの問題 sh404sef + t3フレームワークを使用すると、joomlaのk2ページネーションに問題があるようです!ページのurlが正しく生成されていません!ページ2に移動しても、mydomain.com/page-1のurlが必要です。t3でこのページネーションのバグを修正する方法の提案。フロントエンドテンプレートを変更するとページネーションがうまく機能するため、t3によってページネーションが生成されると確信しています。ありがとうございました!
回答: k2、t3、またはsh404 sefの問題ではありません。 joomlaのバグです。 urlのt3に制限がなく、k2はデフォルトのjpaginationメソッドのみをオーバーライドしており、jpaginationクラスの_builddataobjectメソッドには&limit=$this->limitがありません。 sh404sefはそれを修正しようとしていますが、t3またはk2はsh404 sefの前に火を無効にしますj3x _builddataobjectの修正はこちら/** * create and return the pagination data object. * * @return object pagination data object. * * @since 1.5 */ protected function _builddataobject() { $data = new stdclass; $limitstring = '&limit=' . $this->limit; // sh404 fix // build the additional url parameters string. $params = ''; if (!empty($this->additionalurlparams)) { foreach ($this->additionalurlparams as $key => $value) { $params .= '&' . $key . '=' . $value; } } $data->all = new jpaginationobject(jtext::_('jlib_html_view_all'), $this->prefix); if (!$this->viewall) { $data->all->base = '0'; $data->all->link = jroute::_($params . '&' . $this->prefix . 'limitstart='); } // set the start and previous data objects. $data->start = new jpaginationobject(jtext::_('jlib_html_start'), $this->prefix); $data->previous = new jpaginationobject(jtext::_('jprev'), $this->prefix); if ($this->pagescurrent > 1) { $page = ($this->pagescurrent - 2) * $this->limit; // set the empty for removal from route // @todo remove code: $page = $page == 0 ? '' : $page; $data->start->base = '0'; $data->start->link = jroute::_($params . '&' . $this->prefix . 'limitstart=0'); $data->previous->base = $page; $data->previous->link = jroute::_($params . '&' . $this->prefix . 'limitstart=' . $page. $limitstring); } // set the next and end data objects. $data->next = new jpaginationobject(jtext::_('jnext'), $this->prefix); $data->end = new jpaginationobject(jtext::_('jlib_html_end'), $this->prefix); if ($this->pagescurrent < $this->pagestotal) { $next = $this->pagescurrent * $this->limit; $end = ($this->pagestotal - 1) * $this->limit; $data->next->base = $next; $data->next->link = jroute::_($params . '&' . $this->prefix . 'limitstart=' . $next . $limitstring); $data->end->base = $end; $data->end->link = jroute::_($params . '&' . $this->prefix . 'limitstart=' . $end . $limitstring); } $data->pages = array(); $stop = $this->pagesstop; for ($i = $this->pagesstart; $i <= $stop; $i++) { $offset = ($i - 1) * $this->limit; $data->pages[$i] = new jpaginationobject($i, $this->prefix); if ($i != $this->pagescurrent || $this->viewall) { $data->pages[$i]->base = $offset; $data->pages[$i]->link = jroute::_($params . '&' . $this->prefix . 'limitstart=' . $offset . $limitstring); } else { $data->pages[$i]->active = true; } } return $data; } これは2.5.x用です/** * create and return the pagination data object. * * @return object pagination data object. * * @since 11.1 */ protected function _builddataobject() { // initialise variables. $data = new stdclass; $limitstring = '&limit=' . $this->limit; // sh404 fix // build the additional url parameters string. $params = ''; if (!empty($this->_additionalurlparams)) { foreach ($this->_additionalurlparams as $key => $value) { $params .= '&' . $key . '=' . $value; } } $data->all = new yjsgjpaginationdefaultobject(jtext::_('jlib_html_view_all'), $this->prefix); if (!$this->_viewall) { $data->all->base = '0'; $data->all->link = jroute::_($params . '&' . $this->prefix . 'limitstart='); } // set the start and previous data objects. $data->start = new yjsgjpaginationdefaultobject(jtext::_('jlib_html_start'), $this->prefix); $data->previous = new yjsgjpaginationdefaultobject(jtext::_('jprev'), $this->prefix); if ($this->get('pages.current') > 1) { $page = ($this->get('pages.current') - 2) * $this->limit; // set the empty for removal from route //$page = $page == 0 ? '' : $page; $data->start->base = '0'; $data->start->link = jroute::_($params . '&' . $this->prefix . 'limitstart=0'); $data->previous->base = $page; $data->previous->link = jroute::_($params . '&' . $this->prefix . 'limitstart=' . $page . $limitstring); } // set the next and end data objects. $data->next = new yjsgjpaginationdefaultobject(jtext::_('jnext'), $this->prefix); $data->end = new yjsgjpaginationdefaultobject(jtext::_('jlib_html_end'), $this->prefix); if ($this->get('pages.current') < $this->get('pages.total')) { $next = $this->get('pages.current') * $this->limit; $end = ($this->get('pages.total') - 1) * $this->limit; $data->next->base = $next; $data->next->link = jroute::_($params . '&' . $this->prefix . 'limitstart=' . $next . $limitstring); $data->end->base = $end; $data->end->link = jroute::_($params . '&' . $this->prefix . 'limitstart=' . $end . $limitstring); } $data->pages = array(); $stop = $this->get('pages.stop'); for ($i = $this->get('pages.start'); $i <= $stop; $i++) { $offset = ($i - 1) * $this->limit; // set the empty for removal from route //$offset = $offset == 0 ? '' : $offset; $data->pages[$i] = new yjsgjpaginationdefaultobject($i, $this->prefix); if ($i != $this->get('pages.current') || $this->_viewall) { $data->pages[$i]->base = $offset; $data->pages[$i]->link = jroute::_($params . '&' . $this->prefix . 'limitstart=' . $offset . $limitstring); } } return $data; }