Вот чтобы вам не переписывать выборку, вам надо было просто расширять процессор web/catalog/products/getdata, потому что там уже прописано все необходимое. Вам же в вашем процессоре надо прописать только это:
if($this->getProperty('hot1')){ $z->innerJoin('modTemplateVarResource', 'hot1', "hot1.contentid = {$alias}.id AND hot1.tmplvarid = 15 AND hot1.value='1'"); }
То есть если у вас передается переменная hot1, у вас будет выборка только соответствующих товаров.
Если у вас вопросы еще останутся — пишите отдельный топик, мы уже Илью совсем заспамили.
товары, на которые есть скидки Подскажите, где нужно дописать выборку?
Здесь вы только фильтруете по по полю. Но здесь нет непосредственно выборки select(). У вас написано:
По аналогии с новинками хочу вывести на главную еще и скидки.
Вы имеете ввиду «получить товары, на которые скидки имеются» или именно вывести сами скидки?
я пробывала его расширять
if($this->getProperty('hot')){ $c->innerJoin('modTemplateVarResource', 'hot', "hot.contentid = {$alias}.id AND hot.tmplvarid = 8 AND hot.value='1'"); } elseif($this->getProperty('hot1')){ $c->innerJoin('modTemplateVarResource', 'hot1', "hot1.contentid = {$alias}.id AND hot1.tmplvarid = 15 AND hot1.value='1'"); }
но получается тоже самое
Так а скидки у вас где реализованы? Да и расширять скорее всего вам надо было web/catalog/products/getdata, у вас и кода в процессоре меньше бы тогда было.
P.S. Лучше это было отдельным топиком писать, а то оффтоп получается.
Добрый вечер! Подскажите по поводу getdata-процессора. По аналогии с новинками хочу вывести на главную еще и скидки. Создала еще поле hot1 и директорию в которую положила свой getdata.class.php
require_once dirname(dirname(__FILE__)).'/getdatanew.class.php'; class modWebCatalogProductsHot1GetdataProcessor2 extends modWebCatalogProductsGetdataProcessor1{ public function initialize(){ $this->setDefaultProperties(array( 'hot1' => true, // Получать скидки "sort" => "{$this->classKey}.publishedon", "dir" => "ASC", )); return parent::initialize(); } } return 'modWebCatalogProductsHot1GetdataProcessor2';
в файле getdatanew.class.php задала процессор modWebCatalogProductsGetdataProcessor1 так, чтобы выводил скидки
require_once dirname(dirname(dirname(__FILE__))).'/resources/getdata.class.php'; class modWebCatalogProductsGetdataProcessor1 extends modWebResourcesGetdataProcessor{ public function initialize(){ $this->setDefaultProperties(array( 'hot1' => false, // Получать скидки )); $this->setProperties(array( "base_currency_id" => (int)$this->modx->getOption("shopmodx.default_currency"), // ID базовой валюты магазина )); return parent::initialize(); } public function prepareQueryBeforeCount(xPDOQuery $z) { $z = parent::prepareQueryBeforeCount($z); $alias = $z->getAlias(); $z->innerJoin('ShopmodxProduct', 'Product'); if($this->getProperty('hot1')){ $z->innerJoin('modTemplateVarResource', 'hot1', "hot1.contentid = {$alias}.id AND hot1.tmplvarid = 15 AND hot1.value='1'"); } // Поиск товаров в категории и подкатегориях if($category_id = $this->getProperty('category_id')){ $categories = array(); $this->getCategories($category_id, $categories); $Z->where(array( "parent:IN" => $categories, )); }
как бы все работает, Но при вызове выводит Новинки + Скидки все в одном массиве. Подскажите что нужно сделать, чтобы остались только Скидки?? спасибо
Планы хорошие!
Примерная дата выхода есть?
По пожеланиям, это боле менее хорошая документация нужна.
Из-за отсутствия ее в ShopModx пользуюсь ShopKeeper.
И вариант 3 — переехать на другой движок (вряд ли рассматривается, но тоже имеет место быть).
На самом деле я точно в этом не подскажу. С вопросами по шопкиперу имеет смысл обращаться непосредственно к Андчиру.