$modx->addPackage('Geoip');
$modx->addPackage('Geoip', $modx->getOption('core_path').'components/geoip/model/');
[2013-05-07 13:26:37] (ERROR @ /index.php) Invalid path specified for package: Geoip; using default xpdo model path: /paas/c0100/www/core/xpdo/om/ [2013-05-07 13:26:37] (ERROR @ /index.php) Could not load class: Geoip from mysql.geoip.
А ещё непонятно, какой тег надо указывать, иначе не отправляется сообщение?
<?php if($this instanceof Modxsite){ $modxsite = & $this; } else{ $modxsite = & $this->modxsite; } $modxsite->loadProcessor('web.resourceproduct.getdata', 'shopmodx'); class modWebCatalogProductsGetdataProcessor extends modWebResourceproductGetDataProcessor{ public function initialize() { if(!$this->getProperty('sort')){ $this->setProperty('sort', "{$this->classKey}.menuindex"); $this->setProperty('dir', "ASC"); } return parent::initialize(); } protected function prepareCountQuery(xPDOQuery &$query) { $query = parent::prepareCountQuery($query); $query->innerJoin('modTemplateVarResource', 'image', "image.contentid = {$this->classKey}.id and image.tmplvarid=8 and image.value != ''"); $query->where(array( 'deleted' => 0, 'hidemenu' => 0, 'published' => 1, )); return $query; } /* * Подготавливаем данные товара */ public function iterate(array $data) { $data = parent::iterate($data); // УРЛ источника картинок: $imagesUrl = $this->modx->runSnippet('getSourcePath'); foreach($data as & $d){ // Получаем картинку $d['image'] = $imagesUrl.$d['tvs']['sm_image']['value']; // Набиваем иконки $icons = array(); if(!empty($d['tvs']['sm_new']['value'])){$icons[] = 'i-new';} if(!empty($d['tvs']['sm_stock']['value'])){$icons[] = 'i-stock';} if(!empty($d['tvs']['sm_discount']['value'])){$icons[] = 'i-discount';} $d['icons'] = $icons; } return $data; } } return 'modWebCatalogProductsGetdataProcessor';
$query->where(array( 'deleted' => 0, 'hidemenu' => 0, 'published' => 1, ));
$query->innerJoin('modTemplateVarResource', 'image', "image.contentid = {$this->classKey}.id and image.tmplvarid=8 and image.value != ''");
$d['image'] = $imagesUrl.$d['tvs']['sm_image']['value'];
<?php if($response = $modx->runProcessor('web/catalog/products/getdata', array( where => array( 'parent:in' => array(177,178,179), ), 'limit' => 2, ), array( 'processors_path' => $path, ))){ $products = $response->getObject(); }
<?php /* * Получаем данные только моделей товаров */ require_once dirname(__FILE__).'/getdata.class.php'; class modWebCatalogProductsGetmodeldataProcessor extends modWebCatalogProductsGetdataProcessor{ protected $modelsIDs = array(); public function initialize() { if(!$this->getProperty('sort')){ $this->setProperty('sort', "Models.menuindex"); $this->setProperty('dir', "ASC"); } return parent::initialize(); } // Готовим запрос на выборку уникальных объектов protected function PrepareUniqObjectsQuery(xPDOQuery &$query) { // Группируем по родителям $query->groupby("{$this->classKey}.parent"); return parent::PrepareUniqObjectsQuery($query); } /* * Подсчитываем количество товаров именно по ID-шникам их предков (то есть именно моделей), * так как нам нужны уникальные модели */ protected function countTotal($className, xPDOQuery &$criteria) { $count= 0; if ($query= $this->modx->newQuery($className, $criteria)) { if (isset($query->query['columns'])) $query->query['columns'] = array(); $query->select(array ("COUNT(DISTINCT {$this->classKey}.parent)")); if ($stmt= $query->prepare()) { // print $query->toSQL(); if ($stmt->execute()) { if ($results= $stmt->fetchAll(PDO::FETCH_COLUMN)) { $count= reset($results); $count= intval($count); } } } } return $count; } public function prepareQueryBeforeCount(xPDOQuery $c){ $c = parent::prepareQueryBeforeCount($c); $c->innerJoin('modResource', 'Models', "Models.id = {$this->classKey}.parent"); return $c; } public function setSelection(xPDOQuery $c) { $c = parent::setSelection($c); $c->select(array( 'Models.id as model_id', 'Models.pagetitle as model_title', )); return $c; } } return 'modWebCatalogProductsGetmodeldataProcessor';
<?php /* * Делаем выборку товаров полностью по категории, то есть Входные двери, Межкомнатные или фурнитура */ require_once dirname(dirname(__FILE__)).'/getmodeldata.class.php'; class modWebCatalogProductsBycatalogsectionGetdataProcessor extends modWebCatalogProductsGetmodeldataProcessor{ protected $modelsCount = 0; // Общее число моделей protected $productsCount = 0; // Общее число товаров /* * Проверяем наличие переменной ID категории */ public function initialize() { if(!((int)$this->getProperty('categoryid', false))){ return 'Не был указан ID категории'; } $this->setDefaultProperties(array( 'limit' => 10, )); return parent::initialize(); } /* * Делаем поиск моделей товаров, чтобы в дальнейшем искать конечные товары */ public function beforeQuery() { // Собираем ID-шники моделей только в одной категории $c = $this->modx->newQuery('modResource'); $c->innerJoin('modResource', 'Parent'); $c->where(array( 'Parent.parent' => (int)$this->getProperty('categoryid'), 'Parent.deleted' => 0, 'Parent.hidemenu' => 0, 'Parent.published' => 1, 'deleted' => 0, 'hidemenu' => 0, 'published' => 1, 'class_key' => 'ShopmodxResourceProductModel', )); $c->select(array( "DISTINCT modResource.id" )); if($c->prepare() AND $c->stmt->execute() AND $rows = $c->stmt->fetchAll(PDO::FETCH_ASSOC)){ foreach($rows as $row){ $this->modelsIDs[] = $row['id']; } } else{ $this->modx->log(xPDO::LOG_LEVEL_ERROR, "Не удалось получить ID-шники моделей товаров"); $this->modx->log(xPDO::LOG_LEVEL_ERROR, print_r($c->stmt->errorInfo(), true)); } /* * categoryid */ return parent::beforeQuery(); } protected function prepareCountQuery(xPDOQuery &$query) { $query = parent::prepareCountQuery($query); $query->select(array( 'parent' )); $query->where(array( 'parent:IN' => $this->modelsIDs, )); // Подсчитываем общее количество моделей и вариантов $this->countModelsAndVariables($query); return $query; } // Подсчитываем общее количество моделей и вариантов protected function countModelsAndVariables(xPDOQuery $query){ $c = clone $query; if (isset($c->query['columns'])) $c->query['columns'] = array(); $c->select(array( "COUNT(DISTINCT {$this->classKey}.id) as productsCount", "COUNT(DISTINCT {$this->classKey}.parent) as modelsCount", )); if ($stmt= $c->prepare()) { if ($stmt->execute()) { if ($results= $stmt->fetchAll(PDO::FETCH_ASSOC)) { if($result = current($results)){ $this->modelsCount = $result['modelsCount']; $this->productsCount = $result['productsCount']; } } } } return; } public function prepareQueryAfterCount(xPDOQuery $c) { $c = parent::prepareQueryAfterCount($c); $c->innerJoin('modResource', 'vendor', "Models.parent=vendor.id"); return $c; } public function setSelection(xPDOQuery $c) { $c = parent::setSelection($c); $c->select(array( 'vendor.id as vendor_id', 'vendor.pagetitle as vendor_title', )); return $c; } /* * Готовим окончательный вывод */ public function outputArray(array $array, $count = false) { $output = parent::outputArray($array, $count); $output['modelsCount'] = $this->modelsCount; // Выводим общее кол-во моделей $output['productsCount'] = $this->productsCount; // Выводим общее кол-во товаров return $output; } } return 'modWebCatalogProductsBycatalogsectionGetdataProcessor';
<?php /* * Делаем выборку топовых товаров */ require_once dirname(__FILE__).'/getdata.class.php'; class modWebCatalogProductsBycatalogsectionGetdatatopProcessor extends modWebCatalogProductsBycatalogsectionGetdataProcessor{ protected function prepareCountQuery(xPDOQuery &$query) { $query = parent::prepareCountQuery($query); $query->innerJoin('modTemplateVarResource', 'top', "top.contentid = {$this->classKey}.id and top.tmplvarid=4 and top.value != ''"); return $query; } } return 'modWebCatalogProductsBycatalogsectionGetdatatopProcessor';