Как запустить 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; 
}
  1. Затем я создал кусок с этим кодом:

    <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 ответа

Что я обычно делаю в таких случаях:

  1. Я делаю фрагмент вызова ([[!ajaxCookieList]]) на странице службы, доступной по URL-адресу, например /page-with-snippet/
  2. В JS (ajax) я использую тот URL, на который отправляю параметры
  3. Фрагмент должен получить параметры, которые я отправляю. Итак, я действительно называю это так: [[!ajaxCookieList? &action=[[! # POST.action]]]]
  4. Доступ к параметрам в фрагментах возможен так: $option = $modx->getOption('action', $scriptProperties, 'default_value', true);
  5. Я делаю свои вещи во фрагменте

Но в вашем случае, я думаю, все может быть проще. Вы используете один из фрагментов 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. Надеюсь, что вы поймете мой код и настроите его под себя.

  1. Создать сниппет ajaxCookieList

  2. Вставьте JS-код в ваш файл custom.js

  3. Простая разметка для ресурсов. Вставьте его в кусок:

<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>

Вот и все:)

Другие вопросы по тегам