2010-11-23 9 views
1

Wenn meine Komponente unter dem Menü aufgeführt ist und diesem Menü Module zuweisen, wenn der Link z. itemID = 63 als Modul wird nicht angezeigt.Joomla-Komponentenmenü itemID

Gibt es eine Möglichkeit, ItemId automatisch jedem Link hinzuzufügen und innerhalb der Komponente umzuleiten?

Antwort

4

In dem Code, der die Links in der Komponente generiert, müssen Sie die ItemId an die URL anfügen. Sie können die ItemId mit bekommen:

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

So würden Sie diese verwenden in einer solchen Weise (als Beispiel):

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

Diese var existieren wird, wenn der Menüpunkt angeklickt wurde. Es muss dann durch jede Ansicht in der Komponente übertragen werden, wenn die Ansichten hierarchisch angeordnet sind, wobei eine Ansicht mit der nächsten verknüpft ist.

[EDIT]

Sie eine Hilfsfunktion erstellen können, dass oben für das Beispiel automatisch die ItemId fügt jeder Sie zum Beispiel Link erzeugen

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

ja, ich weiß, dass ich fügen Sie es von Hand aber Joomla sollte damit umgehen – miojamo

+1

Es behandelt es aber nur einmal zeigt es Ihre Komponente aus dem ersten Menü klicken, dann ist es Ihnen überlassen, die ItemId der URL hinzuzufügen, wenn Sie zu verschiedenen Ansichten in Ihnen verknüpfen r Komponente. Einige Komponenten benötigen möglicherweise nicht die Verwendung von ItemId, um die Verwendung zu erzwingen, wäre nicht ideal. Es macht es flexibler und das Hinzufügen von Hand ist keine so große Sache. – Martin

0

ich meine Erfahrung dieses Problem in Fällen entsteht, wenn Sie ein Modul haben (ex. Virtuemart Produktliste) irgendwo nicht in dem Abschnitt platziert, wo Sie Ihren Link bringen sollte. Angenommen, Sie haben VM (com_virtuemart) in Ihrem Menü mit Itemid === 731 eingerichtet und Sie fügen ein Produktlistenmodul in die Homepage ein (com_content). Wenn Sie auf das Produkt klicken, das Sie auf die Produktseite bringt, erwarten Sie, dass das Modul den Link so einrichtet, dass Ihr VM-Itemid in den Link ([linkl] & Itemid = 731) aufgenommen wird - aber in den meisten Fällen Es passiert nicht, Ihre Itemid wird nicht zur URL hinzugefügt.

Sie können auch nicht immer (wie in diesem Fall) die korrekte Itemid in Ihren URL-Parametern erwarten. so JRequest::getint('Itemid') Sachen werden nicht wie erwartet funktionieren.

Ich weiß nicht, warum JRoute :: _ method (es könnte leicht mit einem zusätzlichen Parameter "$ searchForItemid") nicht nach Ihrem Itemid in der Menütabelle suchen, WENN SIE NICHT IN DER KOMPONENTE SIND! Das heißt, wenn Sie das gleiche Produktlistenmodul in der VM-Startseite (com_virtuemart) sichtbar machen, werden Sie sehen, dass das Itemid auf Ihren Links erscheint. Aber in den meisten Fällen muss dieses Modul woanders sein.

Dies ist immer noch der Fall! 2.5.

Ich habe keine Lösung für Sie, aber ich kann Ihnen sagen, wie ich das überwinde.

Offensichtlich können Sie das Modul öffnen und die Itemid hardcodieren. Dies wird in Italien "PORCATA" genannt (Übersetzung: Pig Style Coding) und ich rate aus offensichtlichen Gründen davon ab

Was ich mache ist die Sprachüberschreibung (J! 2.5 - Language Manager: Sprachüberschreibungen), eine Überschreibung wie VM_ITEMID === 731 und dann in dem Modul registrieren i ein eigenes Template zu erstellen und den Link von ändern:

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

zu:

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

Ich wiederhole, das ist keine Lösung für das Problem, und dies sollte, IMHO, durch den Kern erledigt werden, aber es funktioniert und auf diese Weise haben Sie die Möglichkeit, die Itemid gebunden an die Komponente zu ändern. hoffe das hilft

0

Wenn Sie Ihre aktive Menüelement-ID in Joomla abrufen müssen, um bestimmte Inhalte nur für diesen Menüeintrag anzuzeigen oder nur um die ID des Menüelements anzuzeigen, fügen Sie den folgenden Code ein, den Sie anzeigen möchten das aktive Menü Item ID:

0

Das ist alt, aber falls jemand es braucht hier ist die Antwort. Rufen Sie Ihre itemid von Parametern:

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

Und es dann drucken, wo Sie es brauchen:

<?php echo $itemid; ?> 

Worst-Case-Szenario, verwenden Sie diesen Hack:

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