2017-02-15 16 views
0

, если у меня есть это в Layer.phpКак отсортировать товары, которые отсутствуют на складе, только если я уже отсортировал список продуктов в функции?

class WebPierCom_OutOfStockLastAndMostViewed_Catalog_Model_Layer extends Mage_Catalog_Model_Layer 
{ 
    public function prepareProductCollection($collection) 
    { 
     parent::prepareProductCollection($collection); 
     if (!Mage::helper('webpiercom_outofstockmastmndmostviewed_catalog')->isSortOutOfStockProductsAtBottomEnabled()) { 
      return $this; 
     } 

     try { 
      $websiteId = Mage::app()->getStore()->getWebsiteId(); 
      if (Mage::helper('catalog')->isModuleEnabled('Mage_CatalogInventory')) { 


       $stockStatusFieldExisted = Mage::helper('webpiercom_outofstockmastmndmostviewed_catalog')->checkFieldExisted($collection->getSelect(), 'stock_status'); 

       if(!$stockStatusFieldExisted) { 
        $collection->joinTable(
         array('wprdc' => 'cataloginventory/stock_status'), 
         'product_id=entity_id', 
         array('stock_status'), 
         array('website_id' => $websiteId), 
         'left' 
        ); 

       } 
      } 
      $collection->getSelect()->order('stock_status desc'); 
     } 
     catch (Exception $e) {} 
     return $this; 
    } 
} 

И я имею в helper.php это

class WebPierCom_OutOfStockLastAndMostViewed_Catalog_Helper_Data extends Mage_CatalogInventory_Helper_Data 
{ 
    const XML_PATH_SORT_OUT_OF_STOCK = 'cataloginventory/options/sort_out_of_stock_at_bottom'; 
    const XML_PATH_SORT_OUT_OF_STOCK_BY_MOST_VIEWED = 'cataloginventory/options/sort_out_of_stock_at_bottom_by_most_viewed'; 
    const XML_PATH_SORT_OUT_OF_STOCK_SEARCH_RESULT = 'cataloginventory/options/sort_out_of_stock_at_bottom_for_search'; 


    public function isSortOutOfStockProductsAtBottomEnabled() 
    { 
     return $this->isShowOutOfStock() && Mage::getStoreConfigFlag(self::XML_PATH_SORT_OUT_OF_STOCK); 
    } 

    public function isSortOutOfStockProductsAtBottomByMostViewedEnabled() 
    { 
    return $this->isShowOutOfStock() && Mage::getStoreConfigFlag(self::XML_PATH_SORT_OUT_OF_STOCK_BY_MOST_VIEWED); 
    } 

    public function isEnabledForSearchResults() 
    { 
     return $this->isShowOutOfStock() && Mage::getStoreConfigFlag(self::XML_PATH_SORT_OUT_OF_STOCK_SEARCH_RESULT); 
    } 

    public function checkFieldExisted($select, $field) 
    { 
     $result = false; 
     if($field) { 
      $columns = $select->getPart(Zend_Db_Select::COLUMNS); 
      foreach ($columns as $column) { 
       if (in_array($field , $column)) { 
        $result = true; 
        break; 
       } 
      }   
     } 
     return $result; 
    } 
} 

Но я также нужно сортировать продукты, которые в наличии только самых просматриваемых перед местом в нижней части списка продуктов у меня есть Magento 1.9 и 1.9.3 - что проще для вас. Может ли кто-нибудь помочь мне, пожалуйста,

ответ

0

Вы должны использовать этот код в файле layer.php для разрешения вашего запроса.

$collection->getSelect()->joinLeft(
     array('_inventory_table'=>$this->getTable('cataloginventory/stock_item')), 
     "_inventory_table.product_id = e.entity_id", 
     array('is_in_stock', 'manage_stock') 
    ); 
    $collection->addExpressionAttributeToSelect('on_top', 
    '(CASE WHEN (((_inventory_table.use_config_manage_stock = 1) AND (_inventory_table.is_in_stock = 1)) OR ((_inventory_table.use_config_manage_stock = 0) AND (1 - _inventory_table.manage_stock + _inventory_table.is_in_stock >= 1))) THEN 1 ELSE 0 END)', 
    array()); 
    $collection->getSelect()->order('on_top DESC'); 
+0

Hi. Спасибо за ответ. Но мой код работает хорошо. Уже нет на складе. Мне просто нужно добавить код для сортировки только имеющихся в наличии продуктов (которые внизу) по моему атрибуту products_views. –