it-swarm.com.de

Wie kann man auf JHtmlSidebar migrieren, da JSubmenuHelper veraltet ist?

Die einzige Quelle, die ich dazu gefunden habe, stammt aus diesem Beitrag: Ersetzen von JSubmenuHelper durch JHtmlSidebar/Administrative menu in Joomla 4

Das Problem hier ist, dass ich es versucht habe und die Seitenleiste nicht angezeigt wird, wenn ich es mit JHtmlSidebar versuche.

Hier ist der Code:

public function render($config = array())
{
    $config = new KObjectConfigJson($config);
    $config->append(array(
        'toolbar' => null
    ));

    foreach ($config->toolbar->getCommands() as $command)
    {
        if(!empty($command->href)) {
            $command->href = $this->getTemplate()->route($command->href);
        }

        JSubmenuHelper::addEntry($this->getObject('translator')->translate($command->label), $command->href, $command->active);

    }

    return '';
}

In diesem Fall sollte JSubmenuHelper::addEntry Durch die Funktion JHtmlSidebar ersetzt werden.

Ich habe versucht, die Zeile zu ändern

JHtmlSidebar::addEntry($this->getObject('translator')->translate($command->label), $command->href, $command->active);

und zu

JHtmlSidebar::render($this->getObject('translator')->translate($command->label), $command->href, $command->active);

aber mit addEntry ist die Seitenleiste ausgeblendet und mit render() ist kein Inhalt darin.

Was ist falsch an den Versuchen, die ich bereits versucht habe?

1
YoKoGFX

Sie müssen zunächst eine Hilfsklasse erstellen, die ContentHelper wie folgt erweitert:

administrator/Komponenten/com_mycomponent/Helper/MyComponentHelper.php

use Joomla\CMS\Helper\ContentHelper;

class MyComponentHelper extends ContentHelper
{
    protected $config = null;

    public function __construct($config)
    {
        $this->config = new KObjectConfigJson($config);
        $this->config->append(array(
            'toolbar' => null
        ));
    }

    public static function addSubmenu()
    {
        foreach ($this->config->toolbar->getCommands() as $command)
        {
            if (!empty($command->href))
            {
                $command->href = $this->getTemplate()->route($command->href);
            }

            \JHtmlSidebar::addEntry(
                $this->getObject('translator')->translate($command->label),
                $command->href,
                $command->active
            );

        }
    }
}

Dann im folgenden Verzeichnis:

administrator/Komponenten/com_mycomponent/controller.php

Sie möchten die Klasse mit JLoader wie folgt laden:

JLoader::register('MyComponentHelper', JPATH_ADMINISTRATOR . '/components/com_mycomponent/helpers/contact.php');

Sobald Sie fertig sind, müssen Sie die Klasse in Ihrer view.html.php instanziieren:

MyComponentHelper::addSubmenu();

Anmerkungen :

  • Soweit ich weiß, gibt es keine Namespace-Version von \JHtmlSidebar, Daher bin ich mir nicht sicher, ob sie in J4 unterstützt oder ersetzt wird.
  • Ich habe dies nicht getestet, da ich nicht wirklich mit Komponenten arbeite
  • Sie müssen der Klasse die Methode getObject() hinzufügen oder die Referenz $this->getObject() ändern, wenn sie aus einer anderen Klasse stammt.

Hoffe das hilft

1
Lodder