private:koding:hostcms:modules:shop:elements:hidenotalloweditemsandmods

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
private:koding:hostcms:modules:shop:elements:hidenotalloweditemsandmods [20.11.15 в 18:32]
maximzasorin_gmail.com
private:koding:hostcms:modules:shop:elements:hidenotalloweditemsandmods [27.06.17 в 15:39] (current)
maximzasorin_gmail.com ↷ Страница перемещена из private:koding:hostcms:shop:hidenotalloweditemsandmods в private:koding:hostcms:modules:shop:elements:hidenotalloweditemsandmods
Line 43: Line 43:
  $oCurrent_Warehouse = $oShop->​Shop_Warehouses->​getDefault();​  $oCurrent_Warehouse = $oShop->​Shop_Warehouses->​getDefault();​
  
 + // Вариант 1. Некорректный,​ но менее затратный вариант,​ в этом случае ярлыки товаров не будут
 + // проверяться на наличие на текущем складе,​ а будут выводится все время
  $object->​shopItems()  $object->​shopItems()
  ->​queryBuilder()  ->​queryBuilder()
- ->​leftJoin('​shop_warehouse_items',​ '​shop_warehouse_items.shop_item_id',​ '​=',​ '​shop_items.id'​, array( + ->​leftJoin('​shop_warehouse_items',​ '​shop_warehouse_items.shop_item_id',​ '​=',​ '​shop_items.id'​) 
- array+ ->​open() 
- 'AND' ​=array('​shop_warehouse_items.shop_warehouse_id',​ '​=',​ $oCurrent_Warehouse->id) + ->​where('shop_warehouse_items.count', ​'>', 0) 
- + ->​where('​shop_warehouse_items.shop_warehouse_id',​ '​=',​ $oCurrentWarehouse->id) 
- + ->​setOr(
- + ->​where('​shop_items.shortcut_id',​ '​!=',​ 0
- ->​where('​shop_warehouse_items.count',​ '>',​ 0);+ ->​close(
 +
 + 
 + // // Вариант 2. Корректный,​ с LEFT JOIN, но более затратный,​ в этом случае все ярлыки будут корректно 
 + // // обрабатываться условием наличия на складе. Данный вариант предусматривает сложное объединение таблиц через LEFT JOIN ... OR 
 + // // и может выполняется значительное время, особенно на объемных интернет-магазинах 
 + // $object->​shopItems() 
 + // ->​queryBuilder() 
 + // ->​leftJoin('​shop_warehouse_items',​ '​shop_warehouse_items.shop_item_id',​ '​=',​ '​shop_items.id',​ array( 
 + //  array('​OR'​ => array('​shop_warehouse_items.shop_item_id',​ '​=',​ Core_QueryBuilder::​expression('​`shop_items`.`shortcut_id`'​))),​ 
 + // ) 
 + // ) 
 + // ->​where('​shop_warehouse_items.count',​ '>',​ 0
 + // ->​where('​AND'​ => array('​shop_warehouse_items.shop_warehouse_id',​ '​=',​ $oCurrentWarehouse->​id)) 
 + // ; 
 + 
 + // var_dump($object->​shopItems()->​queryBuilder()->​build());
  }  }
  }  }
 }</​code>​ }</​code>​
 +  * Решение предусматривает обработку ярлыков,​ но с ними могут быть проблемы в интернет-магазинах с большим количеством товаров,​ из-за чего в наблюдателе предусмотрено два варианта выборки,​ один из них отбрасывает ярлыки при сравнении,​ а другой корректно обрабатывает их, но может выполняться значительно время (см. комментарии в наблюдателе).
  
 ===== Модификации ===== ===== Модификации =====
Line 108: Line 127:
 Константа ''​REGION_PRICES_SHOP_ID''​ задает идентификатор интернет-магазина,​ для которого хотим скрыть товары и модификации товаров. Константа ''​REGION_PRICES_SHOP_ID''​ задает идентификатор интернет-магазина,​ для которого хотим скрыть товары и модификации товаров.
  
-Если наблюдатель не срабатывает на странице интернет-магазина,​ то возможно в ТДС используется класс, наследованный от Shop_Controller_Show,​ например,​ с названием My_Shop_Controller_Show,​ или другой. Для такого класса нужно назначить наблюдатель отдельно. В ''​bootstrap.php''​ добавляем код:<​code php>+Если наблюдатель не срабатывает на странице интернет-магазина,​ то возможно в ТДС используется класс, наследованный от ''​Shop_Controller_Show''​, например,​ с названием ​''​My_Shop_Controller_Show''​, или другой. Для такого класса нужно назначить наблюдатель отдельно. В ''​bootstrap.php''​ добавляем код:<​code php>
 Core_Event::​attach('​My_Shop_Controller_Show.onBeforeRedeclaredShow',​ array('​Kad_Shop_Item_Observers_Hidenotavailableitems',​ '​onBeforeRedeclaredShow'​));</​code>​ Core_Event::​attach('​My_Shop_Controller_Show.onBeforeRedeclaredShow',​ array('​Kad_Shop_Item_Observers_Hidenotavailableitems',​ '​onBeforeRedeclaredShow'​));</​code>​
private/koding/hostcms/modules/shop/elements/hidenotalloweditemsandmods.1448033544.txt.gz · Last modified: 20.11.15 в 18:32 by maximzasorin_gmail.com