Вывод модулей Joomla в Virtuemart

Статус
В этой теме нельзя размещать новые ответы.
В файле /administrator/components/com_virtuemart/classes/ps_session.php примерно в районе 499 строки.

PHP:
// Original Virtuemart Code:
// $Itemid = "&Itemid=".$this->getShopItemid();
// VM-Expert Hack – Start
 
// Strip the parameters from the $text variable and parse to a temporary array
$tmp_text=str_replace('amp;','',substr($text,strpos($text,'?')));
if(substr($tmp_text,0,1)=='?') $tmp_text=substr($tmp_text,1);
parse_str($tmp_text,$ii_arr);
 
// Init the temp. Itemid
$tmp_Itemid='';
 
$db = new ps_DB;
 
// Check if there is a menuitem for a product_id (highest priority)
if ($ii_product_id=intval($ii_arr['product_id'])) {
$db->query( "SELECT id FROM #__menu WHERE link='index.php?option=com_virtuemart' AND params like '%product_id=$ii_product_id%' AND published=1");
if( $db->next_record() ) $tmp_Itemid = $db->f("id");
}
// Check if there is a menuitem for a category_id
$ii_cat_id=intval($ii_arr['category_id']);
if ( $ii_cat_id && $tmp_Itemid=='') {
$db->query( "SELECT id FROM #__menu WHERE link='index.php?option=com_virtuemart' AND params like '%category_id=$ii_cat_id%' AND published=1");
if( $db->next_record() ) $tmp_Itemid = $db->f("id");
}
// Check if there is a menuitem for a flypage
$ii_flypage=$ii_arr['flypage'];
if ($ii_flypage && $tmp_Itemid=='') {
$db->query( "SELECT id FROM #__menu WHERE link='index.php?option=com_virtuemart' AND params like '%flypage=$ii_flypage%' AND published=1");
if( $db->next_record() ) $tmp_Itemid = $db->f("id");
}
// Check if there is a menuitem for a page
$ii_page=$ii_arr['page'];
if ($ii_page && $tmp_Itemid=='') {
$db->query( "SELECT id FROM #__menu WHERE link='index.php?option=com_virtuemart' AND params like '%page=$ii_page%' AND published=1");
if( $db->next_record() ) $tmp_Itemid = $db->f("id");
}
// If we haven't found an Itemid, use the standard VM-Itemid
$Itemid = "&Itemid=" . ($tmp_Itemid ? $tmp_Itemid : $this->getShopItemid());
 
// VM-Expert Hack - End

воткнул этот хак вместо
$Itemid = "&Itemid=".$this->getShopItemid();

все равно итем ID наследуется неправильно ((:)nezn:
 
Для Joomla 1.0 и VM 1.0 в таких случаях я делаю следующее:
создаешь две ссылки на компонент VM в разных меню, например в главном меню и в меню которое нигде не опубликовано. Joomla создаст две главных страницы VM с различными itmeid. При входе на главную страницу с одним itemid ссылки с нее ведут на страницы vm с itemid созданный последним. публикуй модуль на показ в нужном меню.
незнаю наскилько удалось обьяснить, но раньше я делал именно так, а теперь с Joomla 1.5 и VM 1.1 этот фокус больше не катит. Если найдешь решение вопроса для J1.5 напиши пожалуйста.
 
metamod

Вот нашел модуль длв Joomla, который может показывать или скрывать модуль в зависимости от IP, страны, языка, типа пользователя, страницы и т.д. Можно использовать и для данного случая. На офф. сайте есть примеры для virtuemart. Надеюсь поможет решить данную проблему да и не только. Поможет везде где нужно отобразить модуль на конкретных страницах.

ссылка на офф. сайт:
 

Вложения

  • mod_metamod-1-5k.zip
    57,7 KB · Просмотры: 28
  • mod_metamod-1-0g.zip
    54 KB · Просмотры: 6
Решение

Вопрос решаем так:
Тестировал для VM 1.1.2, должно работать и на 1.1.3

в файле administrator/components/com_virtuemart/classes/ps_session.php находим строки

if( !defined( '_VM_IS_BACKEND' )) {
$Itemid = "&Itemid=".$this->getShopItemid();

записываем любой номер для itemid например 75, будет выглядеть так

if( !defined( '_VM_IS_BACKEND' )) {
$Itemid = "&Itemid=75".$this->getShopItemid();

теперь для главной страницы virtuemart у вас один itemid для остальных другой

Если пользуетесь модулями отображения категорий VM от сторонних производителей (например s5 vm accordion menu), тогда не забудьте поменять itemid и в файле модуля.

Для VM 1.0 есть другой метод, насколько я помню, менять нужно в файле shop_index.php.

Успехов!
 
Сам столкнулся недавно с проблемой айди. Вот работающее решение с форума виртумарта. У меня все работает.

Fixed the problem in a different way - the problem file is the right one - in administrator/components/com_virtuemart/classes/ps_session.php change:

function getShopItemid() {

if( empty( $_REQUEST['shopItemid'] )) {
$db = new ps_DB;
$db->query( "SELECT id FROM #__menu WHERE link='index.php?option=com_virtuemart' AND published=1");
if( $db->next_record() ) {
$_REQUEST['shopItemid'] = $db->f("id");
}

to

function getShopItemid() {

if( empty( $_REQUEST['shopItemid'] )) {
$db = new ps_DB;
$db->query( "SELECT id FROM #__menu WHERE link='index.php?option=com_virtuemart' AND published=1");
if( $db->next_record() ) {
$_REQUEST['shopItemid'] = $_GET['Itemid'];
}

My best Guess and strongest suspicion is that this query:

$db->query( "SELECT id FROM #__menu WHERE link='index.php?option=com_virtuemart' AND published=1");

produces the wrong result, I did not have much time to trace it all back to the reason but bypassed the issue with obtaining the correct item ID via a GET and nicely enough it even seems to work flawlessly with SEO URLz as well Smiley (but thats what we wanted to begin with, rite? Cheesy)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху