Skip to content

Instantly share code, notes, and snippets.

@Ibochkarev
Forked from petyagrill/mfilter_history.txt
Last active March 24, 2019 07:49
Show Gist options
  • Save Ibochkarev/5e0be949424a6d27086403e0e8acd24e to your computer and use it in GitHub Desktop.
Save Ibochkarev/5e0be949424a6d27086403e0e8acd24e to your computer and use it in GitHub Desktop.
Сохранение истории фильтрации и пагинации
// js
<script>
if(typeof addResults === "undefined"){
var page = 1;
} else {
var page = addResults;
}
var total = $('#mse2_total').text();
$(document).on('mse2_load', function(e, response) {
var data = response.data;
total = data.total;
var limit = mse2Config['limit'] || mse2Config['start_limit'];
page = data.page;
var more = $('#mse2_mfilter .btn_more');
if (page * limit >= total) {
more.hide();
}
else if (more.is(':hidden')) {
more.show();
}
setMore();
});
$(document).ready(function() {
mse2Config['page'] = page;
window.setTimeout(function() {
setMore();
}, 500);
});
function setMore() {
var btn = $('#mse2_mfilter .btn_more');
var limit = mse2Config['limit'] || mse2Config['start_limit'];
var remains = total - (page * limit);
if (remains > limit) {
remains = limit;
}
var results = 'результатов';
number = Math.abs(remains);
number %= 100;
if (number >= 5 && number <= 20) {
results = 'ковров';
} else {
number %= 10;
if (number == 1) {
results = 'ковер';
}
if (number >= 2 && number <= 4) {
results = 'ковра';
}
}
btn.text('Загрузить ещё ' +remains + ' ' + results + ' из ' + total);
}
</script>
// plugin addResults [OnMODXInit]
<?php
if($_SERVER['REQUEST_URI'] == '/assets/components/msearch2/action.php') {
$data = $_POST;
foreach(['key','action'] as $k){
unset($data[$k]);
}
$_SESSION['mSearch2Cache'][$data['pageId']] = $data;
}
// snippet addResults
<?php
$res = 0;
if(isset($_SESSION['mSearch2Cache'][$pageId])){
$data = $_SESSION['mSearch2Cache'][$pageId];
$url_data =$_GET;
$url_data['pageId'] =$pageId;
unset($url_data['q']);
$data = array_merge(array_diff($url_data,$data),array_diff($data,$url_data));
if(count($data) == 1 && isset($data['page']) && $data['page'] > 1 ){
$res = $data['page'];
}
}
return $res;
// call
{set $page = $_modx->runSnippet('!addResults',['pageId' => $_modx->resource.id])}
{var $params = [
'element' => 'msProducts',
'parents' => 12,
'paginator' => 'pdoPage',
'limit' => 10,
'tvPrefix' => 'tv_',
'showEmptyFilters' => 1,
'filters' => 'msoption|material,msoption|style,msoption|form',
'aliases' => 'msoption|material==material,msoption|style==style,msoption|form==form',
'tplFilter.row.material' => 'tpl.mFilter2.filter.checkbox',
'tplFilter.row.style' => 'tpl.mFilter2.filter.checkbox',
'tplFilter.row.form' => 'tpl.mFilter2.filter.checkbox',
'ajaxMode' => 'button',
'ajaxHistory' => '1',
]}
{if $page > 1}
{set $paramsAdd = $params}
{set $paramsAdd['limit'] = $params['limit']*($page-1)}
{set $paramsAdd['tplOuter'] = '@INLINE {$results}'}
{$_modx->setPlaceholder('addResults',$_modx->runSnippet('!mFilter2',$paramsAdd) )}
{set $params['page'] = $page}
{set $params['addResults'] = $paramsAdd['limit']}
<script>
var addResults = {$page};
</script>
{/if}
{$_modx->runSnippet('!mFilter2',$params)}
// там где {$results} нужно заменить на
{$_modx->getPlaceholder('addResults')}
{$results}
в чанке tplOuter
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment