элемент меню joomla - PullRequest
       3

элемент меню joomla

1 голос
/ 23 ноября 2010

Если мой компонент указан в меню и назначить модули этому меню, если ссылка не содержит, например, itemID = 63, то модуль не отображается.

Есть ли способ автоматического добавления ItemId к каждомуссылка и перенаправление внутри компонента?

Ответы [ 4 ]

4 голосов
/ 23 ноября 2010

В коде, который генерирует ссылки в компоненте, вам нужно добавить ItemId к URL-адресу. Вы можете получить ItemId используя:

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

Таким образом, вы бы использовали это таким образом (в качестве примера):

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

Эта переменная будет существовать после щелчка по пункту меню. Затем он должен проходить через каждое представление в компоненте, если представления расположены иерархически, где одно представление связано с другим.

[EDIT]

Вы можете создать вспомогательную функцию, которая в приведенном выше примере автоматически добавляет ItemId к каждой сгенерированной вами ссылке, например.

function genLink($link) {
    return JRoute::_($link.'&Itemid='.JRequest::getint( 'Itemid' ));
}
0 голосов
/ 21 ноября 2015

Это старый, но в случае, если кому-то это нужно, вот ответ. Получите ваш itemid из параметров:

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

А затем распечатайте его там, где вам нужно:

<?php echo $itemid; ?>

Наихудший сценарий, используйте этот хак:

<?php 
$itemid = X;
echo $itemid;
?>
0 голосов
/ 09 июля 2013

Когда вам нужно получить идентификатор активного элемента меню в Joomla, чтобы отобразить какой-то конкретный контент только для этого элемента меню или просто показать идентификатор элемента меню, вставьте следующий код, где вы хотите отобразить идентификатор активного элемента меню. :

<?php 
$currentMenuId = JSite::getMenu()->getActive()->id ;
echo "Your menu item ID is: $currentMenuId"; 
?>
0 голосов
/ 15 июня 2013

По моему опыту, эта проблема возникает в тех случаях, когда у вас есть модуль (например, список продуктов virtuemart), размещенный где-то НЕ в разделе, куда должна приводиться ваша ссылка.Допустим, в вашем меню настроена ВМ (com_virtuemart) с Itemid === 731, и вы вставляете модуль списка продуктов на домашней странице (com_content).Когда вы нажимаете на продукт, который приводит вас на страницу продукта, вы ожидаете, что модуль настроит ссылку таким образом, что ваш VM Itemid будет включен в ссылку ([linkl] & Itemid = 731) - но в большинстве случаев этоне происходит, ваш Itemid не добавляется в URL.

Кроме того, вы не всегда можете ожидать (как в этом случае) иметь правильный Itemid в ваших параметрах URL.поэтому JRequest::getint( 'Itemid' ) материал не будет работать должным образом.

Я не знаю причину, по которой метод JRoute :: _ (это можно легко сделать с помощью дополнительного параметра "$ searchForItemid") не ищет ваш Itemidв таблице меню КОГДА ТЫ НЕ В КОМПОНЕНТЕ!Это означает, что если вы поместите тот же модуль списка продуктов, который виден на главной странице виртуальной машины (com_virtuemart), вы увидите, что Itemid появляется в ваших ссылках.Но в большинстве случаев этот модуль должен быть где-то еще.

Это все еще имеет место w \ J! 2.5.

У меня нет решения для вас, но я могу сказать вам, как яПреодолеть это.

Очевидно, вы можете открыть модуль и жестко закодировать Itemid.В Италии это называется «PORCATA» (перевод: кодирование в стиле «свинарник»), и я действительно советую против него по очевидным причинам

Что я делаю, так это использую переопределение языка (J! 2.5 - Language Manager: Переопределения языка), зарегистрируйте переопределение, как VM_ITEMID === 731, а затем в модуле я создаю собственный шаблон и изменяю ссылку с:

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"))

Я повторяю,это не решение проблемы, и это, IMHO, должно заботиться ядром, но это работает, и таким образом у вас есть возможность изменить Itemid, привязанный к компоненту.надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...