it-swarm.com.de

Benötigen Sie Hilfe durch benutzerdefiniertes Komponentenrouting und Menupunkte

Ich versuche, einen benutzerdefinierten Komponenten-Router zu schreiben. Ich habe diese Admin- und Site-Uri-Strukturen: http://localhost/administrator/index.php?option=com_{component_name}&... und http://localhost/index.php/{language_code}/{an_alias}/.... Gibt es eine Möglichkeit, diese Uri-Strukturen programmatisch zu erhalten? Der Admin-Teil ist in Ordnung, aber durch den Site-Teil bin ich verloren. Ich kann jeden Menupunkt mit einem generierten Alias ​​hinzufügen, der nicht vorhersehbar ist. Gibt es eine Möglichkeit, diese Informationen vom Joomla-Site-Router abzurufen oder eine Einschränkung für den Menüpunkt zu erzwingen?

Zur Zeit habe ich ein com_example/views/example/tmpl/default.xml:

<?xml version="1.0" encoding="utf-8"?>
<metadata>
    <layout title="COM_CANTEEN_TITLE">
        <message><![CDATA[COM_CANTEEN_DESCRIPTION]]></message>
    </layout>
</metadata>

dies reicht aus, um einen Site-Menüpunkt hinzuzufügen, der auf die Komponente verweist. Es wäre schön, mehrsprachige Menupunkt-Titel und -Aliasnamen hinzuzufügen, daher wäre es nicht möglich, einen Menupunkt mit einem anderen Aliasnamen hinzuzufügen. Eigentlich möchte ich der MVC-Struktur nicht durch die Komponente folgen, ich möchte Anfragen aus dem Eintrag weiterleiten und bearbeiten, nennen wir es com_example/example.php. Es wäre schön, wenn diese XML-Vorlagendatei im com_example/Example/presentation/menupoints/ wenn das möglich ist.

1
inf3rno

Es ist möglich, den Router zu verwenden, der die Komponente findet, um eine Basis-URI für die Komponente zu erstellen.

$application = JFactory::getApplication();
$router = $application->getRouter();
$componentUri = $router->build('index.php?option=com_example');

Dies gibt /administrator/index.php?option=com_example Von Admin-Seiten und so etwas wie /index.php/en/alias Von Site-Seiten zurück, wenn Sie einen Menüpunkt für die Komponente mit einem Alias ​​definiert haben. Ein Nachteil, dass diese Lösung nicht richtig funktioniert, wenn ich mit dem URI /index.php/en/?option=com_example Auf die Site zugreife, also ohne einen Menüpunkt zu verwenden. Es gibt so etwas wie /index.php/en/component/example/ Zurück, was zu einer 404-Seite führt. Dies ist kein wirkliches Problem, solange wir versuchen, auf die Websiteseiten mit dem Alias ​​zuzugreifen, der den URI enthält.

Eine weitere alternative Möglichkeit, den Code JRoute::_('index.php?option=com_example') zu verwenden, der genau dasselbe tut.

Standardmäßig gibt es einen Legacy-Komponenten-Router, der von der App instanziiert wird, es ist jedoch nicht erforderlich, ihn zu verwenden. Ich habe mich entschieden, stattdessen einen benutzerdefinierten Router zu schreiben, und meine Controller und Aktionen mit den erforderlichen Informationen versehen. Der Ansatz ist also ähnlich wie bei Java rest webservices.

Ich hatte keine Zeit, eine Lösung für das Verschieben der XML-Datei zu finden, sie hat jetzt keine Priorität.

0
inf3rno