Как запустить CookieList (расширение MODx) с помощью ajax
Пожалуйста, объясните мне, как запустить сниппет CookieList с помощью ajax?
Я попробовал следующее:
1. Создан фрагмент кода ajaxCookieList:
<?php
if (isset($_POST["action"])) {
$values = $modx->runSnippet('addToCookieLIst',array(
'value' => $_POST['action']
));
$output = $modx->runSnippet('pdoResources',[
'parents' => 6,
'resources' => $values,
'tpl' => 'popup.favorites.item',
'includeTVs' => 'header.bgImage,franchise.logo,franchise.price,title,subtitle',
'prepareTVs' => '1',
'hideContainers' => '1'
]);
return $output;
}
Затем я создал кусок с этим кодом:
<script> jQuery(function($){ $('a.franchise-pin, a.franchise-favorite-add').click(function(e){ var value = $(this).data('value'); $.post(document.location.href, {action: value}, function(data) { $('#favorites').html(data); $('#favorites').modal('show'); }); e.preventDefault(); }); }); </script>
Но ответ на все страницы..
Что случилось?
2 ответа
Что я обычно делаю в таких случаях:
- Я делаю фрагмент вызова (
[[!ajaxCookieList]]
) на странице службы, доступной по URL-адресу, например /page-with-snippet/ - В JS (ajax) я использую тот URL, на который отправляю параметры
- Фрагмент должен получить параметры, которые я отправляю. Итак, я действительно называю это так:
[[!ajaxCookieList? &action=
[[! # POST.action]]]]
- Доступ к параметрам в фрагментах возможен так:
$option = $modx->getOption('action', $scriptProperties, 'default_value', true);
- Я делаю свои вещи во фрагменте
Но в вашем случае, я думаю, все может быть проще. Вы используете один из фрагментов pdoTools, и если я не ошибаюсь, вы можете просто выполнить вызов фрагмента pdoResources на странице (/page-with-snippet/), например так:
[[pdoResources?
&parents=`6`
&resources=`[[!addToCookieLIst? &value=`[[!#POST.action]]` ]]` // your snippet should return comma-separated list of resources` ids that you pass then to pdoResources
&tpl=`popup.favorites.item`
&includeTVs=`header.bgImage,franchise.logo,franchise.price,title,subtitle`
&prepareTVs=`1`
&hideContainers=`1`
]]
и теперь вы можете отправить параметры на эту страницу (/page-with-snippet/) через AJAX и получить результаты, если они есть. Надеюсь, я ничего не испортил - вам лучше проверить это снова, но вы, по крайней мере, поняли идею:) Кстати, прочитайте эту статью на modx.com, где рассказывается, как написать хороший фрагмент.
Также еще одна небольшая проблема: как уже указывалось здесь, использование window.location
предпочтительнее document.location
,
Вот еще одно решение, которое я сделал. Я использовал pdoResources. Надеюсь, что вы поймете мой код и настроите его под себя.
Создать сниппет ajaxCookieList
Вставьте JS-код в ваш файл custom.js
Простая разметка для ресурсов. Вставьте его в кусок:
<a href="#" data-id=[[+id]] data-action="add">Add to wish list</a>
<a href="#" data-id=[[+id]] data-action="remove">Remove from wish list</a>
Вот и все:)