0

我有一些代码位于 Magento 旁边的文件夹中。我正在拉着Mage.php做一些事情。我希望能够在我的代码中获取某种运输报价。我一直在寻找网络,我正在努力寻找任何对它有意义的地方。

请有人可以告诉我实现这一目标的最有效方法吗?

我只有这些信息可用于获取价格:

Product ID eg, 123
Quantity eg, 1020
Country Code eg, GB
Zip code if needed eg, SY12 6AX

我想得到以下信息:

Rate eg, £2.50
Title eg, Royal Mail Special Delivery
ID eg, 6

然后我想用我的代码上的选项填充一个单选列表,以便可以选择它们。

非常感谢

4

2 回答 2

5

好的,我得到它的工作。这是以编程方式从 magento 获取运输报价的最终代码。

该函数将返回特定产品、数量、国家/地区、邮政编码的所有可用运费。该代码不包括免费送货,这可以通过删除来撤消if($_rate->getPrice() > 0) { ...

<?php
require_once("Mage.php");
umask(0);
ini_set('display_errors',true); Mage::setIsDeveloperMode(true);
Mage::app();


function getShippingEstimate($productId,$productQty,$countryId,$postcode ) {

    $quote = Mage::getModel('sales/quote')->setStoreId(Mage::app()->getStore('default')->getId());
    $_product = Mage::getModel('catalog/product')->load($productId);

    $_product->getStockItem()->setUseConfigManageStock(false);
    $_product->getStockItem()->setManageStock(false);

    $quote->addProduct($_product, $productQty);
    $quote->getShippingAddress()->setCountryId($countryId)->setPostcode($postcode); 
    $quote->getShippingAddress()->collectTotals();
    $quote->getShippingAddress()->setCollectShippingRates(true);
    $quote->getShippingAddress()->collectShippingRates();

    $_rates = $quote->getShippingAddress()->getShippingRatesCollection();

    $shippingRates = array();
    foreach ($_rates as $_rate):
            if($_rate->getPrice() > 0) {
                $shippingRates[] =  array("Title" => $_rate->getMethodTitle(), "Price" => $_rate->getPrice());
            }
    endforeach;

    return $shippingRates;

}
echo "<pre>";
// product id, quantity, country, postcode
print_r(getShippingEstimate(1098,100,"GB","SY21 7NQ"));
echo "</pre>";

这可以放入这样的下拉列表中:

$results = getShippingEstimate(1098,100000,"GB","SY21 7NQ");
$count = -1;
echo "<select>";
foreach ($results as $result):
$count++;
?>
<option value="<?=$count?>"><?=$result["Title"]." - £".$result["Price"]?></option>
<?php
endforeach;
echo "</select>"
于 2012-10-23T12:23:38.553 回答
3

对于运输报价,您需要将实际报价作为现有的和基本的地址数据(国家、地区、邮编)填充到帐单和送货地址,然后您可以询问费率:

$quote()->getShippingAddress()->getGroupedAllShippingRates();

请注意,这也取决于运输方式,以及事实上它们是否允许您在已经计算或即将计算报价时给出费率

于 2012-10-18T11:28:54.663 回答