VirtueMart Forum

VirtueMart 2 + 3 + 4 => Plugins: Payment, Shipment and others => Topic started by: iwanna on June 17, 2014, 12:10:19 PM

Title: how to dislay the shipping cost when the total cost is zero ?
Post by: iwanna on June 17, 2014, 12:10:19 PM
Hello,

Could somebody help me with how can I dislay the shipping cost in the shipping method when the total shipping cost is free ?..
I want to display 0,00€, even if it is free.

Title: Re: how to dislay the shipping cost when the total cost is zero ?
Post by: jenkinhill on June 17, 2014, 12:20:30 PM
Set product price to 0.001€
Title: Re: how to dislay the shipping cost when the total cost is zero ?
Post by: iwanna on June 17, 2014, 12:38:54 PM
Quote from: jenkinhill on June 17, 2014, 12:20:30 PM
Set product price to 0.001€

It didn't work  :-\
Title: Re: how to dislay the shipping cost when the total cost is zero ?
Post by: jenkinhill on June 17, 2014, 12:55:42 PM
Works OK for me, VM2.6.6  Make sure you don't have a minimum value price set for your shipping plugin.
Title: Re: how to dislay the shipping cost when the total cost is zero ?
Post by: GJC Web Design on June 17, 2014, 13:03:55 PM
Jenks, assume you mean the Shipment Cost - set to 0.001  ?

just tried in 2.6.6 /std templates - also just shows blank on a blank weight/postcode  plugin except for Shipment Cost = 0.001

did this always work do u know?


In my shipping plugins I over write the  protected function renderPluginName ($plugin) in the actual plugin to provide a free label and 0.00€  etc -

You can try that approach in what ever shipping plugin you r using

or hack the core vmsplug.php to do this

otherwise it is in every template that display shipping costs do some code

if(!$shippingcost){
echo '0.00€
}else{
echo $shippingcost;
}
Title: Re: how to dislay the shipping cost when the total cost is zero ?
Post by: iwanna on June 17, 2014, 13:27:10 PM
well, I did tried what jenkinhill said (same version: VirtueMart 2.6.6) but nothing.  :-\

And I did read your last reply GJC Web Design but I didn't understand much  :-\..

I found in /public_html/administrator/components/com_virtuemart/plugins/vmpsplugin.php

protected function renderPluginName ($plugin) {

$return = '';
$plugin_name = $this->_psType . '_name';
$plugin_desc = $this->_psType . '_desc';
$description = '';
// $params = new JParameter($plugin->$plugin_params);
// $logo = $params->get($this->_psType . '_logos');
$logosFieldName = $this->_psType . '_logos';
$logos = $plugin->$logosFieldName;
if (!empty($logos)) {
$return = $this->displayLogos ($logos) . ' ';
}
if (!empty($plugin->$plugin_desc)) {
$description = '<span class="' . $this->_type . '_description">' . $plugin->$plugin_desc . '</span>';
}
$pluginName = $return . '<span class="' . $this->_type . '_name">' . $plugin->$plugin_name . '</span>' . $description;
return $pluginName;
}


I don't understand what I have to change in the code  :-\
Title: Re: how to dislay the shipping cost when the total cost is zero ?
Post by: jenkinhill on June 17, 2014, 13:39:30 PM
I set the product price to 0.001 using a price override - to show the product price as 0.00 and prevent the "call for pricing" being displayed . That is what I have always done and the standard shipping module works OK with the Minimum order amount left empty, but according to some discussions a long time back, some third party shipping plugins also seem to require a figure of 0.001 for the Minimum order amount.
Title: Re: how to dislay the shipping cost when the total cost is zero ?
Post by: GJC Web Design on June 17, 2014, 13:43:04 PM
but what if the product price is something and the free shipping is just because of the total or under a weight etc?

Or is the wrong end of the stick being accessed?
Title: Re: how to dislay the shipping cost when the total cost is zero ?
Post by: GJC Web Design on June 17, 2014, 13:47:06 PM
@iwanna - as I say - it isn't for the faint hearted - you need to know a good wodge of php and how functions work etc



in your case I think this way would be simpler

Quote
otherwise it is in every template that display shipping costs do some code

if(!$shippingcost){
echo '0.00&euro;
}else{
echo $shippingcost;
}
Title: Re: how to dislay the shipping cost when the total cost is zero ?
Post by: AH on June 17, 2014, 16:22:13 PM
The issue as most of us know is that the code returns absolutely nothing when the cost of shipping is 0

Many people put the product weight to 0 to get Free shipping and that works well except for the pesky lack of any output from the shipping code.

This is not ideal (LMAO)

Set shipping weight to 0

Then get some form of output from shipping (note as GJC said - gettting a value of 0.00 is much harder than it looks as other code is involved)

Here is my solution (FWIW):-

administrator\components\com_virtuemart\plugins\vmpsplugin.php

Get it to spit something out

Existing code returns nothing

protected function getPluginHtml ($plugin, $selectedPlugin, $pluginSalesPrice) {

$pluginmethod_id = $this->_idName;
$pluginName = $this->_psType . '_name';
if ($selectedPlugin == $plugin->$pluginmethod_id) {
$checked = 'checked="checked"';
} else {
$checked = '';
}

if (!class_exists ('CurrencyDisplay')) {
require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php');
}
$currency = CurrencyDisplay::getInstance ();
$costDisplay = "";
if ($pluginSalesPrice) {
$costDisplay = $currency->priceDisplay ($pluginSalesPrice);
$costDisplay = '<span class="' . $this->_type . '_cost"> (' . JText::_ ('COM_VIRTUEMART_PLUGIN_COST_DISPLAY') . $costDisplay . ")</span>";
}
$html = '<input type="radio" name="' . $pluginmethod_id . '" id="' . $this->_psType . '_id_' . $plugin->$pluginmethod_id . '"   value="' . $plugin->$pluginmethod_id . '" ' . $checked . ">\n"
. '<label for="' . $this->_psType . '_id_' . $plugin->$pluginmethod_id . '">' . '<span class="' . $this->_type . '">' . $plugin->$pluginName . $costDisplay . "</span></label>\n";

return $html;
}




This returns 0.00


protected function getPluginHtml ($plugin, $selectedPlugin, $pluginSalesPrice) {

$pluginmethod_id = $this->_idName;
$pluginName = $this->_psType . '_name';
if ($selectedPlugin == $plugin->$pluginmethod_id) {
$checked = 'checked="checked"';
} else {
$checked = '';
}

if (!class_exists ('CurrencyDisplay')) {
require(JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'currencydisplay.php');
}
$currency = CurrencyDisplay::getInstance ();
$costDisplay = "";
if ($pluginSalesPrice) {
$costDisplay = $currency->priceDisplay ($pluginSalesPrice);
$costDisplay = '<span class="' . $this->_type . '_cost"> (' . JText::_ ('COM_VIRTUEMART_PLUGIN_COST_DISPLAY') . $costDisplay . ")</span>";
        } else { //quorvia added this custom element to deal with shipping free over a specified value.
            $costDisplay = '<span class="zero_' . $this->_type . '_cost">0.00</span>';
}
$html = '<input type="radio" name="' . $pluginmethod_id . '" id="' . $this->_psType . '_id_' . $plugin->$pluginmethod_id . '"   value="' . $plugin->$pluginmethod_id . '" ' . $checked . ">\n"
. '<label for="' . $this->_psType . '_id_' . $plugin->$pluginmethod_id . '">' . '<span class="' . $this->_type . '">' . $plugin->$pluginName . $costDisplay . "</span></label>\n";

return $html;
}




Title: Re: how to dislay the shipping cost when the total cost is zero ?
Post by: jenkinhill on June 17, 2014, 17:01:01 PM
I got the wrong end of the stick - I read it as trigger shipping charge for free items.
Title: Re: how to dislay the shipping cost when the total cost is zero ?
Post by: GJC Web Design on June 17, 2014, 17:17:22 PM
Hutsons code will work and to save core hacking you can just paste that function into the shipping plug .php file and it should simply over ride
Title: Re: how to dislay the shipping cost when the total cost is zero ?
Post by: AH on June 17, 2014, 17:22:35 PM
 8)

I core hacked maybe I should have moved it into the plugin (not sure what that means) but I will have a look
Title: Re: how to dislay the shipping cost when the total cost is zero ?
Post by: GJC Web Design on June 17, 2014, 17:54:19 PM
just paste the complete function in the bottom of e.g. plugins/vmshipment/weight_countries/weight_countries.php

should be picked up as an over ride (of couse in this case will get over written when the AIO is updated - but you could just rename everything so it's a unique plugin)
Title: Re: how to dislay the shipping cost when the total cost is zero ?
Post by: AH on June 17, 2014, 20:20:38 PM
GJC

Thanks for information, I am never going to get very proficient in PHP unless I spend time studying

I did move this function into a shipping plugin I developed to use and it works fine.

I want to keep an eye on core code for shipping, so am going to re-apply the "adjustment"  to core code


I had tried to get alatak to include it in core, but apparently returning nothing when a $pluginSalesPrice is 0 was a wanted feature. Go figure

Thanks again for your help.
Title: Re: how to dislay the shipping cost when the total cost is zero ?
Post by: iwanna on June 18, 2014, 08:57:02 AM
Yes that worked Hutson.

I was trying too ways with else but all I was getting it was site not loading!  :P

Thank you all.. Keep up the good work! :)