[решено] tagManager 2.0 - не заводится, барахлит..
Здравствуйте!
Какой день пытаюсь понять, что не так я делаю, ведь есть инструкция, которая приложена разработчиком и отличный интерфейс с ангуляром, только вот… не хочет он работать как надобно.
tagManager 2.0 — отличное дополнение, которое не хочет работать (с и без шопкипера).
Всё отлично до момента попытки вывода фильтров, выводим:
Сами же документы, которые необходимо фильтровать, находятся в другом контейнере.
Вот что имеем:
если я добавляю еще одно значение (они берутся с tv параметров указанных в документе), то результат огорчает:
он просто добавляет новый селект в список, но при этом все селекторы пусты и имеют лишь значение по умолчанию, которое указывается в шаблоне:
по прежнему я не понимаю, нужно ли в именах tv параметров писать префикс "f_", думаю что это не требуется т.к. в шаблоне он статично введен.
Я в тупике т.к. это очень странно всё, или я что-то упускаю в инструкции:
Какой день пытаюсь понять, что не так я делаю, ведь есть инструкция, которая приложена разработчиком и отличный интерфейс с ангуляром, только вот… не хочет он работать как надобно.
tagManager 2.0 — отличное дополнение, которое не хочет работать (с и без шопкипера).
Всё отлично до момента попытки вывода фильтров, выводим:
[[tmFilters?
&filterOuterTpl=`tpl.tm2.filter-outer`
&filterTpl=`tpl.tm2.filter-outer-select`
&filterNumericOuterTpl=`tpl.tm2.filter-outer`
&filterNumericTpl=`tm2_filterNumericTpl`
&jsMap=`1`
&toPlaceholder=`filters`
]]
<div class="form-search" id="filters">
<form action="[[~[[*id]]]]" method="get">
<input type="hidden" name="page_id" value="[[*id]]" disabled="disabled" />
[[+filters]]
<div class="line text_center">
<button type="submit" class="submit">Подобрать</button>
<button type="button" onclick="tmFilters.resetFilters(); return false;" class="submit clear">Очистить форму</button>
</div>
</form>
</div><!-- .form-search -->
<div class="item-wrap">
<div id="products">
[[!tmCatalog?
&tpl=`tpl.mini-cart`
&includeTVs=`1`
&includeTVList=`price,image`
]]
<div class="clearfix"></div>
</div>
<ul class="pages" id="pages2">
[[!+page.nav]]
</ul>
Выводим в шаблоне для раздела «поиска/фильтрации».Сами же документы, которые необходимо фильтровать, находятся в другом контейнере.
Вот что имеем:
если я добавляю еще одно значение (они берутся с tv параметров указанных в документе), то результат огорчает:
он просто добавляет новый селект в список, но при этом все селекторы пусты и имеют лишь значение по умолчанию, которое указывается в шаблоне:
<div class="line">
<div class="line-name">[[+caption]]</div>
<div class="line-value">
<select name="f_[[+name]]">
<option value="">[[+caption]]</option>
[[+inner]]
</select>
</div>
</div>
по прежнему я не понимаю, нужно ли в именах tv параметров писать префикс "f_", думаю что это не требуется т.к. в шаблоне он статично введен.
Я в тупике т.к. это очень странно всё, или я что-то упускаю в инструкции:
tagManager 2.0— Вопрос на офф форуме: без ответа (на данный момент)
modx-shopkeeper.ru/
==================================================================
Компонент для фильтрации товаров в каталоге и управления фильтрами.
Функции:
— Управление фильтрами. Изменение порядка сортировки, переименование названий групп фильтров и др.
— Групповое изменение значений доп. параметров товаров.
— Простая фильтрация товаров в каталоге (без ajax).
— Ajax-фильтрация товаров в каталоге с выводом количества найденных товаров по каждому фильтру.
— Динамическое изменение вида вывода товаров (изменение шаблонов).
— Поддержка мультивалютности.
==================================================================
tmFilters — сниппет выводит фильтры. Вызывать кэшированным (без "!").
tmCatalog — сниппет выводит товары каталога и фильтрует. Вызывать не кэшированным (с "!").
Необходимо установить сниппет getProducts (http://modx.com/extras/package/getproducts).
==================================================================
Сниппет tmFilters
Параметры сниппета:
filterOuterTpl — Чанк блоки с фильтрами. По умолчанию — tm2_filterOuterTpl.
filterTpl — Чанк одного фильтра. По умолчанию — tm2_filterTpl.
filterNumericOuterTpl — Чанк блока с фильтрами с числовыми значениями. По умолчанию — tm2_filterOuterTpl.
filterNumericTpl — Чанк фильтра с числовыми значениями. По умолчанию — tm2_filterNumericTpl.
jsMap — Генерация JS-карты данных товаров для возможности вывода количества найденных товаров по каждому фильтру ( 1 — да, 0 — нет). По умолчанию: 0.
toPlaceholder — Имя плейсхолдера для вывода. Если не задано, выводится в месте вызова сниппета.
style — Подключить CSS-файл стилей ( 1 — да, 0 — нет). По умолчанию: 1.
jsScript — Подключить все необходимые JS-скрипты ( 1 — да, 0 — нет). По умолчанию: 1.
filtersType — Тип фильтрации. Возможные значения: filters, filters_simple. По умолчанию: filters.
Используется библиотека jQuery.
Если у вас на сайте уже используется jQuery, повторно она подключаться не будет (сделана автоматическая проверка).
Для тонкой настройки открыть в текстовом редакторе файл
/assets/components/tag_manager2/js/web/filters.js
или
/assets/components/tag_manager2/js/web/filters_simple.js
Настройки вверху, в коде есть комментарии.
Если используется ajax-фильтрация (filtersType = filters), в форму фильтрации добавить скрытое поле (см. пример 3):
/>
Параметр «filters_type» в filters.js
Для «filters_type» = «default» (показ числа товаров по каждому фильтру и блокирование пустых вариантов)
или «only_block» (только блокирование пустых париантов) необходимо включить параметр «jsMap» у сниппета «tmFilters».
Если «filters_type» = «none», «jsMap» рекомендуется выключить.
==================================================================
Сниппет tmCatalog
Сниппет не имеет параметров, т.к. является оберточным сниппетом для «getPage» и «getProducts».
Используются параметры из набора параметров для сниппета «getPage», указанного в настройках системы — tag_mgr2.propertySetName.
Можно указывать параметры для «getPage» и «getProducts».
Пример:
[[!tmCatalog?
&parents=`-1`
&resources=`110,111,112`
&tpl=`product`
]]
В данном случае будут выводиться только товары с ID = 110,111,112.
Можно использовать для поиска, выводить найденные ID товаров с помощью отдельного сниппета и фильтровать найденные товары.
==================================================================
Вывод товаров из таблицы, созданной в MIGXDB (http://modx.com/extras/package/migx)
Если для хранения товаров импользуется отдельная таблица в БД, созданная с помощью MIGXDB,
в настройках компонента «tagManager2» в параметрах «tag_mgr2.className» и «tag_mgr2.packageName» указать
название класса и название компонента вашей таблицы в БД.
Настройки «className» и «packageName» можно указать в параметрах шаблона категории товаров:
1. Открыть шаблон категории товаров.
2. Перейти на вкладку «Параметры».
3. Разблокировать параметры по умолчанию и добавить параметры:
prodClassName — Имя класса таблицы БД (например «ShopContent»).
prodPackageName — Имя пакета таблицы БД (например «shop»).
prodPropertySetName — имя набора параметров для сниппета getPage, который нужно использовать для фильтрации для текущего шаблона (не обязателный параметр).
4. Сохранить изменения.
==================================================================
==================================================================
Множественные значения фильтров
Если нужно сделать возможность задавать множественные значения для параметра, нужно создать TV параметр с типом ввода «Флажки (checkbox)» или «Список (множественный выбор)».
Поле «Возможные значения» заполнить по такому принципу:
акция==#акция#||лидер продаж==#лидер продаж#||новинка==#новинка#
Разделитель "#" можно изменить в конфигурации компонента — tag_mgr2.guard_key.
Имена таких TV нужно указать в скрипте filters.js в массиве
'multitags': ['tag']
— Для множественных значений, созданных через тип ввода «param-edit», если используется MIGX для создания таблицы БД товаров,
в настройках поля (в MIGX) указать:
Input TV = param1 (param1 — название TV с типом ввода «param-edit»)
Input TV type = param-edit
Для MIGX 2.5.8 указание «Input TV» при использовании не стандартных типов ввода обязательно. Возможно в будущих версиях это будет исправлено.
==================================================================
==================================================================
Динамическое изменение шаблона вывода списка товаров
На данный момент сделана готовая возможность изменения шаблона с помошью JS-скрипта /assets/components/tag_manager/js/web/view_switch.js.
Скрипт ставит куку и обновляет вывод.
1. Добавить скрипт на страницу
2. В набор параметров «getPage», который используется для вывода товаров, добавить параметр «tpl_list» со списком шаблонов (чанков) через запятую.
Например: «product,product_list».
3. В тело страницы вставить ссылки для изменения вида. У элемента-контейнера должен быть id=«viewSwitch».
Пример:
Показывать:
картинками
списком
==================================================================
==================================================================
Мультивалютность
Поддерживается мультивалютность, используемая Shopkeeper. По настройке мультивалютности читать документацию Shopkeeper.
Для работы tagManager с мультивалютностью необходимо выполнить:
1. Если используется аякс-фильтрация, открыть в текстовом редакторе /assets/components/tag_manager2/js/web/filters.js
и включить мультивалютность — multi_currency = true.
2. В этом же файле указать правильное название TV параметра или поля с ценой — price_field.
3. В настройках системы в параметре tag_mgr2.priceName нужно указать название TV параметра или поля с ценой (по умолчанию «price»).
4. Версия Shopkeeper должна быть не меньше 2.3.4.
==================================================================
==================================================================
Стилизация селектов
Для стилизации селектов рекомендуется использовать jQuery-плагин SelectBoxIt — gregfranko.com/jquery.selectBoxIt.js/index.html.
Данный плагин поддерживается tagManager.
Пример подключение стиля и скриптов SelectBoxIt:
/>
==================================================================
==================================================================
Пример 1. Простая фильтрация с чекбоксами (множественный выбор).
[[tmFilters?
&filterOuterTpl=`tm2_filterOuterTpl`
&filterTpl=`tm2_filterTpl`
&filterNumericOuterTpl=`tm2_filterOuterTpl`
&filterNumericTpl=`tm2_filterNumericTpl`
&filtersType=`filters_simple`
&toPlaceholder=`filters`
]]
Сортировать по:
названию
цене
дате
В порядке:
возрастания
убывания
Выводить по:
10
20
40
[[+filters]]
Подобрать
Сбросить
==================================================================
[[!tmCatalog]]
[[!+page.nav]]
==================================================================
==================================================================
Пример 2. Сортировка отдельно от формы фильтров. Простая фильтрация с фильтрами в виде выпадающих списков (одиночный выбор).
/>
/>
/>
[[tmFilters?
&filterOuterTpl=`tm2_filterOuterTpl_select`
&filterTpl=`tm2_filterTpl_select`
&filterNumericOuterTpl=`tm2_filterOuterTpl`
&filterNumericTpl=`tm2_filterNumericTpl`
&filtersType=`filters_simple`
]]
Подобрать
Сбросить
==================================================================
по названию
по цене
по дате
по возростанию
по убыванию
10
20
40
[[!tmCatalog]]
[[!+page.nav]]
==================================================================
==================================================================
Пример 3. Ajax-фильтрация, сортировка отдельно от формы фильтров.
[[tmFilters?
&filterOuterTpl=`tm2_filterOuterTpl`
&filterTpl=`tm2_filterTpl`
&filterNumericOuterTpl=`tm2_filterOuterTpl`
&filterNumericTpl=`tm2_filterNumericTpl`
&jsMap=`1`
&toPlaceholder=`filters`
]]
/>
[[+filters]]
Сбросить
==================================================================
по названию
по цене
по дате
по возростанию
по убыванию
4
10
20
40
[[!tmCatalog]]
[[!+page.nav]]
Комментарии: 17
Тут, наверное, только автор дополнения сможет помочь — компонент вроде бы еще в разработке.
Я могу только посоветовать потестировать mSearch2 — он умеет работать с ТВ и, соответственно, с Shopkeeper.
Я могу только посоветовать потестировать mSearch2 — он умеет работать с ТВ и, соответственно, с Shopkeeper.
Я думал о нем, но там не понятно на сколько он удобен для конечного пользователя, сможет ли заказчик контролировать выводимые значения и возможно ли выводить все доступные значения в select… пожалуй нужно зайти на тестовый сайт глянуть возможности.
По сути это простой сайт, где есть каталог техники и возможность фильтрации.
tagManager 2.0 — как раз узкопрофильно подходит к этой задаче без перегрузки функционала.
Буду ждать помощи на офф форму, мне показалось меня там не любят с первого поста =) или вопрос на столько туп, что на него не хотят обращать внимание. Перекопал весь форму, аналогичного вопроса нет.
По сути это простой сайт, где есть каталог техники и возможность фильтрации.
tagManager 2.0 — как раз узкопрофильно подходит к этой задаче без перегрузки функционала.
Буду ждать помощи на офф форму, мне показалось меня там не любят с первого поста =) или вопрос на столько туп, что на него не хотят обращать внимание. Перекопал весь форму, аналогичного вопроса нет.
mSearch2 нужно настроить один раз, а дальше он генерирует все фильтры динамически, исходя из параметров выводимых ресурсов.
То есть, что выводит — так и строит фильтры, в админке ничего делать не нужно.
Учитывая, что компонент осуществляет морфологический поиск и фильтрацию найденного, заранее создавать фильтры в принципе нельзя — никто не знает, что будет найдено.
В этом принципиальное различие дополнений. А дальше смотри как оно работает на тестовом сайте и думай, стоит ли его купить вместе с поддержкой, или будешь и дальше разбираться с бесплатным.
Документация — docs.modx.pro/components/msearch2/
То есть, что выводит — так и строит фильтры, в админке ничего делать не нужно.
Учитывая, что компонент осуществляет морфологический поиск и фильтрацию найденного, заранее создавать фильтры в принципе нельзя — никто не знает, что будет найдено.
В этом принципиальное различие дополнений. А дальше смотри как оно работает на тестовом сайте и думай, стоит ли его купить вместе с поддержкой, или будешь и дальше разбираться с бесплатным.
Документация — docs.modx.pro/components/msearch2/
Глянул mFilter2 и не увидел возможности выводить данные в select ну, а остальные возможности плагина не требуются.
Попытался запустить его на тестовом… повозился, потыкал, не получилось и успокоился.
Возможно придется мудрить что-то своё или ковырять дальше tagManager.
Спасибо.
Попытался запустить его на тестовом… повозился, потыкал, не получилось и успокоился.
Возможно придется мудрить что-то своё или ковырять дальше tagManager.
Спасибо.
На самом деле если надо примерно так, как у меня вот тут, то проще руками написать. tagManager2 хорош для фасетного поиска (это когда ajax и с циферками по количеству возможных вариантов для каждого значения параметра), а если планируется выводить ТВ в селекты, то, как я понимаю, никакого фасетного поиска не требуется.
Недавно как раз разбирался с этим компонентом.
Насколько я понял, выводить фильтр в документе можно только для тех товаров, которые физически вложены в него. В вашем случае надо весь каталог перенести в документ Поиск техники, чтобы все фильтруемые товары были вложены именно в него. А фильтровать в одном документе товары из другого контейнера нельзя. Опять таки, это мои догадки, но их подтверждают факты.
Насколько я понял, выводить фильтр в документе можно только для тех товаров, которые физически вложены в него. В вашем случае надо весь каталог перенести в документ Поиск техники, чтобы все фильтруемые товары были вложены именно в него. А фильтровать в одном документе товары из другого контейнера нельзя. Опять таки, это мои догадки, но их подтверждают факты.
Да, я так же думал, но оказалось, что и это не помогает, я попросту перекинул шаблоны с вызовом данного фильтра в основной каталог, результата не дало никакого. Всё 1 в 1, два региона 0 данных в селекторе.
Сверх странности)
Сверх странности)
Я буквально в понедельник настраивал у себя, все работало, ajax-фильтрация функционировала.
Правда я в последствии отказался от использования компонента, ибо он не подходит по ряду критериев, но его корректную работу я у себя настраивал.
А в файле assets/components/tag_manager2/js/web/filters.js или assets/components/tag_manager2/js/web/filters_simple.js и в настройках системы параметры настраивали?
Правда я в последствии отказался от использования компонента, ибо он не подходит по ряду критериев, но его корректную работу я у себя настраивал.
А в файле assets/components/tag_manager2/js/web/filters.js или assets/components/tag_manager2/js/web/filters_simple.js и в настройках системы параметры настраивали?
Залез в код, вывел массив:
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;
}
Даже не знаю, что сказать, я так глубоко компонент не копал :)
Просто настроил все необходимые параметры в .js файлах filters и в настройках системы.
Все tpl для вывода фильтров я оставлял по умолчанию. Вы свои подставляете или тоже по умолчанию берете? Может в них какой-нибудь плейсхолдер не указан?
Просто настроил все необходимые параметры в .js файлах filters и в настройках системы.
Все tpl для вывода фильтров я оставлял по умолчанию. Вы свои подставляете или тоже по умолчанию берете? Может в них какой-нибудь плейсхолдер не указан?
Настройки системы? Я ничего не настраивал нигде т.к. настройка требуется только для работы с шопкипером, я же не использую его.
Думаю, что все-таки стоит туда заглянуть. В моем случае настройки выглядели вот так
Настройки
В принципе их назначение понятно из названий
Настройки
В принципе их назначение понятно из названий
Да, ради интереса поставил данные туда, думаю это не критичные параметры.
Результат не изменился. Вся надежда на разработчика.
Не поленился зашел на сайт салютленда, не увидел там фильтра.
Да и на официальном демо сайте фильтр представлен из чекбоксов и бегунка, но если есть возможность вывода в селект, странно, что он не работает (шаблон то дефолтный с селектом).
Результат не изменился. Вся надежда на разработчика.
Не поленился зашел на сайт салютленда, не увидел там фильтра.
Да и на официальном демо сайте фильтр представлен из чекбоксов и бегунка, но если есть возможность вывода в селект, странно, что он не работает (шаблон то дефолтный с селектом).
На Салютлэнде, как я и писал, я потестировал компонент и отказался от него, написав фильтр руками, ибо кое-что не подходило под нужды сайта. Но компонент работал, и селекты как раз у меня и использовались. Фильтр был тут ссылка, в блоке слева.
Если завтра будет время, то с утра создам тестовый раздел и прикручу туда tagManager2 для демонстрации.
Если завтра будет время, то с утра создам тестовый раздел и прикручу туда tagManager2 для демонстрации.
Всё! Разобрался, косяк был мой т.к. я неверное подставил мои шаблоны для фильтров tm2_filterTpl_select.tpl и tm2_filterOuterTpl_select.tpl я там намудрил в чанках и неправильно подставил новые шаблоны в параметры, от сюда такой разрыв мозга =) жесть.
Помогла наблюдательность, смотрел дефолтные шаблоны и заподозрил косяк).
Здорово! Круть.
Помогла наблюдательность, смотрел дефолтные шаблоны и заподозрил косяк).
Здорово! Круть.
Вот и хорошо! ;)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.