Page 1 of 1
[SOLVED] Disable shipping options on certain days
Posted: Tue May 22, 2018 5:35 pm
by rhorne
I've added a shipping method called Saturday Delivery, which as the name suggests, allows customers to pay a premium to have goods delivered on a Saturday.
What's the easiest way to only show this shipping method on a Friday? I'm guessing a simple VQMOD to look at the current day and if t's a Friday then show this method. If not, hide it.
Which files do I need to modify to achieve this?
Re: Disable shipping options on certain days
Posted: Tue May 22, 2018 6:07 pm
by rhorne
OK, this was a pretty simple fix in the end and here's what I did.
My postage methods are all weight-based shipping options. Each shipping method is its own Geo Zone so I can determine which regions accept which shipping method.
The file you need to modify is: catalog/model/extension/shipping/weight.php
By default it lists all geo zone by running the following query:
Code: Select all
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "geo_zone ORDER BY name");
My new geo zone has a geo_zone_id of 11 so I needed to modify the query on a Friday so that it queries for all geo zone except mine with id 11.
Code: Select all
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "geo_zone WHERE geo_zone_id <> 11 ORDER BY name");
To check the current day simply use the PHP Date command.
Code: Select all
//The D switch gets the first three letters of the current daye
$current_day = day("D");
if ($current_day == "Fri")
{
}
Below is the final VQMOD entry.
Code: Select all
<!--Only Show Saturday Delivery on a Friday-->
<file name="catalog/model/extension/shipping/weight.php">
<operation info="Only show the Saturday Delivery Option if the current day is a friday.">
<search position="replace"><![CDATA[
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "geo_zone ORDER BY name");
]]></search>
<add><![CDATA[
$current_day = date("D");
if ($current_day == "Fri")
{
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "geo_zone ORDER BY name");
}
else
{
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "geo_zone WHERE geo_zone_id <> 11 ORDER BY name");
}
]]></add>
</operation>
</file>
[/code[
Re: [SOLVED] Disable shipping options on certain days
Posted: Thu Nov 11, 2021 7:25 pm
by goranie
Thank you!