Author Topic: Getting shipment/payment costs and set language and currency via method call  (Read 424 times)

anantmaks

  • Beginner
  • *
  • Posts: 43
  • Indian Software Engineer
VirtueMart V3.2.12
I have a small query if someone can suggest -
I am trying to get VirtueMart cart's complete value in my own method, that might be used in APIs or something. So from the basic thing things like getting the cart, I have already done VirtueMartCart::getCart(); that provides me all the selected cart data in an instance. This provides the selected payment/shipment cost in its indexes along with taxes. Also, I can manipulate my whole cart with it.

Now I am trying to get shipment and payment cost of each available method on the cart. I checked that VM uses 'plgVmDisplayListFEShipment' trigger to render each shipment/payment cost data, and this method returns complete HTML. On digging I found different third-party plugins make their own HTML and return to it with "radio" buttons, as a shipment plugin could have multiple services within a single shipment method. Whilst VM standard shipment method calls 'displayListFE' of 'vmPSPlugin' class which is an abstract class. So I can not take it instance within my controller or model as I have not extended it.

So is there any method which can provide all available shipment/payment method costs directly?
Also please suggest what method should be used to set 'cart currency' and 'shop language'.

Thanks in advance!
Anant Garg
Ghaziabad, India

Studio 42

  • Contributing Developer
  • Sr. Member
  • *
  • Posts: 3029
  • Joomla & Virtuemart addon developper
    • Studio 42 - Virtuemart & Joomla extentions
  • VirtueMart Version: 2.6 & 3.0.x.y
you can load 1 plugin only
 JPluginHelper::importPlugin ('vmshipment', 'my_plugin');
 $dispatcher = JDispatcher::getInstance ();
You have to loop each plugin to call the method plgVmDisplayListFEShipment to get each result.

anantmaks

  • Beginner
  • *
  • Posts: 43
  • Indian Software Engineer
you can load 1 plugin only
 JPluginHelper::importPlugin ('vmshipment', 'my_plugin');
 $dispatcher = JDispatcher::getInstance ();
You have to loop each plugin to call the method plgVmDisplayListFEShipment to get each result.

But it will return html, as plgVmDisplayListFEShipment return a well form html including radio buttons.
Also please suggest what method should be used to set 'cart currency' and 'shop language'.
Anant Garg
Ghaziabad, India

Studio 42

  • Contributing Developer
  • Sr. Member
  • *
  • Posts: 3029
  • Joomla & Virtuemart addon developper
    • Studio 42 - Virtuemart & Joomla extentions
  • VirtueMart Version: 2.6 & 3.0.x.y
If you want display same list as the original cart then use same code as original cart view.
Check the file \components\com_virtuemart\views\cart\view.html.php to see how it work and the cart controller

anantmaks

  • Beginner
  • *
  • Posts: 43
  • Indian Software Engineer
ok, I have checked it and it returns HTML only. I assume there is no other way around then as 'plgVmDisplayListFEShipment' is the only method that has cart shipment prices.

Can you please help me suggesting some method from which I can set cart currency and shop language? For language I tried setting it from VmConfig::set('vmlang', 'fr_fr'); Though as I am using it via API call, it returns me only default language data. Also, unable to find any method for setting cart currency.
Anant Garg
Ghaziabad, India

Studio 42

  • Contributing Developer
  • Sr. Member
  • *
  • Posts: 3029
  • Joomla & Virtuemart addon developper
    • Studio 42 - Virtuemart & Joomla extentions
  • VirtueMart Version: 2.6 & 3.0.x.y
For language, you need to set it on load, if you run admin, language cannot be changed, so you need to call it with a front link.
Currrency can be set on setting the currency in the link using virtuemart_currency_id.
For eg : index.php?option=com_yourcomponent&virtuemart_currency_id=1&lang=fr should set the right currency and language when you load the Virtuemart config.

Milbo

  • Virtuemart Projectleader
  • Administrator
  • Super Hero
  • *
  • Posts: 9586
  • VM3.2 Cached and Optimized
    • VM3 Extensions
  • VirtueMart Version: VirtueMart 3 on joomla 3
For language, you need to set it on load, if you run admin, language cannot be changed, so you need to call it with a front link.
Hmm? You can always change the language with vmLanguage::setLanguage('de-DE') for example.

In general, you do a $cart = VirtueMartCart::getCart(); use vmdebug('my cart',$cart); to see the cart object.
Then you do something with the $cart, for example you can set the currency, or the order language. Then you can store it $cart->setCartIntoSession(true,true);
I should fix your bug, please support the VirtueMart project and become a member
______________________________________
Extensions approved by the core team: http://extensions.virtuemart.net/

anantmaks

  • Beginner
  • *
  • Posts: 43
  • Indian Software Engineer
Thanks for joining Max. I have yet applied to try your stated suggestion, I am sure it would work and I will check to implement them first whenever I will be in that part of code again in my API.
Currently, I have used:
Code: [Select]
$app = JFactory::getApplication();
$app->setUserState('virtuemart_currency_id', $virtuemartCurrencyId);
And yes it worked like a charm as it changes cart currency every time. Also, I have tried
Code: [Select]
$app->setUserState('application.lang', 'en');
Though the language changes one time and didn't change on resetting this. I will work with your suggestions as well.

One suggestion, as you can see my first question was to get shipment/payment prices in return for a method call(I am able to get complete HTML only), it would have been great if this could be possible in VirtueMart.
Anant Garg
Ghaziabad, India