it-swarm.dev

Problema di paginazione di Joomla con K2 + sh404SEF + T3 Framework

Sembra che ci sia un problema con l'impaginazione K2 in Joomla quando si utilizza sh404SEF + T3 Framework!

Gli URL delle pagine non sono generati correttamente!

Quando vado a pagina 2 mi serve ancora url mydomain.com/Page-1

Qualche suggerimento su come correggere questo bug di impaginazione in T3. Sono sicuro che l'impaginazione è generata da T3, perché quando cambio il modello di frontend l'impaginazione funziona bene!

Grazie!

2
Gev Balyan

Questo è davvero un bug T3! Non genera URL corretti per l'impaginazione della categoria K2.

Per risolvere questo problema, segui questa semplice guida:

  1. Vai a plugins/system/t3/Includes/joomla30
  2. Modifica il file pagination.php
  3. Vai alla riga 688 e modificalo in: $data->start->link = JRoute::_($params . '&' . $this->prefix . 'limitstart=0&limit='.$this->limit);
  4. Vai alla riga 69 e modificalo in: data->previous->link = JRoute::_($params . '&' . $this->prefix . 'limitstart=' . $page.'&limit='.$this->limit);
  5. Vai alla riga 7 e modificalo in: $data->next->link = JRoute::_($params . '&' . $this->prefix . 'limitstart=' . $next.'&limit='.$this->limit);
  6. Vai alla riga 705 e modificalo in: $data->end->link = JRoute::_($params . '&' . $this->prefix . 'limitstart=' . $end.'&limit='.$this->limit);

In una sola parola: aggiungi quanto segue (&limit=$this->limit) alla fine delle righe sopra menzionate (senza parentesi)

Dopo aver eseguito i passaggi descritti, non dimenticare di eliminare le pagine del blog da Gestione URL sh404SEF e di cancellare la cache di Joomla!

Spero che sia di aiuto!

1
Gev Balyan

Non è un problema sef K2, T3 o sh404. È un bug di Joomla. manca il limite dal T3 di url e K2 sta solo scavalcando i metodi JPagination predefiniti e il metodo _buildDataObject nella classe JPagination manca &limit=$this->limit. sh404sef sta cercando di risolverlo ma T3 o K2 hanno la precedenza sul fuoco prima di sh404 sef

ecco una correzione per 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;
}

e questo è per 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