我想知道用户在结帐时选择的送货方式的名称。有谁知道如何检索该信息?
这将在某种程度上得到它,但它被缓存:
Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingDescription();
当我在一步结账时,我回到运输标签并更改运费,它仍然保持旧的运输方式。我需要弄清楚如何获得当前的。
答案 0 :(得分:74)
由Magento构建 app / code / core / Mage / Checkout / Block / Onepage / Shipping / Method / Available.php 等:
app / design / frontend / base / default / template / checkout / onepage / shipping_method / available.phtml 使用此代码确定选择了哪种送货方式:
$this->getAddressShippingMethod()
app / code / core / Mage / Checkout / Block / Onepage / Shipping / Method / Available.php 将该代码扩展为:
return $this->getAddress()->getShippingMethod();
让我们进行一些研究并进一步扩展它:
$this->getQuote()->getShippingAddress()->getShippingMethod();
父块扩展方法 getQuote():
return $this->getCheckout()->getQuote();
更深入:
public function getChechout() {
return Mage::getSingleton('checkout/session');
}
合并所有代码可以为我们提供:
Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingMethod()
它为您提供送货方式代码。给予它,你可以按照自己的意愿操纵它。此数据存储在数据库中,因此当您更改送货方式时,代码也会更改。
如果你曾经创建过自己的送货方式,你就知道它有一个名为 collectRates()的方法。
它填充了一组 shipping / rate_result_method 模型,将其存储在 shipping / rate_result 模型的实例中并返回它(您可以使用<获取每个模型'实例em> Mage :: getModel(&lt; model我已命名为&gt;); )。
但是,请注意:可以包含多个 rate_result_method 实例,而所有这些实例的送货方式代码相同!
因此,为了获得描述,您需要获取其中一个 rate_result_method 实例并检索其 methodTitle 或 carrierTitle 。< / p>
经过一番小小的研究后,我发现了如何检索所有这些费率:
Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingRatesCollection()
这将为您提供所选送货方式的所有费率的集合。您可以使用 getItems()进行操作并获取哈希值。或者您可以使用 getFirstItem()并将其用作模板。
无论如何,我们假设你已经检索了该集合的一些项目并将其存储在 $ rate 变量中:
$rate->getCarrier(); // This will provide you with the carrier code
$rate->getCarrierTitle(); // This will give you the carrier title
$rate->getCode(); // This will give you **current shipping method** code
$rate->getMethod(); // This will provide you with the **shipping method** code
$rate->getMethodTitle(); // This will tell you current shipping method title
$rate->getMethodDescription(); // And this is the description of the current shipping method and **it could be NULL**
对于我可怜的英语和奇怪的思维流,我感到非常抱歉。希望这会帮助你或其他人。谢谢!
答案 1 :(得分:6)
万一你还需要它。您可以通过以下方式获得送货方式:
$order->getShippingMethod();
当然,如何获得$ order取决于上下文。 您也可以通过以下方式获取说明:
$order->getShippingDescription();
答案 2 :(得分:1)
shipping method in magento
$methods = Mage::getSingleton('shipping/config')->getActiveCarriers();
$options = array();
foreach($methods as $_code => $_method)
{
if(!$_title = Mage::getStoreConfig("carriers/$_code/title"))
$_title = $_code;
$options[] = array('value' => $_code, 'label' => $_title . " ($_code)");
}
echo "<xmp>";
print_r($options);
echo "</xmp>";
答案 3 :(得分:0)
如果您希望自己可以访问此信息,则需要在结帐控制器中添加额外步骤以保存报价。
我添加了一些'$ quote-&gt; save();'但是,我无法明确说明哪个条目是执行修复的条目。我也找不到Magento论坛上的链接,但是,我希望我能帮助你了解正在发生的事情。
答案 4 :(得分:0)
您可以覆盖saveShippingMethodAction()
中的Mage_Checkout_OnepageController
函数,或对其进行扩展,并通过插入以下方法将该方法保存到注册表中:
Mage::register('blahShippingMethod', $this->getRequest()->getPost('shipping_method'));
并在您需要时致电:Mage::registry('blahShippingMethod');
不要忘记在不再需要它时取消设置它,因为如果您在设置时尝试重置,则会遇到错误。
Mage::unregister('blahShippingMethod');