Пожалуйста. Можешь скачать магазин и посмотреть как там сделано.
Илья, привет!
Ты используешь базовый процессор modObjectGetListProcessor. Переопределять в нем метод getData надо очень осторожно. Вот ты не очень удачно это сделал, так как ты из метода вынес очень полезные методы, такие как prepareQueryBeforeCount и prepareQueryAfterCount. Вот сравни: public function getData() { $data = array(); $limit = intval($this->getProperty('limit')); $start = intval($this->getProperty('start'));
/* query for chunks */ $c = $this->modx->newQuery($this->classKey); $c = $this->prepareQueryBeforeCount($c); $data['total'] = $this->modx->getCount($this->classKey,$c); $c = $this->prepareQueryAfterCount($c);
$sortClassKey = $this->getSortClassKey(); $sortKey = $this->modx->getSelectColumns($sortClassKey, $this->getProperty('sortAlias',$sortClassKey),'',array($this->getProperty('sort'))); if (empty($sortKey)) $sortKey = $this->getProperty('sort'); $c->sortby($sortKey,$this->getProperty('dir')); if ($limit > 0) { $c->limit($limit,$start); }
$data['results'] = $this->modx->getCollection($this->classKey,$c); return $data; } Так вот как раз на уровне этих методов и происходит вклинивание в формирование запроса. То есть в расширяющем процессоре ты пишешь примерно следующее: public function prepareQueryBeforeCount(xPDOQuery $c) { $c = parent::prepareQueryBeforeCount($c); // Добавляешь условия к запросу return $c; } Это тебе позволит не лезть в общую логику. 2. По поводу самой логики: я сам чаще всего использую только два метода: а) Расширение классов (переопределяя методы типа prepareQueryBeforeCount) б) Передачей параметров. К примеру вот часть кода процессора: class ....{ public function initialize(){ $this->setDefaultProperties(array( 'hot' => false, // Флаг, что делать только выборку новинок )); return parent::initialize(); }
public function prepareQueryBeforeCount(xPDOQuery $c) { $c = parent::prepareQueryBeforeCount($c);
// Если указано, что нужны только новинки
if($this->getProperty('hot')){
// Добавляем условие только новинок
}
return $c;
}
} И вот уже при вызове этого процессора ты просто передаешь параметр 'hot' => true и все. По умолчаниюу тебя стоит 'hot' => false.
Добрый день. Да, можно.
@session_cache_limiter('public'); define('MODX_REQP',false);
require_once dirname(dirname(dirname(dirname(dirname(FILE))))).'/config.core.php'; require_once MODX_CORE_PATH.'config/'.MODX_CONFIG_KEY.'.inc.php'; require_once MODX_CONNECTORS_PATH.'index.php';
if ($modx->user->hasSessionContext($modx->context->get('key'))) { $_SERVER['HTTP_MODAUTH'] = $_SESSION["modx.". $modx->context->get('key') .".user.token"]; } else { $_SESSION["modx." .$modx->context->get('key'). ".user.token"] = 0; $_SERVER['HTTP_MODAUTH'] = 0; }
/* handle request */ if(!$path = $modx->getOption('mycomponent.core_path')){ $path = $modx->getOption('core_path').'components/mycomponent/'; } $path .= 'processors/web/';
$modx->request->handleRequest(array( 'processors_path' => $path, 'location' => $location, )); И если надо, вызываю его другим коннектором, передавая $location в него.
Пожалуйста
Спасибо большое, буду экспериментировать.
И еще в меню админки 3 компонента, а в assets/components их 8 Компоненты в core/components/ и в меню не имеют прямой связи. Меню рулится через управление менюхой (Система->Действия). Опять-таки, это общий вопрос по системе, потому такие вещи или гуглим, или пишем общий топик-вопрос. шаблон bootstrap находится в сборке тут assets/components/modxsite/templates/bootstrap. Как назначить этот шаблон страницам сайта? Это в системной настройке в modxSmarty надо указывать название шаблона. В данном случае bootstrap, хотя там по-моему он изначально и установлен. Но правильно делать копию шаблона и указывать в настройке уже свой шаблон. В видюхе про сборку магазина это подробно демонстрируется.
Спасибо, получилось. Николай, еще один вопрос, шаблон bootstrap находится в сборке тут assets/components/modxsite/templates/bootstrap. Как назначить этот шаблон страницам сайта? И еще в меню админки 3 компонента, а в assets/components их 8… так и должно быть? Прошу простить если туплю:)
Я тоже замечал у них логические ошибки в работе механизма. Сам отработал такую последовательность:
Я прошу прощения, никак не могу понять как все таки развернуть образ. Они импортнули сборку, теперь sborka.fi1osof.modxcloud.com-130506.1553.42-2.2.7-pl.transport.zip лежит у меня в Vault с пометками manually imported и ниже ссылки меню Inject into Cloud Create New Cloud From Snapshot и Delete. Выполнял Inject into Cloud и Create New Cloud From Snapshot. Все выполняется вроде, но в сайтах обычный голый modx… Подскажите пожалуйста что делаю неправильно.