2011-04-14 3 views
0

Я работаю над магазином Magento для клиента. Они используют dropshippers, поэтому один почтовый индекс не помогает нам. У нас есть он для наиболее распространенного почтового индекса, с которого клиент отправляется, поэтому во многих случаях это нормально.Несколько почтовых индексов происхождения в Magento Checkout

Однако в некоторых случаях существует другой почтовый индекс происхождения, который необходимо использовать. В более редких случаях у нас будет несколько исходных почтовых индексов. Когда есть zip, который отличается от основного, мы сохранили это в атрибуте под названием «origin zip» (объявление, да?)

Где я должен искать изменения? Мы используем только метод доставки ИБП, и то, что я хочу сделать, - это, прежде чем вычислять доставку, захватить любые происшествия, которые могут быть в корзине (я думаю, у нас есть эта часть), но затем, в зависимости от результаты, мне может потребоваться повторить расчет доставки и добавить значения вместе - то есть в случае, если они заказывают один продукт с исходным почтовым индексом, а другой продукт без начального почтового индекса, он должен будет вычислить первый, затем второй, а затем добавить их вместе.

Если кто-то может указать нам в правильном направлении, какие файлы или классы php нам нужно будет изменить, я был бы очень признателен.

ответ

1

Прежде всего, вам нужно добавить свой собственный атрибут в список атрибутов, которые будут использоваться в корзине покупок. Выполните следующий ответ на StackOverflow: How to add custom uploaded images to cart in magento 1.4.1.1?

Затем вам нужно создать метод пользовательской доставки, может быть продлен от вашего одного. Он должен проходить через предметы, которые он получает от запроса на отправку, и проверять наличие различного происхождения почтового индекса, а затем рассчитать скорость для них отдельно.

Надеюсь, вам не составит труда создать модуль, который расширит существующие функции метода доставки.

Cheers!

UPDATE Для добавления вашего атрибут продукта, который загружается в использовании корзину товар такой конфигурации:

<config> 
    <global> 
      <sales> 
       <quote> 
        <item> 
         <product_attributes> 
          <origin_zip /> 
         </product_attributes> 
        </item> 
       </quote> 
      </sales> 
    </global> 
</config> 

Затем в судоходстве использования метода модели что-то вроде этого (используется USPS в качестве примера):

public function collectRates(Mage_Shipping_Model_Rate_Request $request) 
{ 
    if (!$this->getConfigFlag('active')) { 
     return false; 
    } 

    $defaultOriginZip = Mage::getStoreConfig('shipping/origin/postcode', $this->getStore()); 

    $requestDataByOriginZip = array(); 
    // Walking through quote items 
    foreach ($request->getAllItems() as $quoteItem) { 
     // If virtual or not shippable separately, it should be skipped 
     if ($quoteItem->isVirtual() || $quoteItem->isDummy(true)) { 
      continue; 
     } 
     // Retrieving origin zip code 
     if ($quoteItem->getProduct()->getOriginZip()) { 
      $zipCodeForCalculation = $quoteItem->getProduct()->getOriginZip(); 
     } else { 
      $zipCodeForCalculation = $defaultOriginZip; 
     } 

     if (!isset($requestDataByOriginZip[$zipCodeForCalculation])) { 
      // Default values initialization for this zip code 
      $requestDataByOriginZip[$zipCodeForCalculation] = array(
       'orig_postcode' => $zipCodeForCalculation, 
       'package_weight' => 0, 
       'package_value' => 0, 
       // etc... 
      ); 
     } 

     $requestDataByOriginZip[$zipCodeForCalculation]['package_weight'] += $quoteItem->getRowWeight(); 
     $requestDataByOriginZip[$zipCodeForCalculation]['package_value'] += $quoteItem->getBaseRowTotal(); 
     // Etc... 
    } 

    $results = array(); 
    foreach ($requestDataByOriginZip as $requestData) { 
     $requestByZip = clone $request; // Cloning to prevent changing logic in other shipment methods. 
     $requestByZip->addData($requestData); 
     $this->setRequest($requestByZip); 
     // Returns rate result for current request 
     $results[] = $this->_getQuotes(); 
    } 

    $yourMergedResult = Mage::getModel('shipping/rate_result'); 

    foreach ($results as $result) { 
     // Logic for merging the rate prices.... 
    } 

    return $yourMergedResult; 
} 
+0

Привет Иван - Я получаю то, что Ваше высказывание, чтобы добавить его - мой атрибут origin_zip.Я бы использовал этот идентификатор, и тогда он будет доступен в корзине? Как я получу его для предмета? Итак, где я должен начать перебирать корзину и получить этот атрибут для данного продукта? Благодаря! – mattbryanswan

+0

Привет, Мэтт, я обновил ответ с примерами –

+0

Привет, Иван - спасибо за примеры - ваш человек. Для кого-то еще интересно (потому что я был в замешательстве об этом), конфиг не входит в модуль доставки config.xml, а скорее в папку Checkout config.xml. Я помещал его с модулем доставки, задаваясь вопросом, почему я не смог его получить, но когда я разместил его в кассе, он сразу же заполнился. Еще раз спасибо. – mattbryanswan

1

Класс usa/shipping_ups - это то, что обрабатывает эти запросы, и в частности метод setRequest, похоже, имеет то, что вам нужно:

if ($request->getOrigPostcode()) { 
     $r->setOrigPostal($request->getOrigPostcode()); 
    } else { 
     $r->setOrigPostal(Mage::getStoreConfig('shipping/origin/postcode', $this->getStore())); 
    } 

Если вы можете добавить orig_postcode в запрос на отправку, UPS вернет котировку на основе этого источника.

Одним из подходов к этому было бы переопределить Mage_Shipping_Model_Rate_Request и добавить метод под названием getOrigPostcode. Благодаря тому, что это реальный метод, это приведет к переопределению поведения Magento getter/setter по умолчанию. Попросите этот метод запросить содержимое запроса, чтобы узнать, какой почтовый индекс необходимо использовать.

Надеюсь, что это поможет!

Спасибо, Джо

+0

Hi Joe - хороший звонок. То, что мы сделали, копируется через модуль ИБП в наш собственный пользовательский модуль доставки, и теперь мы работаем над переработкой части почтового индекса для этой цели. Я отправлю комментарий здесь, как только мы заработаем, чтобы вы (и кто-то еще заинтересовался) знали, можем ли мы манипулировать этим звонком, чтобы заставить его работать. Благодаря! – mattbryanswan

Смежные вопросы