web-dev-qa-db-fra.com

Problème de pagination Joomla avec K2 + sh404SEF + T3 Framework

Il semble y avoir un problème avec la pagination K2 dans Joomla lors de l’utilisation de sh404SEF + T3 Framework!

Les URL des pages ne sont pas générées correctement!

Quand je vais à la page 2, il me faut toujours url mydomain.com/Page-1

Toute suggestion pour résoudre ce problème de pagination dans T3. Je suis sûr que la pagination est générée par T3, car lorsque je change de modèle de frontal, la pagination fonctionne très bien!

Merci!

2
Gev Balyan

C'est en effet un bug T3! Il ne génère pas d'URL correctes pour la pagination de la catégorie K2.

Pour résoudre ce problème, suivez ce guide simple:

  1. Allez à plugins/system/t3/includes/joomla30
  2. Editez le fichier pagination.php
  3. Aller à la ligne 688 et le changer en: $data->start->link = JRoute::_($params . '&' . $this->prefix . 'limitstart=0&limit='.$this->limit);
  4. Aller à la ligne 69 et le changer en: data->previous->link = JRoute::_($params . '&' . $this->prefix . 'limitstart=' . $page.'&limit='.$this->limit);
  5. Aller à la ligne 7 et le changer en: $data->next->link = JRoute::_($params . '&' . $this->prefix . 'limitstart=' . $next.'&limit='.$this->limit);
  6. Aller à la ligne 705 et le changer en: $data->end->link = JRoute::_($params . '&' . $this->prefix . 'limitstart=' . $end.'&limit='.$this->limit);

Dans un mot: ajoutez ce qui suit (&limit=$this->limit) à la fin des lignes susmentionnées (sans crochets)

Après avoir suivi les étapes décrites, n'oubliez pas de supprimer les pages de blog de sh404SEF URL Manager et d'effacer le cache Joomla!

J'espère que cela t'aides!

1
Gev Balyan

Ce n'est pas K2, T3 ou sh404 problème de sef. C'est un bug Joomla. La limite est absente du T3 de l'url et K2 ne remplace que les méthodes JPagination par défaut et la méthode _buildDataObject de la classe JPagination ne contient pas le &limit=$this->limit. sh404sef essaie de le réparer mais T3 ou K2 annule le feu avant sh404 sef

voici le correctif pour 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;
}

et celui-ci est pour 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;
}
1
Dan