Как в modExtra добавить выпадающий список с категориями товара minishop2?
Всем привет. Столкнулся с проблемкой, не могу вывести, при создании или редактировании записей в своём компоненте, список категорий товаров из minishop2. Недавно только освоил добавление выпадающих списков и сохранение id из другой таблицы. Как я понимаю все категории храняттся в modResource с class_key = msCategory.
Пробовал в контроллере добавлять 3 js из minishop2 и прописывать xtype: «minishop2-combo-category», но это не прокатывает.
Пробовал в контроллере добавлять 3 js из minishop2 и прописывать xtype: «minishop2-combo-category», но это не прокатывает.
$this->addJavascript($this->miniShop2->config['jsUrl'] . 'mgr/minishop2.js');
$this->addJavascript($this->miniShop2->config['jsUrl'] . 'mgr/misc/ms2.utils.js');
$this->addJavascript($this->miniShop2->config['jsUrl'] . 'mgr/misc/ms2.combo.js');
Как вывести при редактировании или создании категории товаров из minishop2? Комментарии: 4
Попробуй
Если не прокатит или не тот функционал, сделай по аналогии свой xtype, только про процессор (который mgr/category/getcats ) не забудь, что он тоже нужен.
xtype="minishop2-combo-category"
github.com/bezumkin/miniShop2/blob/master/assets/components/minishop2/js/mgr/misc/ms2.combo.js#L89Если не прокатит или не тот функционал, сделай по аналогии свой xtype, только про процессор (который mgr/category/getcats ) не забудь, что он тоже нужен.
А как правильно прописать путь для
mgr/category/getcats
По умолчанию он же будет искать в директории моего компонента или мне нужно будет создать у себя этот процессор?
Всё получилось. Только вот не могу разобраться как можно сделать выборку по указаным категориям. Мне выводит все созданные, а хотелось бы чтобы выводило только указанные. Я так понимаю это здесь можно указать:
<?php
class PayPanelCategoryGetCatsProcessor extends modObjectGetListProcessor
{
public $classKey = 'msCategory';
public $defaultSortField = 'id';
public $defaultSortDirection = 'ASC';
protected $item_id = 0;
/**
* @return bool
*/
public function initialize()
{
if ($this->getProperty('combo') && !$this->getProperty('limit') && $id = (int)$this->getProperty('id')) {
$this->item_id = $id;
}
$this->setDefaultProperties(array(
'start' => 0,
'limit' => 20,
'sort' => $this->defaultSortField,
'dir' => $this->defaultSortDirection,
'combo' => false,
'query' => '',
));
return true;
}
/**
* @return array|string
*/
public function process()
{
$beforeQuery = $this->beforeQuery();
if ($beforeQuery !== true) {
return $this->failure($beforeQuery);
}
$data = $this->getData();
$list = $this->iterate($data);
return $this->outputArray($list, $data['total']);
}
/**
* @return array
*/
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);
}
if ($c->prepare() && $c->stmt->execute()) {
$data['results'] = $c->stmt->fetchAll(PDO::FETCH_ASSOC);
}
return $data;
}
/**
* @param array $data
*
* @return array
*/
public function iterate(array $data)
{
$list = array();
$list = $this->beforeIteration($list);
$this->currentIndex = 0;
/** @var xPDOObject|modAccessibleObject $object */
foreach ($data['results'] as $array) {
$objectArray = $this->prepareResult($array);
if (!empty($objectArray) && is_array($objectArray)) {
$list[] = $objectArray;
$this->currentIndex++;
}
}
$list = $this->afterIteration($list);
return $list;
}
/**
* @param xPDOQuery $c
*
* @return xPDOQuery
*/
public function prepareQueryBeforeCount(xPDOQuery $c)
{
$c->select('id,parent,pagetitle,context_key');
$c->where(array(
'class_key' => 'msCategory',
));
if ($this->item_id) {
$c->where(array('id' => $this->item_id));
} elseif ($query = $this->getProperty('query')) {
$c->where(array('pagetitle:LIKE' => "%$query%"));
}
return $c;
}
/**
* @param array $resourceArray
*
* @return array
*/
public function prepareResult(array $resourceArray)
{
$resourceArray['parents'] = array();
$parents = $this->modx->getParentIds($resourceArray['id'], 2,
array('context' => $resourceArray['context_key']));
if ($parents[count($parents) - 1] == 0) {
unset($parents[count($parents) - 1]);
}
if (!empty($parents) && is_array($parents)) {
$q = $this->modx->newQuery('msCategory', array('id:IN' => $parents));
$q->select('id,pagetitle');
if ($q->prepare() && $q->stmt->execute()) {
while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
$key = array_search($row['id'], $parents);
if ($key !== false) {
$parents[$key] = $row;
}
}
}
$resourceArray['parents'] = array_reverse($parents);
}
return $resourceArray;
}
}
return 'PayPanelCategoryGetCatsProcessor';
Чет много кода))
Смотри, пример процессора, который выдает список категорий из Tickets. При этом они фильтруются по введенному пользователю значению (поиск по pagetitle).
Смотри, пример процессора, который выдает список категорий из Tickets. При этом они фильтруются по введенному пользователю значению (поиск по pagetitle).
<?php
class boardAdvertCategoryGetListProcessor extends modObjectGetListProcessor
{
public $classKey = 'TicketsSection';
public $languageTopics = array('resource');
public $defaultSortField = 'pagetitle';
/** {@inheritDoc} */
public function prepareQueryBeforeCount(xPDOQuery $c) {
if ($this->getProperty('combo')) {
$c->leftJoin('modResource','Rubric','`TicketsSection`.`parent` = `Rubric`.`id`');
$c->select($this->modx->getSelectColumns($this->classKey, $this->classKey, ''));
$c->select('`Rubric`.`pagetitle` as `rubric`');
}
else {
$c->select($this->modx->getSelectColumns($this->classKey, $this->classKey, ''));
}
$query = $this->getProperty('query');
$c->where(array('class_key' => 'TicketsSection'));
if (!empty($query)) {
$c->where(array('pagetitle:LIKE' => '%'.$query.'%'));
}
$id = $this->getProperty('id');
if (!empty($id)) {
$c->where(array('id' => $id));
}
return $c;
}
/** {@inheritDoc} */
public function prepareRow(xPDOObject $object) {
if ($this->getProperty('combo')) {
$array = array(
'id' => $object->get('id'),
'pagetitle' => $object->get('pagetitle'),
'rubric' => $object->get('rubric'),
);
}
else {
$array = $object->toArray();
}
return $array;
}
}
return 'boardAdvertCategoryGetListProcessor';
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.