it-swarm-es.tech

Paginación personalizada: $ this en la función "pagination_item_active" no está en el contexto del objeto?

Joomla 3

Estaba tratando de modificar la salida de paginación de Joomla. Después de esto documentación , creo el archivo mytemplate/html/pagination.php Y comienzo a modificarlo. De acuerdo con el documento, puedo escribir 4 funciones en el nuevo archivo de paginación, en realidad solo quiero reescribir _list_render() y _item_active(). Sin embargo, en libraries/cms/pagination/pagination.php Comenzando desde la línea 327

    $chromePath = JPATH_THEMES . '/' . $this->app->getTemplate() . '/html/pagination.php';

    if (file_exists($chromePath))
    {
        include_once $chromePath;

        if (function_exists('pagination_item_active') && function_exists('pagination_item_inactive'))
        {
            $itemOverride = true;
        }

        if (function_exists('pagination_list_render'))
        {
            $listOverride = true;
        }
    }

Esto significa que solo puedo hacer que CMS use mi función si solo existen pagination_item_active() y pagination_item_inactive(). Pero no tengo mi propio pagination_item_active(), así que copio el contenido de _item_active() en el CMS pagination.php a mi archivo de anulación para que se vea así en mi pagination.php

......
function pagination_item_active(JPaginationObject $item){
  $title = '';
  $class = '';

  if (!is_numeric($item->text))
  {
    JHtml::_('bootstrap.tooltip');
    $title = ' title="' . $item->text . '"';
    $class = 'hasTooltip ';
  }

  if ($this->app->isAdmin())
  {
    return '<a' . $title . ' href="#" onclick="document.adminForm.' . $this->prefix
    . 'limitstart.value=' . ($item->base > 0 ? $item->base : '0') . '; Joomla.submitform();return false;">' . $item->text . '</a>';
  }
  else
  {
    return '<a' . $title . ' href="' . $item->link . '" class="' . $class . 'pagenav">' . $item->text . '</a>';
  }

}

El problema es que, cuando ejecuto PHP, recibo este mensaje de error:

Usando $ this cuando no está en el contexto del objeto en

/home/w/public_html/templates/rt_photon/html/pagination.php en la línea 56

Lo que no entiendo es que se supone que mi pagination.php se incluye en el CMS, donde hay un "contexto de objeto", ¿por qué entonces está dando este mensaje de error? ¿Y cómo supero este dillema?

4
shenkwen

Los libraries/cms/pagination/pagination.php define la clase JPagination y no sé exactamente cómo se fusionan las anulaciones en esta clase, de todos modos, podría obtener un ejemplo de paginación de plantilla predeterminada de la protostar que, como puede ver, no utiliza ninguna referencia al objeto JPagination principal y usa solo el $item en parámetros:

function pagination_item_active(&$item){
    $class = '';

    // Check for "Start" item
    if ($item->text == JText::_('JLIB_HTML_START')){
        $display = '<span class="icon-first"></span>';
    }

    // Check for "Prev" item
    if ($item->text == JText::_('JPREV')){
        $display = '<span class="icon-previous"></span>';
    }

    // Check for "Next" item
    if ($item->text == JText::_('JNEXT')){
        $display = '<span class="icon-next"></span>';
    }

    // Check for "End" item
    if ($item->text == JText::_('JLIB_HTML_END')){
        $display = '<span class="icon-last"></span>';
    }

    // If the display object isn't set already, just render the item with its text
    if (!isset($display)){
        $display = $item->text;
        $class   = ' class="hidden-phone"';
    }

    return '<li' . $class . '><a title="' . $item->text . '" href="' . $item->link . '" class="pagenav">' . $display . '</a></li>';
}
1
Kitase88

No soy un experto PHP pero --- intentaré para dar una pequeña técnica razón por la que creo que el problema está en su caso.

$this->app->isAdmin() está causando el error porque el único objeto que se pasa a través de la función es JPagination, que es el $item variable, no $this.

Por lo tanto, para obtener el objeto JApplication, deberá definirlo manualmente de la siguiente manera:

$app = JFactory::getApplication();

Luego realice su verificación, así:

if ($app->isAdmin())
{
    // Your code
}
1
Lodder