web-dev-qa-db-fra.com

Besoin d'aide avec le routage des composants personnalisés et les points de repère

J'essaie d'écrire un routeur de composant personnalisé. J'ai ces structures admin et site uri: http://localhost/administrator/index.php?option=com_{component_name}&... et http://localhost/index.php/{language_code}/{an_alias}/.... Existe-t-il un moyen d’obtenir ces structures uri par programme? La partie admin est ok, mais par la partie site je suis perdu. Je peux ajouter n'importe quel menupoint avec un alias généré, ce qui n'est pas prévisible. Existe-t-il un moyen d’obtenir ces informations à partir du routeur de site joomla ou d’imposer une contrainte au menupoint?

Actuellement, j'ai un 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>

ce qui est suffisant pour ajouter un site menupoint, qui pointe vers le composant. Il serait bien d’ajouter un titre et un alias de menupoint multilingues, il ne serait donc pas possible d’ajouter un point de menup avec un alias différent. En fait, je ne veux pas suivre la structure de MVC par composant, je voudrais router et gérer les requêtes de l'entrée, appelons-le com_example/example.php. Il serait bien d’avoir ce fichier XML modèle dans le fichier com_example/Example/presentation/menupoints/ si cela est possible.

1
inf3rno

Il est possible d'utiliser le routeur, qui trouve le composant pour créer un URI de base pour le composant.

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

Cela renverra /administrator/index.php?option=com_example Par pages d'administration et quelque chose comme /index.php/en/alias Par pages de site si vous avez défini un point de menu pour le composant avec un alias. Un inconvénient est que cette solution ne fonctionne pas correctement si j'accède au site en utilisant l'URI /index.php/en/?option=com_example, Donc sans l'aide d'un point de menu. Il retourne quelque chose comme /index.php/en/component/example/, Ce qui conduit à une page 404. Ce n'est pas un problème réel tant que nous essayons d'accéder aux pages du site avec l'alias contenant l'URI.

Une autre façon d'utiliser le code JRoute::_('index.php?option=com_example'), qui fait exactement la même chose.

Par défaut, il existe un routeur de composants hérité instancié par l'application, mais il n'est pas nécessaire de l'utiliser. J'ai décidé d'écrire un routeur personnalisé à la place et j'ai annoté mes contrôleurs et actions avec les informations nécessaires. Ainsi, l’approche est quelque peu similaire à Java services Web restants.

Je n'ai pas eu le temps de trouver une solution pour déplacer le fichier XML, ce n'est pas une priorité maintenant.

0
inf3rno