R2m0x94 (Vasily)
С нами с 07 мая 2018; Место в рейтинге пользователей: #362Как вызвать mFilter2 через runSnippet с помощью API MODX ?
Здравствуйте, подскажите пожалуйста, я вызываю mFilter2 через MODX API, ну и к тому же это всё работает через ajax. То есть вот как всё происходит:
Есть ajax запрос:
$(".SectionContent").empty();
$(".SectionContent").append(msg);
Но вот проблема в том, что фильтры теперь не работают после этого. Подскажите пожалуйста как сделать так что бы когда мы вызываем mFilter2 через ajax, и получаем html с фильтрами, сами фильтры работали?
Просто вот кстати что я заметил, когда я выбираю какой либо фильтр, после того как получил html и вставил его на страницу с помощью ajax. Сам Ajax запрос от mFilter2 отправляется и соответственно ответ получаю см. скриншот «ajax запрос», но он не вставляется на страницу и вот пагинация тоже, у меня стоит параметр 'ajaxMode' => 'button', а в итоге получаются пагинация цифрами, а должна быть кнопкой. Ну и в итоге данная проблема только когда я используя ajax и API MODX-а для вызова mFilter2. Когда он просто вызывается в ресурсе таким вот образом [[!mFilter2… ]] всё в порядке.
Подскажите пожалуйста что тут можно сделать, заранее благодарю за внимание и ответ.
Есть 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… ]] всё в порядке.
Подскажите пожалуйста что тут можно сделать, заранее благодарю за внимание и ответ.
Вывод категорий с присоединением товара (вывод категории с изображением первого товара в ней)
Здравствуйте!
Прошу подсказать, где я ошибся:
Нужно вывести на главной странице сайта список подкатегорий товаров из заданной главной категории. В списке категория должна содержать Пункт меню и Изображение первого выбранного товара из этой категории. У подкаегорий могут быть дочерние подкатегории, то есть, глубина вложенности может быть разная. По сути, нужно решить старую задачу, которую разбирал Василий Наумкин вот тут https://bezumkin.ru/sections/tips_and_tricks/2058/.
Пытаюсь собрать результат вот так
Прошу подсказать, где я ошибся:
Нужно вывести на главной странице сайта список подкатегорий товаров из заданной главной категории. В списке категория должна содержать Пункт меню и Изображение первого выбранного товара из этой категории. У подкаегорий могут быть дочерние подкатегории, то есть, глубина вложенности может быть разная. По сути, нужно решить старую задачу, которую разбирал Василий Наумкин вот тут https://bezumkin.ru/sections/tips_and_tricks/2058/.
Пытаюсь собрать результат вот так
Изменяем форму заказа minishop2
Вывод кастомных полей ресурса в админке
Всем привет!
Хочу добавить пару полей в modResource, скажем, еще один заголовок и еще одно поле с контентом. Ну вот хочется мне :) Допустим, расширение стандартной модели я сделаю по заметке Василия. Но как быть с админкой? Я где-то видел хитрый плагин тут на сайте, который добавляет кастомный js к ресурсу, но уже два часа копаюсь и не могу найти. Может напомнит кто?
Хочу добавить пару полей в modResource, скажем, еще один заголовок и еще одно поле с контентом. Ну вот хочется мне :) Допустим, расширение стандартной модели я сделаю по заметке Василия. Но как быть с админкой? Я где-то видел хитрый плагин тут на сайте, который добавляет кастомный js к ресурсу, но уже два часа копаюсь и не могу найти. Может напомнит кто?
Как упростить условие на Fenom
У меня есть такое условие:
Как упростить условия — показать родителя и всех его потомков без явного указания дочерних ID?
$id == '15' OR $id == '31' OR $id == '32' OR $id == '33' OR $id == '34'
PS. ID родителя постоянен и от него можно отталкиваться.
{if $id == '15' OR $id == '31' OR $id == '32' OR $id == '33' OR $id == '34'}
выводится код
{/if}
15 это ID родителя, все остальные ID (31,32,33,34) это дочки этого родителя.Как упростить условия — показать родителя и всех его потомков без явного указания дочерних ID?
$id == '15' OR $id == '31' OR $id == '32' OR $id == '33' OR $id == '34'
PS. ID родителя постоянен и от него можно отталкиваться.
Подготавливаем ЛК для "ГдеПосылка"
Это продолжение статей по работе с заказами MS2, в последней статье я обещал, что расскажу как интегрировать сервис «ГдеПосылка» в Minishop2, а пока я жду пока очухается администрация «ГдеПосылка» чтобы дать мне доступ к API подготовим почву для интеграции, что мы будем делать:
- Добавим новое поле в заказы minishop2
- Сделаем вывод для пользователей их историю заказов без extJS и каких либо дополнений, на чистом pdoTools
- Научимся делать leftJoin и select на pdoTools и pdoFetch
- Бонусом идут сразу готовые стили для всего этого добра и написанный JS
За объяснением кода — под кат, за кодом на GitHub
Оформление заказа через админку miniShop2
Приветствую всех! На одном из проектов нужно реализовать добавление заказа через панель администратора miniShop2. Есть ли у кого-то готовые решения или может направите куда покопать, чтобы добавить кнопку добавления заказа? Я примерно представляю себе, что ее можно реализовать переработав updateOrder и написав процессор, но первые попытки не увенчались успехом. Всем спасибо за внимание, буду крайне признателен за ценные ответы!
[РЕШЕНО] Простое наличие товара (остаток)
Добрый день!
Подскажите пожалуйста, может кто знает простое решение. Есть товар в единственном экземпляре и есть его наличие. Наличие сделано через плагин. Выводится вот так:
Подскажите пожалуйста, может кто знает простое решение. Есть товар в единственном экземпляре и есть его наличие. Наличие сделано через плагин. Выводится вот так:
[[+availability:is=`1`:then=`<button class="uk-button uk-button-primary" type="submit" name="ms2_action" value="cart/add"><i class="uk-icon-barcode"></i> [[%ms2_frontend_add_to_cart]]</button>`:else=`<button class="uk-button uk-button-primary uk-hidden" type="submit" name="ms2_action" value="cart/add"><i class="uk-icon-barcode"></i> [[%ms2_frontend_add_to_cart]]</button>`]]
Критическая уязвимость в MODX Revolution
Сильно в детали лезть не буду, просто скажу, что сейчас любой MODX Revo сайт потенциально уязвим. Дыра позволяет выполнить SQL-инъекции, в том числе с созданием на сайте привилегированных пользователей.
Базовые методы противодействия: подмена дефолтных системных папок (особенно connectors) и, главное — смена префикса таблиц. Так как далеко не все это делают, то можно сказать, большинство сайтов в зоне опасности. Кто хочет ощутить это на себе, может в комментах написать ссылку на сайт.
Если кто на уже рабочем сайте хочет префиксы сменить, я описывал метод здесь.
P.S. И еще заповедь: не пускайте никого в админку, даже с самыми минимальными правами. Это практически 100% гарантия взлома при желании.
Базовые методы противодействия: подмена дефолтных системных папок (особенно connectors) и, главное — смена префикса таблиц. Так как далеко не все это делают, то можно сказать, большинство сайтов в зоне опасности. Кто хочет ощутить это на себе, может в комментах написать ссылку на сайт.
Если кто на уже рабочем сайте хочет префиксы сменить, я описывал метод здесь.
P.S. И еще заповедь: не пускайте никого в админку, даже с самыми минимальными правами. Это практически 100% гарантия взлома при желании.
Можно ли из плагина вызвать уведомление?
Добрый вечер, всем, кто нибудь подскажите —
сделал плагин на минимальную стоимость заказа — но как об этом уведомить на клиентской стороне покупателя, можно ли прям из плагина послать сообщение во всплывашку, идущую вместе с miniShop2?
Может метод есть какой-то? или надо в js лезть?
Код плагина
сделал плагин на минимальную стоимость заказа — но как об этом уведомить на клиентской стороне покупателя, можно ли прям из плагина послать сообщение во всплывашку, идущую вместе с miniShop2?
Может метод есть какой-то? или надо в js лезть?
Код плагина
if ($modx->event->name == 'msOnSubmitOrder'){
if($cart = $order->ms2->cart->status()) {
if($cart['total_cost'] < 1500) {
$modx->event->output('Сумма вашего заказа должна превышать 1500 руб!');
}
}
}