artem375 21 апреля 2014 1 5

вот процессор для выборки ВСЕХ дочерних категорий.

<?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';


где что подкрутить чтобы выводился только один уровень категорий.
5 комментариев
Fi1osof1
Fi1osof 21 апреля 2014г в 14:19 #
Да, надо бы допилить этот момент в сборке. А так вот ревизия: gist.github.com/Fi1osof/cedd7b34d38708abad81/revisions
a
artem375 21 апреля 2014г в 14:37 #
респект и уважуха, как там еще говорят не знаю, в общем спасибо!
Fi1osof1
Fi1osof 22 апреля 2014г в 08:58 #
Не за что! :)
b
belogwardeec 26 апреля 2014г в 13:02 #
Парни, где-то видел но никак не могу найти, как сделать простенький поиск товаров через getdata?
Fi1osof1
Fi1osof 27 апреля 2014г в 11:23 #
Вот здесь довольно много полезной информации на этот счет: modxclub.ru/blog/voprosy-spetsyalistov/256.html
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.