VirtueMart Forum

VirtueMart 2 + 3 + 4 => Virtuemart Development and bug reports => Topic started by: johk on February 11, 2013, 12:34:19 PM

Title: Add to cart issue when menu set to Category layout – no itemid in url?
Post by: johk on February 11, 2013, 12:34:19 PM
Hi,
Using VM 2.0.18(a) and Joomla 2.5.8
SEO is disabled

The menu item to VirtueMart » Category Layout. The layout of the products is OK and I have assigned a module to suite.
Clicking on products details brings up the detail page of the products. On the detail page I click add to cart which brings up the modal pop-up window.
If I click 'Continue Shopping' I am brought back to the shop but my modules assigned are gone. I believe it has to do with that "itemid" is not present in the URL.

Are there any fix for this? I have seen this http://forum.virtuemart.net/index.php?topic=108000.msg379354#msg379354 which is a temporary solution but what happens when I update VM?

Thanks,

johk
Title: Re: Add to cart issue when menu set to Category layout – no itemid in url?
Post by: sandstorm on March 17, 2013, 12:08:21 PM
There is a similar problem when using SH404 SEF. That link does not work when SH404 is on.

I asked for help on SH404 support forum and they say the link does not render with item id & needs to be fixed by VM.

This is a big problem for SEF & like johnK reports for showing modules correctly when using the link.

Can this be added to a fix list, or is it already in future versions of VM2?
Title: Re: Add to cart issue when menu set to Category layout – no itemid in url?
Post by: jenkinhill on March 17, 2013, 13:49:14 PM
Itemids are present in the urls of my 2.0.20a test sites in cat view.
Title: Re: Add to cart issue when menu set to Category layout – no itemid in url?
Post by: GJC Web Design on March 21, 2013, 13:29:06 PM
This is a related issue with missing Itemids but in the cart module.

I have solved the missing Itemid on the cart popup with alanski's post here : http://forum.virtuemart.net/index.php?topic=108000.0 (http://forum.virtuemart.net/index.php?topic=108000.0)



I'm building a 4 language site

As I understand it:
1. make a menu to to index.php?option=com_virtuemart&view=virtuemart as an all language/main menu
tried multiple (each language) vm root menu but VM coughed big time on this...
2. make a per language Cart menu (hidden in my case) and link them in the Association dialog to each other

Publish the modules you want by language etc to each of the Cart menus..


If you use the Cart module it just takes what ever Itemid that you happen to be on - which is plainly wrong... there are no paricular modules configured language wise for many possible Itemids or worse no Itemid is passed.
below forces the Itemid for the particular Cart language menu

file modules/mod_virtuemart_cart/mod_virtuemart_cart.php ~ line 49 add (use the nesscesary lang var and Itemid of your cart menus)


$lang2 = JRequest::getVar('lang');
switch ($lang2)
{
case 'fr':
  $itemid= '205';
  break;
case 'de':
  $itemid= '204';
  break;
case 'it':
  $itemid= '206';
  break;
default:
  $itemid= '202';
}


then change

$data->cart_show = '<a style ="float:right;" href="'.JRoute::_("index.php?option=com_virtuemart&view=cart".$taskRoute,$useXHTML,$useSSL).'">'.$linkName.'</a>';

to

$data->cart_show = '<a style ="float:right;" href="'.JRoute::_("index.php?option=com_virtuemart&view=cart&Itemid=".$itemid.$taskRoute,$useXHTML,$useSSL).'">'.$linkName.'</a>';

then you get proper urls like

index.php?option=com_virtuemart&view=cart&Itemid=205&lang=fr
Title: Re: Add to cart issue when menu set to Category layout – no itemid in url?
Post by: GJC Web Design on March 21, 2013, 19:13:04 PM
An up date  -

QuoteI have solved the missing Itemid on the cart popup with alanski's post here : http://forum.virtuemart.net/index.php?topic=108000.0

this didn't actually work with a multi-lingual shop ..  :-\

this did - if it helps anyone
same file and function as above..

public function addJS() {

      //maybe we should use $mainframe->close(); or jexit();instead of die;
      /* Load the cart helper */
      //require_once(JPATH_VM_SITE.DS.'helpers'.DS.'cart.php');
      $this->json = null;
      //added by joomkit
      $menuid = JRequest::getVar('Itemid');
//added by GJC  
  $lang2 = JRequest::getVar('lang');
switch ($lang2)
{
case 'fr':
  $itemid= '205';
  break;
case 'de':
  $itemid= '204';
  break;
case 'it':
  $itemid= '206';
  break;
default:
  $itemid= '202';
}
//added by GJC
      $cart = VirtueMartCart::getCart(false);
      if ($cart) {
         // Get a continue link */
         $virtuemart_category_id = shopFunctionsF::getLastVisitedCategoryId();
         if ($virtuemart_category_id) {
            $categoryLink = '&view=category&virtuemart_category_id=' . $virtuemart_category_id.'&Itemid='.$itemid; //amended by gjc

         } else
         $categoryLink = '';
         $continue_link = JRoute::_('index.php?option=com_virtuemart' . $categoryLink.'&Itemid='.$menuid);
         $virtuemart_product_ids = JRequest::getVar('virtuemart_product_id', array(), 'default', 'array');
         $errorMsg = JText::_('COM_VIRTUEMART_CART_PRODUCT_ADDED');
         if ($cart->add($virtuemart_product_ids, $errorMsg )) {

            $this->json->msg = '<a class="continue" href="' . $continue_link . '" >' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . '</a>';
            $this->json->msg .= '<a class="showcart floatright" href="' . JRoute::_("index.php?option=com_virtuemart&view=cart&Itemid=".$itemid) . '">' . JText::_('COM_VIRTUEMART_CART_SHOW_MODAL') . '</a>'; //amended by gjc
            if ($errorMsg) $this->json->msg .= '<div>'.$errorMsg.'</div>';
            $this->json->stat = '1';
         } else {
            // $this->json->msg = '<p>' . $cart->getError() . '</p>';
            $this->json->msg = '<a class="continue" href="' . $continue_link . '" >' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . '</a>';
            $this->json->msg .= '<div>'.$errorMsg.'</div>';
            $this->json->stat = '2';
         }
      } else {
         $this->json->msg = '<a href="' . JRoute::_('index.php?option=com_virtuemart') . '" >' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . '</a>';
         $this->json->msg .= '<p>' . JText::_('COM_VIRTUEMART_MINICART_ERROR') . '</p>';
         $this->json->stat = '0';
      }
      echo json_encode($this->json);
      jExit();
   }

Title: Re: Add to cart issue when menu set to Category layout – no itemid in url?
Post by: PRO on March 22, 2013, 02:16:51 AM
http://www.kaizenmediaworks.com/virtuemart-template-and-module-control

I create module positions for all vmart pages

http://www.metamodpro.com/metamod/metamod-pro
Metamod is good too
Title: Re: Add to cart issue when menu set to Category layout – no itemid in url?
Post by: herr.proof on March 22, 2013, 15:14:24 PM
Quote from: GJC Web Design on March 21, 2013, 19:13:04 PM
...
this didn't actually work with a multi-lingual shop ..  :-\

this did - if it helps anyone

It saves my day by half (the other part of my problem with multi-lingual shops is a strange 'amp;' garbling destination urls in a few buttons, but I have a thread for this  :-)  )
Thank you and cheers!!

