Tôi đang viết mô-đun nhanh và bẩn để hạn chế phương thức giao hàng dựa trên các sản phẩm trong giỏ hàng. Ví dụ: nếu khách hàng thêm thực phẩm, tôi chỉ muốn chọn phương thức giao hàng qua đêm. Một số tiện ích mở rộng thương mại chỉ là quá mức cần thiết và có nhiều chức năng hơn mà tôi cần.Lập trình truy xuất danh sách tất cả các phương thức giao hàng
Mỗi sản phẩm sẽ có một thuộc tính kéo xuống được gọi là "Lớp vận chuyển". Quản trị viên sẽ có thể tạo các Lớp vận chuyển này trong chương trình phụ trợ. Họ sẽ đặt tên cho nó và chọn phương pháp nào được cho phép.
Khi đến lúc nhận báo giá giao hàng, chúng tôi sẽ chỉ hiển thị các phương thức được phép dựa trên Lớp vận chuyển.
Câu hỏi chính của tôi là: làm cách nào tôi có thể truy xuất danh sách tất cả các phương thức giao hàng để quản trị viên chọn khi tạo các lớp vận chuyển này?
Và là câu hỏi phụ, bạn có nên lọc các phương thức được phép bên trong Mage_Sales_Model_Quote_Address :: requestShippingRates không? (Tôi sẽ được trọng phương pháp này tất nhiên)
EDIT:
Nhờ @BrianVPS, tôi đã có thể đưa ra các mã dưới đây. Nó hiển thị tất cả các phương pháp riêng lẻ từ các nhà cung cấp dịch vụ bằng cách sử dụng optgroups. Hoạt động tốt với nhiều lựa chọn! Tôi không nghĩ rằng nó sẽ kiểm tra nếu các phương pháp thực sự được kích hoạt mặc dù.
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;
}
Làm rõ lớp vận chuyển so với phương thức giao hàng. –
Một lớp vận chuyển chỉ là một tập hợp các phương thức giao hàng được phép có thể được gán cho một sản phẩm. Ví dụ, tôi có thể tạo một lớp có tên là "Thực phẩm" được liên kết với tất cả các phương thức vận chuyển qua đêm. Tất cả các sản phẩm thực phẩm sẽ được chỉ định lớp vận chuyển "Thực phẩm". Khi đến lúc nhận báo giá vận chuyển, Magento sẽ kiểm tra xem có sản phẩm nào trong giỏ hàng có lớp vận chuyển hay không.Nếu một trong các sản phẩm của chúng tôi là một chiếc bánh, Magento nên ẩn tất cả các phương thức giao hàng không qua đêm. –