2010-11-23 8 views
1

Si mon composant est répertorié dans le menu et que vous affectez des modules à ce menu si le lien ne contient pas, par ex. itemID = 63 que le module ne montre pas.joomla component menu itemID

Existe-t-il un moyen d'ajouter automatiquement ItemId à chaque lien et de rediriger à l'intérieur du composant?

Répondre

4

Dans le code qui génère les liens dans le composant, vous devez ajouter l'ItemId à l'URL. Vous pouvez obtenir le ItemId en utilisant:

$itemid = JRequest::getint('Itemid'); 

Donc, vous l'utiliser dans une telle mode (comme exemple):

$link = JRoute::_('index.php?option=com_component&task=list&Itemid='.$itemid); 

Cette var existera une fois l'élément de menu a été cliqué. Il doit ensuite être transporté à travers chaque vue dans le composant si les vues sont placées de manière hiérarchique où une vue est liée à la suivante.

[EDIT]

Vous pouvez créer une fonction d'aide qui pour l'exemple ci-dessus, ajoute automatiquement le ItemId à tous les liens que vous générez par exemple

function genLink($link) { 
    return JRoute::_($link.'&Itemid='.JRequest::getint('Itemid')); 
} 
+0

oui, je sais que je peux Ajoutez-le à la main mais Joomla devrait le gérer – miojamo

+1

Il ne le gère mais seulement une fois qu'il affiche votre composant du 1er menu cliquez, alors il vous appartient d'ajouter l'ItemId à l'URL lorsque vous liez à différentes vues en vous r composant. Certains composants n'ont peut-être pas besoin de l'utilisation de ItemId afin de forcer l'utilisation de celui-ci ne serait pas idéal. Cela le rend plus flexible et l'ajouter à la main n'est pas un gros problème. – Martin

0

Je mon expérience, ce problème se pose dans les cas où vous avez un module (ex. La liste des produits virtuemart) placé quelque part pas dans la section où votre lien doit apporter. Supposons que vous avez configuré VM (com_virtuemart) dans votre menu avec Itemid === 731 et que vous insérez un module de liste de produits dans la page d'accueil (com_content). Lorsque vous cliquez sur le produit qui vous amène à la page du produit, vous attendez que le module configure le lien de sorte que votre Item de machine virtuelle soit inclus dans le lien ([linkl] & Itemid = 731) - mais dans la plupart des cas cela n'arrive pas, votre Itemid n'est pas ajouté à l'URL.

En outre, vous ne pouvez pas toujours attendre (comme dans ce cas) d'avoir le Itemid correct dans vos paramètres url. donc JRequest::getint('Itemid') choses ne fonctionneront pas comme prévu. Je ne connais pas la raison pour laquelle la méthode JRoute :: _ (cela peut être facilement fait avec un paramètre supplémentaire "$ searchForItemid") ne recherche pas votre Itemid dans la table de menu QUAND VOUS N'ÊTES PAS DANS LE COMPOSANT! C'est-à-dire que si vous mettez le même module de liste de produits visible dans la page d'accueil de VM (com_virtuemart), vous verrez que le Itemid apparaît sur vos liens. Mais dans la plupart des cas, ce module doit être ailleurs.

C'est toujours le cas avec J! 2.5.

Je n'ai pas de solution pour vous mais je peux vous dire comment je surmonte cela.

De toute évidence, vous pouvez ouvrir le module et coder en dur le Itemid. Ceci, en Italie, est appelé "PORCATA" (traduction: codage de type cochon) et je déconseille vraiment pour des raisons évidentes

Ce que je fais est j'utilise le remplacement de la langue (J! 2.5 - Langue Responsable: Langue Dérogations), inscrivez-vous comme un remplacement VM_ITEMID === 731 puis dans le module i créer un modèle personnalisé et modifiez le lien de:

JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id...') 

à:

JRoute::_ ('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id...'.'&Itemid='.JText::_("VM_ITEMID")) 

Je répète, ce n'est pas une solution au problème et cela devrait, à mon humble avis, être pris en charge par le noyau, mais cela fonctionne et de cette façon, vous avez la possibilité de changer le Itemid lié au composant. espérons que cela aide

0

Lorsque vous devez obtenir votre ID d'élément de menu actif dans Joomla pour afficher un contenu spécifique pour cet élément de menu ou simplement pour afficher l'ID de l'élément de menu, insérez le code suivant où vous souhaitez afficher le numéro de l'élément de menu actif:

<?php 
$currentMenuId = JSite::getMenu()->getActive()->id ; 
echo "Your menu item ID is: $currentMenuId"; 
?> 
0

Ceci est ancien, mais au cas où quelqu'un en aurait besoin, voici la réponse. Récupérer votre itemid de paramètres:

<!--ITEMID FROM MENU--> 
<? 
$params =JComponentHelper::getParams('com_lobotoradio'); 
$itemid = $params->get('itemid'); 
?> 
<!--END ITEMID FROM MENU--> 

Et puis l'imprimer où que vous soyez:

<?php echo $itemid; ?> 

Dans le pire des cas, utilisez ce hack:

<?php 
$itemid = X; 
echo $itemid; 
?>