it-swarm.com.de

Benutzerdefinierte Paginierung: $ this in der Funktion "pagination_item_active" befindet sich nicht im Objektkontext?

Joomla 3

Ich habe versucht, die Paginierungsausgabe von Joomla zu ändern. Im Anschluss an Dokumentation erstelle ich eine mytemplate/html/pagination.php - Datei und beginne sie zu ändern. Gemäß dem Dokument kann ich 4 Funktionen in die neue Paginierungsdatei schreiben, ich möchte eigentlich nur _list_render() und _item_active() umschreiben. In libraries/cms/pagination/pagination.php Ab Zeile 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;
        }
    }

Das heißt, ich kann CMS nur dazu bringen, meine Funktion zu verwenden, wenn nur pagination_item_active() und pagination_item_inactive() vorhanden sind. Aber ich habe kein eigenes pagination_item_active(), also kopiere ich den Inhalt von _item_active() in der pagination.php des CMS in meine Override-Datei, so dass es in meiner pagination.php so aussieht

......
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>';
  }

}

Das Problem ist, wenn ich PHP starte, bekomme ich folgende Fehlermeldung:

Verwenden von $ this, wenn es sich nicht im Objektkontext von befindet

/home/w/public_html/templates/rt_photon/html/pagination.php in Zeile 56

Was ich nicht verstehe ist, dass meine pagination.php in die des CMS aufgenommen werden soll, wo es einen "Objektkontext" gibt, warum gibt es dann diese Fehlermeldung? Und wie überwinde ich dieses Dillem?

4
shenkwen

Das libraries/cms/pagination/pagination.php definiert die JPagination-Klasse, und ich weiß nicht genau, wie Überschreibungen in dieser Klasse zusammengeführt werden. Sie können sich jedoch ein Paginierungsbeispiel aus Protostar-Standardvorlage holen, das, wie Sie sehen, keine verwendet Referenz auf das JPagination-Hauptobjekt und verwendet nur das $item in Parametern:

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

Ich bin kein PHP Experte, aber ich werde versuchen ein kleines technisches zu geben Grund, was meines Erachtens das Problem in Ihrem Fall ist.

$this->app->isAdmin() verursacht den Fehler, weil das einzige Objekt, das durch die Funktion geleitet wird, JPagination ist, das $item Variable, nicht $this.

Um das Objekt JApplication zu erhalten, müssen Sie es folgendermaßen manuell definieren:

$app = JFactory::getApplication();

Dann führen Sie Ihre Prüfung wie folgt durch:

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