我正在编写一个快速而肮脏的模块来限制基于购物车中产品的运输方式.例如,如果客户添加食物,我只想要选择隔夜送货方式.一些商业扩展只是矫枉过正,并且拥有我需要的更多功能.
每个产品都有一个名为"Shipping Class"的下拉属性.管理员将能够在后端创建这些Shipping Classes.他们会给它一个名字,并选择允许哪些方法.
在获得运费报价时,我们只会显示基于运输类的允许方法.
我的主要问题是:如何在创建这些运输类时检索管理员可以选择的所有运送方式的列表?
作为次要问题,在Mage_Sales_Model_Quote_Address :: requestShippingRates中对允许的方法进行过滤是否有意义?(当然,我将重写这种方法)
编辑:
感谢@BrianVPS,我能够提出下面的代码.它使用optgroups显示运营商的所有单独方法.多选用效果很好!我不认为它会检查方法是否实际启用了.
public function getAllShippingMethods()
{
$methods = Mage::getSingleton('shipping/config')->getActiveCarriers();
$options = array();
foreach($methods as $_ccode => $_carrier)
{
$_methodOptions = array();
if($_methods = $_carrier->getAllowedMethods())
{
foreach($_methods as $_mcode => $_method)
{
$_code = $_ccode . '_' . $_mcode;
$_methodOptions[] = array('value' => $_code, 'label' => $_method);
}
if(!$_title = Mage::getStoreConfig("carriers/$_ccode/title"))
$_title = $_ccode;
$options[] = array('value' => $_methodOptions, 'label' => $_title);
}
}
return $options;
}
Run Code Online (Sandbox Code Playgroud) 如何在结账时获取选择的运费和结算字段?(我想在侧边栏中显示它们)
我在shipping.phtml中使用它,但当然只是当前的'地址'(我想在methods.phtml和其他页面中使用它)
$this->getAddress()->getFirstname()
Run Code Online (Sandbox Code Playgroud)
所以我认为这样可以解决......
Mage::getSingleton('checkout/session')->getShippingAddress()->getFirstname()
Run Code Online (Sandbox Code Playgroud)
但事实并非如此,任何人都有提示?
另外:这个给了我很多帮助,但我被困了:-S 如何获得用户在结账时选择的送货方式?
这是我用于获取当前会话送货方法代码的代码:
<?PHP echo Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingMethod(); ?>
Run Code Online (Sandbox Code Playgroud)
但是这段代码只给我当前的会话送货方法代码而不是送货标题.
如何获得当前的会话运输方式标题?
提前致谢!