** Edit of 2013, Mar 25 **
Would you kindly expand the subject in "forgot your username" and "forgot your password" links,  too? Thank you in advance!!
note: the 'amp;' error disappears setting  'ON'  <URL SEF>in Global Configuration...
Title: Re: Add to cart issue when menu set to Category layout – no itemid in url?
Post by: GJC Web Design on March 31, 2013, 12:15:14 PM
Basically the same idea in components/com_virtuemart/views/user/tmpl/login.php  around lines 150
Title: Re: Add to cart issue when menu set to Category layout – no itemid in url?
Post by: sandstorm on April 23, 2013, 18:06:20 PM
Quote from: jenkinhill on March 17, 2013, 13:49:14 PM
Itemids are present in the urls of my 2.0.20a test sites in cat view.
I just upgraded from 2.0.18 to 2.0.20b the fix that I applied from here http://forum.virtuemart.net/index.php?topic=108000.0
has been overwritten, and it still doesn't work.

No item ID on continue shopping and other areas of VM2.

I can apply the fix again, but would be nice if the VM devs could just add this into future releases.
Title: Re: Add to cart issue when menu set to Category layout – no itemid in url?
Post by: herr.proof on May 24, 2013, 12:39:37 PM
Unsure if this is the right thing to do,
but instead of starting another thread,
I'm adding this plea of mine here...
So,
I am back :-)

But another issue put out its ugly head...   :o

Whatever search module type I use, it loses the itemid...   :'(

Do you think it to be of help the hack we told before about cart php ?
And if yes, what file would be interested by this new hack ?

Thank you for any help !!   :)
Title: Re: Add to cart issue when menu set to Category layout – no itemid in url?
Post by: Milbo on May 25, 2013, 16:21:29 PM
Do you have sef activated? yes or no?

The method to find the correct item id is ony implemented if you have sef enabled, yes, then you cant see the itemid, but it is there.
Again it does NOT work with sef DISABLED. But it does work with SEF ENABLED. Please consider!
Title: Re: Add to cart issue when menu set to Category layout – no itemid in url?
Post by: herr.proof on May 28, 2013, 16:39:29 PM
Quote from: Milbo on May 25, 2013, 16:21:29 PM
Do you have sef activated? yes or no?

The method to find the correct item id is ony implemented if you have sef enabled, yes, then you cant see the itemid, but it is there.
Again it does NOT work with sef DISABLED. But it does work with SEF ENABLED. Please consider!

I enabled and disabled it, mixed with and without the option 'rewrite SEF URL'.
The French search gives results in French language, as the English one in English language, etc... but all of them builds links that open pages "in the correct language" BUT within the 'all' ambient (mainmenu-all).  ???
Title: Re: Add to cart issue when menu set to Category layout – no itemid in url?
Post by: Milbo on May 28, 2013, 19:44:04 PM
Please try http://forum.virtuemart.net/index.php?topic=115877.0 , check the note for version b (removed &amp: from links)
Title: Re: Add to cart issue when menu set to Category layout – no itemid in url?
Post by: guybr on June 15, 2015, 09:36:16 AM
Quote from: GJC Web Design on March 21, 2013, 19:13:04 PM
An up date  -

QuoteI have solved the missing Itemid on the cart popup with alanski's post here : http://forum.virtuemart.net/index.php?topic=108000.0

this didn't actually work with a multi-lingual shop ..  :-\

this did - if it helps anyone
same file and function as above..

