The followings are the available columns in table 'product_filter':
Inheritance: extends CActiveRecord
示例#1
0
 public function products()
 {
     $this->setLayout('empty');
     set_time_limit(0);
     $response = new XMLResponse();
     $filter = new ARSelectFilter();
     $filter->setOrder(f('Product.dateCreated'), ARSelectFilter::ORDER_DESC);
     $categoryId = $this->getRequest()->get('id');
     if (preg_match('/^\\d+$/', $categoryId)) {
         $this->shouldBeEnabledFeed('CATEGORY_PRODUCTS');
         $category = Category::getInstanceById($categoryId, Category::LOAD_DATA);
         $filter = new ProductFilter($category, $filter);
     } else {
         $this->shouldBeEnabledFeed('ALL_PRODUCTS');
         $category = Category::getRootNode(true);
         $filter = new ProductFilter($category, $filter);
         $filter->includeSubCategories();
     }
     $feed = new ProductFeed($filter);
     $feed->setFlush();
     $feed->setLimit($this->config->get('NUMBER_OF_PRODUCTS_TO_INCLUDE'));
     $response->set('feed', $feed);
     $response->set('category', $category->toArray());
     return $response;
 }
示例#2
0
 public function export()
 {
     $module = $this->request->get('module');
     $enabledFeeds = $this->config->get('ENABLED_FEEDS');
     if (!isset($enabledFeeds[$module]) || $this->request->get('key') != $this->config->get('FEED_KEY')) {
         return;
     }
     $this->setLayout('empty');
     set_time_limit(0);
     $cat = Category::getRootNode(true);
     $filter = new ProductFilter($cat, new ARSelectFilter());
     $filter->includeSubCategories();
     $feed = new ProductFeed($filter);
     $feed->setFlush();
     $response = new XMLResponse();
     $response->set('feed', $feed);
     $response->set('tpl', 'xml/feed/' . $module . '.tpl');
     return $response;
 }
示例#3
0
 public function getSelectFilter()
 {
     $selectFilter = new ARSelectFilter();
     $this->application->processInstancePlugins('productFilter', $selectFilter);
     $order = $this->request->get('sort');
     $defOrder = strtolower($this->config->get('SORT_ORDER'));
     if (!$order) {
         $order = $defOrder;
     }
     $this->applySortOrder($selectFilter, $order);
     // setup ProductFilter
     $productFilter = new ProductFilter($this->getCategory(), $selectFilter);
     if ($this->config->get('INCLUDE_SUBCATEGORY_PRODUCTS')) {
         $productFilter->includeSubcategories();
     }
     $this->productFilter = $productFilter;
     foreach ($this->filters as $filter) {
         $productFilter->applyFilter($filter);
         if ($filter instanceof SearchFilter) {
             $productFilter->includeSubcategories();
             $searchQuery = $filter->getKeywords();
         }
     }
     if ($this->getCategory()->isRoot() && $this->filters || $this->filters || $this->request->get('includeSub')) {
         $productFilter->includeSubcategories();
     }
     return $productFilter;
 }
示例#4
0
 public function bestsellingProductsBlock()
 {
     ClassLoader::import('application.model.product.ProductFilter');
     $cache = $this->application->getCache();
     $key = array('bestsellers', $this->getCategory()->getID() . '_' . $days);
     if (!$cache->get($key)) {
         $category = $this->getCategory();
         $filter = new ProductFilter($category, new ARSelectFilter());
         $filter->includeSubcategories();
         $filter->setEnabledOnly();
         $selectFilter = $filter->getSelectFilter();
         $selectFilter->setLimit($this->config->get('BESTSELLING_ITEMS_COUNT'));
         $selectFilter->setOrder(new ARExpressionHandle('cnt'), 'DESC');
         $q = new ARSelectQueryBuilder();
         $q->includeTable('Product');
         $q->joinTable('Category', 'Product', 'ID', 'categoryID');
         $q->addField('Product.ID');
         $q->addField(new ARExpressionHandle('(SELECT SUM(count) FROM OrderedItem LEFT JOIN CustomerOrder ON OrderedItem.customerOrderID=CustomerOrder.ID WHERE productID=Product.ID AND CustomerOrder.isPaid=1 AND CustomerOrder.dateCompleted > "' . ARSerializableDateTime::createFromTimeStamp(strtotime('-' . $this->config->get('BESTSELLING_ITEMS_DAYS') . ' days')) . '")'), null, 'cnt');
         $q->setFilter($selectFilter);
         $cache->set($key, ActiveRecord::getDataByQuery($q));
     }
     $products = $cache->get($key);
     if (!$products) {
         return;
     }
     $ids = array();
     foreach ($products as $id) {
         $ids[] = $id['ID'];
     }
     $products = ActiveRecord::getRecordSetArray('Product', select(IN('Product.ID', $ids)), array('DefaultImage' => 'ProductImage'));
     ProductPrice::loadPricesForRecordSetArray($products);
     if ($products) {
         return new BlockResponse('products', $products);
     }
 }
示例#5
0
文件: Category.php 项目: saiber/www
 /**
  *	Create a basic ARSelectFilter object to select category products
  */
 public function getProductsFilter(ProductFilter $productFilter)
 {
     $filter = new ARSelectFilter($this->getProductCondition($productFilter->isSubcategories()));
     $filter->mergeCondition(new EqualsCond(new ARFieldHandle('Product', 'isEnabled'), 1));
     $this->applyInventoryFilter($filter);
     return $filter;
 }
示例#6
0
 private function getFeaturedMainCategoryProducts(&$categories)
 {
     $cache = $this->application->getCache();
     $namespace = 'category_featured';
     $products = array();
     foreach ((array) $categories as $category) {
         $key = array($namespace, $category['ID']);
         if ($product = $cache->get($key)) {
             $products[] = $product;
             continue;
         }
         $cat = Category::getInstanceByID($category['ID'], Category::LOAD_DATA);
         $pf = new ProductFilter($cat, new ARSelectFilter());
         $pf->includeSubcategories();
         $f = $cat->getProductsFilter($pf);
         $f->mergeCondition(new EqualsCond(new ARFieldHandle('Product', 'isFeatured'), true));
         $f->setLimit(1);
         $f->setOrder(new ARExpressionHandle('RAND()'));
         $product = array_pop(ActiveRecordModel::getRecordSetArray('Product', $f, array('ProductImage', 'Category', 'Manufacturer')));
         if (!$product) {
             $product = array('ID' => 0);
         }
         $cache->set($key, $product, 1800);
         $products[] = $product;
     }
     ProductPrice::loadPricesForRecordSetArray($products);
     foreach ($products as $key => $product) {
         $categories[$key]['featuredProduct'] = $product;
     }
 }
示例#7
0
 public function clearAllFiltersRelations()
 {
     ProductFilter::model()->deleteAllByAttributes(array('product_id' => $this->product_id));
 }
示例#8
0
 public function __construct(ProductFilter $filter)
 {
     $this->productFilter = $filter;
     parent::__construct($filter->getSelectFilter(), 'Product', array('Category', 'ProductImage', 'Manufacturer'));
 }