Павел Левин

Павел Левин

С нами с 30 августа 2013; Место в рейтинге пользователей: #149
Павел Левин
07 июля 2014, 14:25
0
Это не тяжелая операция? или там простой плагин с массивом данных? и реагирует на событие «сохранение документа»?
Павел Левин
30 июня 2014, 21:45
0
Что я должен был прочесть)? Я прочел весь пост.
Павел Левин
30 июня 2014, 19:15
-1
Существуют и аналоги, и их много.
Павел Левин
29 июня 2014, 19:47
0
Та не вопрос. Простой сниппет, код поймет любой.

Имя сниппета: linkGen

Код сниппета:

<?php
if (!isset($input)) {return;}
if (!isset($resource)) {$resource = '/poisk-tehniki.html';}

$array = explode(", ", $input);

$result = '';

if ($array == false) {
    $result = '<a href="'.$resource.'?f_'.$name.'='.$input.'">'.$input.'</a>';
} else {
   foreach ($array as $key => $value) {
        $result .= ($key==0?'':', ').'<a href="'.$resource.'?f_'.$name.'='.$value.'">'.$value.'</a>';
   } 
}

return $result;

Пример вызова:
[[*region:linkGen]]

До:
Москва, Краснодар

В modx хранится так:
Москва||Краснодар
параметр вывода tv, «Разделитель» где значение ", "

После:
<a href="/poisk-tehniki.html?f_region=Москва">Москва</a>, <a href="/poisk-tehniki.html?f_region=Краснодар">Краснодар</a>


или

Пример вызова:
[[*year:linkGen]]

До:
2009

После:
<a href="/poisk-tehniki.html?f_year=2009">2009</a>
Павел Левин
29 июня 2014, 18:57
0
не, так не интересно)
Павел Левин
29 июня 2014, 16:03
0
Теперь стало понятно и всё получилось.
Спасибо =)

Я создал группу параметров "catalog_filters", выбрал её, добавил нужных параметров и их значения, сохранил параметр.

Шпаргалка для нуждающихся:
file.modx.pro/files/3/a/9/3a917fb0f0560a807302cf16426ea663.png

Павел Левин
29 июня 2014, 14:26
0
Очистил вызов, создал параметр, ничего не выводит.

Делаю так: https://file.modx.pro/files/b/b/1/bb161c0dc18fcdb69a9c5fba54af350a.png

тоже самое я проделал и с «Сниппет: tmCatalog»
Павел Левин
29 июня 2014, 14:11
0
Да, это я единственное не понял из всей инструкции =), попробую.
Павел Левин
29 июня 2014, 13:07
0
Да, оно странно работает, но первая проблема была в моей невнимательности, тут же я всё точно проверил =), если работает у других, то и у меня заработает, когда я пойму в чем особенность работы без шопкипера.
Павел Левин
28 июня 2014, 23:24
0
Василий =) ссылка в никуда, что делать?
Павел Левин
25 июня 2014, 23:34
0
Всё! Разобрался, косяк был мой т.к. я неверное подставил мои шаблоны для фильтров tm2_filterTpl_select.tpl и tm2_filterOuterTpl_select.tpl я там намудрил в чанках и неправильно подставил новые шаблоны в параметры, от сюда такой разрыв мозга =) жесть.

Помогла наблюдательность, смотрел дефолтные шаблоны и заподозрил косяк).

Здорово! Круть.
Павел Левин
25 июня 2014, 23:11
0
Глянул mFilter2 и не увидел возможности выводить данные в select ну, а остальные возможности плагина не требуются.

Попытался запустить его на тестовом… повозился, потыкал, не получилось и успокоился.
Возможно придется мудрить что-то своё или ковырять дальше tagManager.

Спасибо.
Павел Левин
25 июня 2014, 23:08
0
Да, ради интереса поставил данные туда, думаю это не критичные параметры.

Результат не изменился. Вся надежда на разработчика.

Не поленился зашел на сайт салютленда, не увидел там фильтра.
Да и на официальном демо сайте фильтр представлен из чекбоксов и бегунка, но если есть возможность вывода в селект, странно, что он не работает (шаблон то дефолтный с селектом).

Павел Левин
25 июня 2014, 21:42
0
Настройки системы? Я ничего не настраивал нигде т.к. настройка требуется только для работы с шопкипером, я же не использую его.
Павел Левин
25 июня 2014, 21:25
0
Залез в код, вывел массив:

