web-dev-qa-db-fra.com

Supprimer / composant / de l'URL générée à partir du module pour un composant personnalisé

J'ai créé un composant personnalisé avec un routage qui semble être généralement correct et je viens de créer un module pour afficher plusieurs éléments du composant sur la page d'accueil.

Je l'ai eu à un point où l'URL est https://www.site.com/component/menu-item/child-menu-item/item-name

Si je montre une liste d'éléments à partir d'un élément de menu, l'URL est https://www.site.com/menu-item/child-menu-item/item-name c'est donc correct.

La chose que j'essaie de faire est de supprimer le/composant/partie de l'URL, mais je ne trouve pas où faire cela. J'ai imprimé la variable de requête dans le fichier de routeur de mon composant, mais il n'a pas ce segment, c'est comme si elle était ajoutée avant d'ajouter mes segments dans mon fichier router.php.

Existe-t-il un moyen simple de supprimer le/composant/partie de l’URL? Veuillez noter que le nom de l'élément sera dynamique car le composant se développe constamment avec de nouvelles pages. Par conséquent, je ne peux pas réécrire de manière statique l'URL.

Merci

1
Alex Mehan

Le composant/nom/nom/partie de l'URL est automatiquement écrit par le routeur Joomla lorsqu'aucun élément de menu correspondant n'est trouvé. Cela est nécessaire pour que l'application puisse acheminer la commande au bon composant.

Donc, dans votre cas, le motif peut être supprimé en créant l'élément de menu. Puisque l'élément de menu est déjà associé à une vue de composant, le routage se déroulera correctement.

3
Nagarjun

Il existe un moyen très simple et pratique de le faire, vous pouvez créer un menu au moment de l’installation dans un fichier script dans la méthode public function postflight($type, $parent).

Utilisez un processus ici comme suit pour créer un type de menu, puis un élément de menu =>

https://webkul.com/blog/menu-item-joomla-rebuild-automatically/

Cela créera un élément de menu de votre vue.

Obtenir des données avant de les utiliser dans le module

$db = JFactory::getDbo();

// Create a new query object.
$query = $db->getQuery(true);

$query->select($db->quoteName(array('id', 'title')));
$query->from($db->quoteName('#__menu'));
$query->where($db->quoteName('link') . "='index.php?option=com_custom&view=custom'");
$query->where($db->quoteName('menutype') . "='custom'");

// Reset the query using our newly populated query object.
$db->setQuery($query);

// Load the results as a list of stdClass objects
$results = $db->loadObjectList();

Maintenant, créez un lien de référencement comme ci-dessous

JRoute::_("index.php?option=com_custom&view=custom&Itemid=".$results[0]->id,false)

Pour l’utiliser à plusieurs endroits, vous pouvez le conserver dans une fonction d’aide pour récupérer un élément de menu.

2
Pratyush