Как вызвать mFilter2 через runSnippet с помощью API MODX ?

Здравствуйте, подскажите пожалуйста, я вызываю mFilter2 через MODX API, ну и к тому же это всё работает через ajax. То есть вот как всё происходит:
Есть ajax запрос:
$.ajax({
				type: "POST",
				url: 'assets/template/php/action.php',
				dataType: 'html',
				data:{"objectID":IdElem}, //Тут передаю ID ресурса на сервер
				success:function(msg) {
					$(".SectionContent").empty();
					$(".SectionContent").append(msg);
				}
			});
А на сервере вот такой обработчик:
define('MODX_API_MODE', true);
require_once($_SERVER['DOCUMENT_ROOT'].'/index.php');
$modx=new modX();
$modx->initialize('web');
/* include MODX_API END */
$IDResureses = $_POST["objectID"];
$parametrArray = array(
		'suggestions' => '',
		'class' => 'msProduct',
		'element' => 'msProducts',
		'limit' => '8',
		'sort' => 'ms_vendor|Id:asc',
		'parents' => $IDResureses,
		'tplOuter' => 'mSearch2_blockElement2',
		'tpls' => 'tpl.msProducts.row2',
		'includeTVs' => 'fileDowl,Proiz',
		'includeThumbs' => 'medium',
		'filters' => 'ms|vendor:vendors',
		'tplFilter.outer.ms|vendor' => 'tpl.mFilter2.filter.outerMain',
		'tplFilter.row.ms|vendor' => 'tpl.mFilter2.filter.checkboxMain',
		'ajaxMode' => 'button',
		'CurrentID' => $IDResureses, //Это я добавил параметр в mFilter2 в него передаю ID ресурса который пришел из ajax
		);
$output = $modx->runSnippet('mFilter2My',$parametrArray); //И сделал копию mFilter2 только с именем mFilter2My
$modx->getParser()->processElementTags('', $output, false, false, '[[', ']]', array(), 10);
$modx->getParser()->processElementTags('', $output, true, true, '[[', ']]', array(), 10);
$modx->log(1, print_r($output, 1));
echo $output;
Ну добавил в mFilter2 только по сути одно условие вот оно:
if (!empty($CurrentID)) {$modx->setPlaceholder('AjaxId',$CurrentID);}
И потом вот после того как php выполнился, получаю вот такую вот разметку, это код чанка 'tplOuter' => 'mSearch2_blockElement2', но соответственно вместо плейсхолдеров и всего остального я получаю html соответствующий:
<div class="msearch2" id="mse2_mfilter">
    <div class="row" id="filterBlock">
        <div class="col-md-12 main-filter-Config">
            <ul class="nav nav-pills nav-justified" id="myTab" role="tablist">
              <li class="nav-item checkElemBefore">
                <a class="witdhElement nav-link active" title="Фильтр по производителю" id="fabr-tab" data-toggle="tab" href="#fabr" role="tab" aria-controls="fabr" aria-selected="true">Производитель <span class="count-check-checkElem1 disNon">(<span class="elemcheck currentCheck-checkElem1"></span> из <span class="elemcheck allCheckbox-checkElem1"></span>)</span></a>
              </li>
            </ul>
            <div class="main-line-default"></div>
            <form action="[[+AjaxId]]" method="post" id="mse2_filters">
                <div class="resultQuery tab-content" id="pills-tabContent">
                    [[+filters]]
                </div>
                [[+filters:isnot=``:then=`
				<button type="reset" class="restartBtn btn btn-default hidden">[[%mse2_reset]]</button>
				<button type="submit" class="btn btn-success pull-right hidden">[[%mse2_submit]]</button>
				<div class="clearfix"></div>
			    `]]
            </form>
        </div>
    </div>
    <div class="informationBlock"></div>
    <div class="row gridElementShop">
        <div class="col-md-12 Arraycollection">
            <div id="mse2_results" class="contentBlock row">
                [[+results]]
            </div>
            <div id="pdopage" class="mse2_pagination">
    			[[!+page.nav]]
    		</div>
        </div>
    </div>
</div>
Вся вот эта разметка возвращается с сервера и я с помощью Jquery вставляю полученный html в блок
$(".SectionContent").empty();
$(".SectionContent").append(msg);
Но вот проблема в том, что фильтры теперь не работают после этого. Подскажите пожалуйста как сделать так что бы когда мы вызываем mFilter2 через ajax, и получаем html с фильтрами, сами фильтры работали?
Просто вот кстати что я заметил, когда я выбираю какой либо фильтр, после того как получил html и вставил его на страницу с помощью ajax. Сам Ajax запрос от mFilter2 отправляется и соответственно ответ получаю см. скриншот «ajax запрос», но он не вставляется на страницу и вот пагинация тоже, у меня стоит параметр 'ajaxMode' => 'button', а в итоге получаются пагинация цифрами, а должна быть кнопкой. Ну и в итоге данная проблема только когда я используя ajax и API MODX-а для вызова mFilter2. Когда он просто вызывается в ресурсе таким вот образом [[!mFilter2… ]] всё в порядке.
Подскажите пожалуйста что тут можно сделать, заранее благодарю за внимание и ответ.
Сергей Хлопов
30 июня 2018, 09:35
modx.pro
1
1 154
0

Комментарии: 4

Дмитрий
30 июня 2018, 13:51
0
mFilter2 — очень мощный и умный компонент. Если вам приходится городить какие-то костыли поверх него, то 100% вы что-то делаете неправильно. Либо структура проекта выбрана не верно, либо вы не знаете возможностей компонента, либо еще что.
Поэтому
Подскажите пожалуйста что тут можно сделать, заранее благодарю за внимание и ответ.
Совет — пересмотрите всю логику проекта и сделайте по-нормальному
    Сергей Хлопов
    30 июня 2018, 18:34
    0
    Понял, благодарю Вас за ответ. А Вы не могли бы подсказать пожалуйста, вот как тогда лучше сделать. На сайте есть меню, и ниже этого меню фильтры, по умолчанию у нас в меню выбрана «плитка» и вот на скриншоте ниже самого меню, можно увидеть фильтры предназначены для раздела плитка.

    Тут уже всё работает, так как вызвано в самом ресурсе уже.
    Но так же вот есть другой пункт «Сантехника и мебель» у этого раздела должен быть фильтр по производителю только. И я вот думал сделать так, вот когда происходит нажатие на пункт меню «Сантехника и мебель» отправляется ajax запрос на сервер, сервер в свою очередь отвечает тем, что присылает фильтр и товары, и далее мы уже фильтруем. Подскажите пожалуйста, может лучше как то по другому тогда делать?
      Дмитрий
      30 июня 2018, 18:50
      0
      1) Не заморачиваться делать всё на одной странице, а сделать обычным меню с переходом в нужный раздел. Если всё сделано хорошо, то загрузка страницы будет быстрой и никто ничего не заметит.
      2) Почитать документацию к mFilter еще несколько раз и попробовать сделать это меню не меню, а тоже элементами фильтра, и отключить показ неактивных фильтров, в целом должно сработать.¯\_(ツ)_/¯
        Сергей Хлопов
        30 июня 2018, 18:54
        0
        Понятно, благодарю Вас за ответ. Первый вариант скорее всего использовать буду)
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    4