Array
(
    [id] => 1
    [tvid] => 1
    [tvname] => mark
    [tvcaption] => Марка
    [tags] => Array
        (
            [0] => Array
                (
                    [value] => Камаз
                    [active] => 1
                )

        )

    [index] => 0
)
Array
(
    [id] => 2
    [tvid] => 2
    [tvname] => capacity
    [tvcaption] => Грузоподъемность
    [tags] => Array
        (
            [0] => Array
                (
                    [value] => 3000
                    [active] => 1
                )

        )

    [index] => 1
)
Array
(
    [id] => 3
    [tvid] => 3
    [tvname] => lease
    [tvcaption] => Срок аренды
    [tags] => Array
        (
            [0] => Array
                (
                    [value] => 90
                    [active] => 1
                )

        )

    [index] => 2
)
Array
(
    [id] => 4
    [tvid] => 4
    [tvname] => kind
    [tvcaption] => Вид техники
    [tags] => Array
        (
            [0] => Array
                (
                    [value] => 7
                    [active] => 1
                )

        )

    [index] => 3
)
Array
(
    [id] => 6
    [tvid] => 6
    [tvname] => region
    [tvcaption] => Регионы
    [tags] => Array
        (
            [0] => Array
                (
                    [value] => Москва||Московская область
                    [active] => 1
                )

            [1] => Array
                (
                    [value] => Тюмень
                    [active] => 1
                )

        )

    [index] => 4
)
Array
(
    [id] => 9
    [tvid] => 9
    [tvname] => model
    [tvcaption] => Модель
    [tags] => Array
        (
            [0] => Array
                (
                    [value] => 5050
                    [active] => 1
                )

        )

    [index] => 5
)
Array
(
    [id] => 10
    [tvid] => 10
    [tvname] => year
    [tvcaption] => Год выпуска
    [tags] => Array
        (
            [0] => Array
                (
                    [value] => 2010
                    [active] => 1
                )

        )

    [index] => 6
)
т.е. значения там имеются, просто не хотят выводиться, кусок кода который отправляет значения в чанк:

/**
     * getFiltersOutput
     *
     */
    public function getFiltersOutput(){
        
        $output = '';
        
        $tags_names_arr = array();
        $c_ids = $this->getCateroryIds();
        
        //Если для текущей категории нет сохраненных фильтров, ищем сохраненные в родительских
        if(!in_array($this->config['categoryId'], $c_ids)){
            
            $this->getParentSiblingId($c_ids);
            
        }
        
        $c = $this->modx->newQuery('tagManager');
        $c->where(array(
            'category' => $this->config['categoryId']
        ));
        $c->sortby('`index`','ASC');
        $c->select(array('id','tvid','tvname','tvcaption','tags','index'));
        if ($c->prepare() && $c->stmt->execute()) {
            
            while ($row = $c->stmt->fetch(PDO::FETCH_ASSOC)) {
                
                $inner_out = '';
                $row['tags'] = $row['tags'] ? json_decode($row['tags'],true) : array();
                
                $is_numeric = in_array( $row['tvname'], $this->config['numericFields'] ) && count($row['tags']) >= 2;
                $is_multitag = in_array( $row['tvname'], $this->config['multitagsFields'] );
                $flt_field_name = $is_multitag ? 'f_'.$row['tvname'].'[like][]' : 'f_'.$row['tvname'].'[]';
                
                if(!in_array( $row['tvname'], $tags_names_arr )) array_push( $tags_names_arr, $row['tvname'] );
                
                //if is numeric
                if( $is_numeric ){
                    
                    $chunk_name_outer = $this->config['filterNumericOuterTpl'];
                    $chunk_name = $this->config['filterNumericTpl'];
                    
                    $chunkArr = array(
                        'name' => $row['tvname'],
                        'min' => ( $row['tags'][0]['active'] ? $row['tags'][0]['value'] : '0' ),
                        'max' => ( $row['tags'][1]['active'] ? $row['tags'][1]['value'] : '0' ),
                        'idx' => $key
                    );
                    
                    $inner_out .= $this->modx->getChunk( $chunk_name, $chunkArr );
                    $inner_out .= "\n";
                    
                }else{
                    
                    $chunk_name_outer = $this->config['filterOuterTpl'];
                    $chunk_name = $this->config['filterTpl'];
                    
                    foreach($row['tags'] as $key => $val){
                        
                        if($val['active']){
                            $chunkArr = array(
                                'name' => $row['tvname'],
                                'flt_name' => $flt_field_name,
                                'value' => str_replace('&','_n_',$val['value']),
                                'value_name' => htmlspecialchars($val['value']),
                                'idx' => $key
                            );
                            
                            $inner_out .= $this->modx->getChunk( $chunk_name, $chunkArr );
                            $inner_out .= "\n";
                        }
                        
                    }
                }
                
                $chunkArr = array(
                    'name' => $row['tvname'],
                    'flt_name' => $flt_field_name,
                    'caption' => $row['tvcaption'],
                    'inner' => $inner_out
                );
                
                $output .= $this->modx->getChunk( $chunk_name_outer, $chunkArr );
                $output .= "\n";
                
                //echo '<pre>'.print_r($row, true).'</pre>';
                
            }
            
        }
        
        if( $this->config['jsMap'] ) $output .= $this->generateJSMap($tags_names_arr);
        
        return $output;
        
    }
Павел Левин
25 июня 2014, 20:53
0
Да, я так же думал, но оказалось, что и это не помогает, я попросту перекинул шаблоны с вызовом данного фильтра в основной каталог, результата не дало никакого. Всё 1 в 1, два региона 0 данных в селекторе.

Сверх странности)
Павел Левин
25 июня 2014, 12:11
0
Я думал о нем, но там не понятно на сколько он удобен для конечного пользователя, сможет ли заказчик контролировать выводимые значения и возможно ли выводить все доступные значения в select… пожалуй нужно зайти на тестовый сайт глянуть возможности.

По сути это простой сайт, где есть каталог техники и возможность фильтрации.
tagManager 2.0 — как раз узкопрофильно подходит к этой задаче без перегрузки функционала.

Буду ждать помощи на офф форму, мне показалось меня там не любят с первого поста =) или вопрос на столько туп, что на него не хотят обращать внимание. Перекопал весь форму, аналогичного вопроса нет.
Павел Левин
27 марта 2014, 19:26
0
Спасибо.
Буду читать и пробовать.