public function addJS() {

      //maybe we should use $mainframe->close(); or jexit();instead of die;
      /* Load the cart helper */
      //require_once(JPATH_VM_SITE.DS.'helpers'.DS.'cart.php');
      $this->json = null;
      //added by joomkit
      $menuid = JRequest::getVar('Itemid');
//added by GJC  
  $lang2 = JRequest::getVar('lang');
switch ($lang2)
{
case 'fr':
  $itemid= '205';
  break;
case 'de':
  $itemid= '204';
  break;
case 'it':
  $itemid= '206';
  break;
default:
  $itemid= '202';
}
//added by GJC
      $cart = VirtueMartCart::getCart(false);
      if ($cart) {
         // Get a continue link */
         $virtuemart_category_id = shopFunctionsF::getLastVisitedCategoryId();
         if ($virtuemart_category_id) {
            $categoryLink = '&view=category&virtuemart_category_id=' . $virtuemart_category_id.'&Itemid='.$itemid; //amended by gjc

         } else
         $categoryLink = '';
         $continue_link = JRoute::_('index.php?option=com_virtuemart' . $categoryLink.'&Itemid='.$menuid);
         $virtuemart_product_ids = JRequest::getVar('virtuemart_product_id', array(), 'default', 'array');
         $errorMsg = JText::_('COM_VIRTUEMART_CART_PRODUCT_ADDED');
         if ($cart->add($virtuemart_product_ids, $errorMsg )) {

            $this->json->msg = '<a class="continue" href="' . $continue_link . '" >' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . '</a>';
            $this->json->msg .= '<a class="showcart floatright" href="' . JRoute::_("index.php?option=com_virtuemart&view=cart&Itemid=".$itemid) . '">' . JText::_('COM_VIRTUEMART_CART_SHOW_MODAL') . '</a>'; //amended by gjc
            if ($errorMsg) $this->json->msg .= '<div>'.$errorMsg.'</div>';
            $this->json->stat = '1';
         } else {
            // $this->json->msg = '<p>' . $cart->getError() . '</p>';
            $this->json->msg = '<a class="continue" href="' . $continue_link . '" >' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . '</a>';
            $this->json->msg .= '<div>'.$errorMsg.'</div>';
            $this->json->stat = '2';
         }
      } else {
         $this->json->msg = '<a href="' . JRoute::_('index.php?option=com_virtuemart') . '" >' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . '</a>';
         $this->json->msg .= '<p>' . JText::_('COM_VIRTUEMART_MINICART_ERROR') . '</p>';
         $this->json->stat = '0';
      }
      echo json_encode($this->json);
      jExit();
   }



I did this, but it made no difference: I created 4 menus, each one referencing the Cart in a different language, and I referenced the menu item ID as the item IDs below; the language codes I pulled from the "Language Manager" tags. I'm using VM 2.6.6 and I'm having the same "itemid" problem on a multilingual site. I had to turn SEF off because it was causing problems.

Can someone point me in the right direction? here's what my file looks like with the patch from above. The line require_once(JPATH_VM_SITE.DS.'helpers'.DS.'cart.php'); was originally commened out (as per above); I also tried it without the comment-out:

$jsVars  = ' jQuery(document).ready(function(){
   jQuery(".vmCartModule").productUpdate();

});' ;

