На демо сайте баг с "показать еще". Если открыть список товаров и обновить страницу, то отобразит только номер текущей страницы (например ?page=3), а кнопка "показать еще" уже не активна и текст на ней неверный
Сообщение от участника City Shafl
А нет, инициализация на странице есть и pdopage js тоже
<script type="text/javascript">pdoPage.initialize({"wrapper":"#pdopage","rows":".marks_wrap","pagination":"#pdopage .pagination","link":"#pdopage .pagination a","more":"#pdopage .btn-more","moreTpl":"<div class=\"see_more btn-more\">\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u0449\u0435<\/div>","mode":"button","history":0,"pageVarKey":"page","pageLimit":"4","assetsUrl":"\/assets\/components\/pdotools\/","connectorUrl":"\/assets\/components\/pdotools\/connector.php","pageId":7,"hash":"aa338f333d80711d0536fd7946e9f18fd0fcceda","scrollTop":true});</script>
<div id="pdopage">
<div id="nav_wrap">
[[!+page.nav]]
</div>
<div class="row marks_wrap" id="products">
[[!tmCatalog]]
</div>
</div>
pages_cont1: '#nav_wrap',//Селектор контейнера с постраничной навигацией
Результат не изменился, не работает.
Плюс, после перехода по страницам при помощи pjax и заходе на страницу с фильтром, то и кнопки "еще" и товаров нет. Но фильтры передают параметры.
Может надо как-то инициализировать pdoPage? Для tagmanagera я делал так
$(document).on('ready pjax:end', function(event) {
tmFilters.init();
});
Ошибка была, если в наборе параметра поставить "ajaxMode"="default". Если поставить "button", то ошибки нет. Но при фильтрации товары исчезают. До фильтрации загрузка кнопкой работает.
Сделал так
pages_cont1: '#pdopage .pagination',//Селектор контейнера с постраничной навигацией
pages_cont2: '',//Селектор второго контейнера с постраничной навигацией. Если нет, оставить пустым.
jQuery на странице вызывается только 1 раз (v3.3.1). Подключается еще pjax.
Ничего не изменилось, ошибка осталась.
config: {
filters_cont: '#filters',//Селектор оберточного элемента блоков с фильтрами
sortby: 'pagetitle',//Имя поля сортировки по умолчанию
sortdir: 'asc',//Направление сортировки по умолчанию
numeric: ['price', 'weight'],//Имена доп. полей с числовыми значениями
multitags: ['tags'],//Имена доп. полей с множественными значениями
guard_key: '#',//Разделитель для множественных значений
products_cont: '#products',//Селектор контейнера с выводом товаров
filter_slider: 'div.range-slider',//Селектор слайдеров (ползунок для числовых значений)
filter_slider_cont: 'div.filter_slider',//Селектор контейнера со слайдером
pages_cont1: '#pages',//Селектор контейнера с постраничной навигацией
pages_cont2: '#pages2',//Селектор второго контейнера с постраничной навигацией. Если нет, оставить пустым.
active_page_selector: '.current',//селектор номера текущей страницы внутри контейнера (pages_cont)
filters_type: 'default',//Тип фильтрации. Возможные значения:
// default (показ числа товаров по каждому фильтру и блокирование пустых вариантов),
// only_block (только блокирование пустых париантов),
// none (не показывать цифры и не блокировать)
filter_delay: 700,//Задержка до отправления запроса на сервер (сбрасывается после каждой отметки фильтра)
price_field: 'price',//Название поля или TV цены товара
multi_currency: true,//Мультивалютность включить / выключить (true/false)
base_url: '/',
ajax_url: 'assets/components/tag_manager2/connector_fe.php',
ajax_loader: 'assets/components/tag_manager2/img/ajaxtm.svg'
}
еще в консоли ошибка при попытке фильтрации
Uncaught TypeError: Cannot read property 'state' of undefined
at pdopage.min.js:1
at dispatch (jquery.min.js:2)
at y.handle (jquery.min.js:2)
at Object.trigger (jquery.min.js:2)
at jquery.min.js:2
at Function.each (jquery.min.js:2)
at w.fn.init.each (jquery.min.js:2)
at w.fn.init.trigger (jquery.min.js:2)
at Object.trigger (jquery.history.js:1)
at Function.h.pushState (jquery.history.js:1)
Пытаюсь заменить getPage на pdoPage для вывода результатов в tagmanager2. Что-то не особо получается.
(все последней версии)
Вот настройки: tagmanager2
Набор параметров
Вызов:
[[tmFilters?
&jsScript=`0`
&filterOuterTpl=`tm2_filterOuterTpl`
&filterTpl=`tm2_filterTpl`
&filterNumericOuterTpl=`tm2_filterOuterTpl`
&filterNumericTpl=`tm2_filterNumericTpl`
&jsMap=`1`
&toPlaceholder=`filters`
]]
<div id="filters">
<form action="[[~[[*id]]]]" method="get">
<input type="hidden" name="page_id" value="[[*id]]" disabled="disabled" />
[[+filters]]
<a class="reset_fil" onclick="tmFilters.resetFilters(); return false;">Сбросить фильтр</a>
</form>
</div>
<div id="pdopage">
[[!+page.nav]]
<div class="row marks_wrap" id="products">
[[!tmCatalog]]
</div>
</div>
Фильтр работает, но вот пагинация глючит. По страницам (если не загрузка кнопкой) переходит, но не учитывает сам фильтр, т.е на странице покажет товар не подходящий по фильтру, или вообще товары пропадат(скрываются).
Планирую делать каталог с ajax подгрузкой страниц с использованием pjax. Корзины не будет, только заявка на почту.
- Если кто делал такое, на что обратить внимание?
- Как будет работать ajax фильтрация tagmanager2 на подгруженной странице? Сбоев не будет и тд. ?
Я добавлял свои фун-ии в success ajax'a. Файл assets/components/tag_manager2/js/web/filters.js блок "ajaxRequest (~814 строка)".
jQuery.ajax({
url: tmFilters.config.base_url + tmFilters.config.ajax_url,
type: "GET",
cache: false,
data: state_data,
dataType: 'json',
success: function(response) {
if (typeof response.prod_list != 'pagination') {
$(tmFilters.config.products_cont).html( response.prod_list );
$('html,body').animate({
scrollTop: Math.round($(tmFilters.config.products_cont).position().top)
});
}
if (typeof response.pages != 'undefined'){
$(tmFilters.config.pages_cont1).html( response.pages );
if ( tmFilters.config.pages_cont2.length > 0 ){
$(tmFilters.config.pages_cont2).html( response.pages );
}
}
tmFilters.ajaxPreload( $(tmFilters.config.products_cont), false );
//tm_onFilterAfter
if ( typeof tm_onFilterAfter == 'function' ) {
tm_onFilterAfter( response.total, response.pageCount, response.onPageLimit );
}
//СВОЯ ФУН-ИЯ
my_function();
},
error: function(jqXHR,textStatus,errorThrown){
if(typeof(console)!='undefined') console.log(jqXHR,textStatus,errorThrown);
}
});
Участник @andchir написал в Фильтрация до импорта (catalogfill2):
Пример:
//функция для фильтрации значений при ИМПОРТЕ function filter_import($value_arr){ $output_arr = $value_arr; if (isset($output_arr['tv'][10]) && intval($output_arr['tv'][10]) === 0) { return array(); } return $output_arr; }
10 - ID поля "На складе".
Так вы же пример этот и дали.