Да, надо бы допилить этот момент в сборке. А так вот ревизия: gist.github.com/Fi1osof/cedd7b34d38708abad81/revisions
вот процессор для выборки ВСЕХ дочерних категорий.
<?php /* Получаем все дочерние категории. По умолчанию поиск выполняется во всем каталоге */ require_once dirname(dirname(dirname(__FILE__))).'/resources/getdata.class.php'; class modWebCatalogCategoryGetdataProcessor extends modWebResourcesGetdataProcessor{ public function initialize(){ $this->setDefaultProperties(array( 'category_id' => 85, 'image_url_schema' => 'base', )); if(!(int)$this->getProperty('category_id')){ return "Не была указана категория"; } return parent::initialize(); } public function prepareQueryBeforeCount(xPDOQuery $c) { $c = parent::prepareQueryBeforeCount($c); $categories = array(); $where = array( 'id:in' => $this->getCategories((int)$this->getProperty('category_id'), $categories), ); $c->where($where); return $c; } protected function getCategories($parent, array & $categories){ $q = $this->modx->newQuery('modResource', array( 'deleted' => 0, 'published' => 1, 'hidemenu' => 0, 'isfolder' => 1, 'parent' => $parent, )); $q->select(array( 'id', )); if($s = $q->prepare() AND $s->execute()){ while($row = $s->fetch(PDO::FETCH_ASSOC)){ $categories[] = $row['id']; $this->getCategories($row['id'], $categories); } } return $categories; } // public function afterIteration(array $list){ $list = parent::afterIteration($list); switch($this->getProperty('image_url_schema')){ case 'base': $images_base_url = $this->modx->runSnippet('getSourcePath'); break; case 'full': $images_base_url = $this->modx->getOption('site_url'); $images_base_url .= preg_replace("/^\//", "", $this->modx->runSnippet('getSourcePath')); break; default: $images_base_url = ''; } foreach($list as & $l){ $l['image'] = ''; if(!empty($l['tvs']['image']['value'])){ $l['image'] = $images_base_url . $l['tvs']['image']['value']; } else{ $l['imageDefault'] = $images_base_url . 'products/No-Photo.jpg'; } } return $list; } } return 'modWebCatalogCategoryGetdataProcessor';
где что подкрутить чтобы выводился только один уровень категорий.
Сегодня представляю вашему вниманию первую бету компонента shopModx1C. Пока эта версия совсем сырая, но главное она выполняет — импорт каталога из 1С. В дальнейшем компонент будет постоянно прокачиваться, и будет реализована полная двухсторонняя интеграция с 1С.
На сегодня возможности:
  • Используется родной механизм 1С для взаимодействия с сайтами.
  • Поддержка авторизации и сессий (в параметрах соединения в 1С обязательно надо будет указать логин/пароль MODX-пользователя с достаточными привилегиями).
  • Импорт категорий и товаров.
  • Импорт картинок.
Обновление остатков и цен будет в самом ближайшем будущем (просто надо дописать обработку параметров).
После установки компонента его надо сконфигурировать (плюс к этому еще и создать TV-поле для хранения артикула 1С).
В настройках 1С указать адрес
http://yourDomain/assets/components/shopmodx1c/connectors/exchange/catalog/import.php

P.S. У кого есть 1С (версии 8+) с каталогом товаров (с картинками), обращайтесь, потестируем.
Все равно начинать когда-то надо, так лучше на чем-нибудь реальном, чем просто так )
Не за что! Но наберись терпения. Эта задача совсем не на один час.
Почитать следует не по migxDB, а по ExtJS, потому что мига — это только обертка для конфигурации. Но учитывая твою задачу, лучше его и не трогать. Правильней допилить или наш групповой редактор, добавив в него редактирование этих цен/цветов и т.п. через дополнительный интерфейс по правой кнопки мыши, или в редактор документа еще одну вкладку сделать и там уже интерфейс. Как вкладку добавить смотри или плагин ShopModx, или плагин в XLexicon.
Понял. Я, в принципе начал ковыряться с процессорами и понял уже, что многие переписывать придется. Тут такая картина: у товара может быть несколько цветов, и по каждому цвету может быть задано разное количество размеров. А migxDB позволяет вложенные таблички делать? Не посоветуешь, где лучше почитать по нему?
Саша, привет! На самом деле очень не советую лезть в эти модели. Механизм крайне обширен, и не до конца проработан. Эта основа готовилась под конкретный проект и там индивидуально дорабатывалась, и на это были серьезные бюджеты. Там дело не только в сложных выборках, но и в интерфейсах управления и т.п. Пока для тебя наиболее приемлемый вариант — использовать TV-шки и migxDB. Как разную стоимость реализовать в зависимости от отдельных параметров — ты это уже все проходил. К сожалению, пока более удобного ничего не могу посоветовать.