if (!class_exists( 'VmConfig' )) require(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_virtuemart'.DS.'helpers'.DS.'config.php');

VmConfig::loadConfig();
VmConfig::loadJLang('com_virtuemart', true);
VmConfig::loadModJLang('mod_virtuemart_cart', true);

//This is strange we have the whole thing again in controllers/cart.php public function viewJS()
if(!class_exists('VirtueMartCart')) require(JPATH_VM_SITE.DS.'helpers'.DS.'cart.php');
$cart = VirtueMartCart::getCart(false);

$viewName = JRequest::getString('view',0);
if($viewName=='cart'){
   $checkAutomaticPS = true;
} else {
   $checkAutomaticPS = false;
}
$data = $cart->prepareAjaxData($checkAutomaticPS);
if (!class_exists('CurrencyDisplay')) require(JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_virtuemart' . DS . 'helpers' . DS . 'currencydisplay.php');
$currencyDisplay = CurrencyDisplay::getInstance( );
$lang = JFactory::getLanguage();
$extension = 'com_virtuemart';
$lang->load($extension);//  when AJAX it needs to be loaded manually here >> in case you are outside virtuemart !!!
   public function addJS() {
      //maybe we should use $mainframe->close(); or jexit();instead of die;
      /* Load the cart helper */
      require_once(JPATH_VM_SITE.DS.'helpers'.DS.'cart.php');
      $this->json = null;
      //added by joomkit
      $menuid = JRequest::getVar('Itemid');
//added by GJC    
     $lang2 = JRequest::getVar('lang');
switch ($lang2)
{
case 'en-GB':
  $itemid= '1009';
  break;
case 'de-DE':
  $itemid= '1010';
  break;
case 'he-IL':
  $itemid= '1012';
  break;
default:
  $itemid= '1011';
}
//added by GJC   
      $cart = VirtueMartCart::getCart(false);
      if ($cart) {
         // Get a continue link */
         $virtuemart_category_id = shopFunctionsF::getLastVisitedCategoryId();
         if ($virtuemart_category_id) {
            $categoryLink = '&view=category&virtuemart_category_id=' . $virtuemart_category_id.'&Itemid='.$itemid; //amended by gjc
         } else
         $categoryLink = '';
         $continue_link = JRoute::_('index.php?option=com_virtuemart' . $categoryLink.'&Itemid='.$menuid);
         $virtuemart_product_ids = JRequest::getVar('virtuemart_product_id', array(), 'default', 'array');
         $errorMsg = JText::_('COM_VIRTUEMART_CART_PRODUCT_ADDED');
         if ($cart->add($virtuemart_product_ids, $errorMsg )) {
            $this->json->msg = '<a class="continue" href="' . $continue_link . '" >' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . '</a>';
            $this->json->msg .= '<a class="showcart floatright" href="' . JRoute::_("index.php?option=com_virtuemart&view=cart&Itemid=".$itemid) . '">' . JText::_('COM_VIRTUEMART_CART_SHOW_MODAL') . '</a>'; //amended by gjc
            if ($errorMsg) $this->json->msg .= '<div>'.$errorMsg.'</div>';
            $this->json->stat = '1';
         } else {
            // $this->json->msg = '<p>' . $cart->getError() . '</p>';
            $this->json->msg = '<a class="continue" href="' . $continue_link . '" >' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . '</a>';
            $this->json->msg .= '<div>'.$errorMsg.'</div>';
            $this->json->stat = '2';
         }
      } else {
         $this->json->msg = '<a href="' . JRoute::_('index.php?option=com_virtuemart') . '" >' . JText::_('COM_VIRTUEMART_CONTINUE_SHOPPING') . '</a>';
         $this->json->msg .= '<p>' . JText::_('COM_VIRTUEMART_MINICART_ERROR') . '</p>';
         $this->json->stat = '0';
      }
      echo json_encode($this->json);
      jExit();
   }
if ($data->totalProduct>1) $data->totalProductTxt = JText::sprintf('COM_VIRTUEMART_CART_X_PRODUCTS', $data->totalProduct);
else if ($data->totalProduct == 1) $data->totalProductTxt = JText::_('COM_VIRTUEMART_CART_ONE_PRODUCT');
else $data->totalProductTxt = JText::_('COM_VIRTUEMART_EMPTY_CART');
if (false && $data->dataValidated == true) {
   $taskRoute = '&task=confirm';
   $linkName = JText::_('COM_VIRTUEMART_ORDER_CONFIRM_MNU');
} else {
   $taskRoute = '';
   $linkName = JText::_('COM_VIRTUEMART_CART_SHOW');
}
$useSSL = VmConfig::get('useSSL',0);
$useXHTML = true;
$data->cart_show = '<a style ="float:right;" href="'.JRoute::_("index.php?option=com_virtuemart&view=cart".$taskRoute,$useXHTML,$useSSL).'">'.$linkName.'</a>';
$data->billTotal = $lang->_('COM_VIRTUEMART_CART_TOTAL').' : <strong>'. $data->billTotal .'</strong>';

//vmJsApi::jPrice();
vmJsApi::cssSite();
$document = JFactory::getDocument();
//$document->addScriptDeclaration($jsVars);
$moduleclass_sfx = $params->get('moduleclass_sfx', '');
$show_price = (bool)$params->get( 'show_price', 1 ); // Display the Product Price?
$show_product_list = (bool)$params->get( 'show_product_list', 1 ); // Display the Product Price?
/* Laod tmpl default */
require(JModuleHelper::getLayoutPath('mod_virtuemart_cart'));
?>