Как правильно сделать ajax окно в msFavorites?

Ссылка скопирована
1 ответ

Была задача сделать избранные товары через msFavorites но не получается сделать идеально, не моментально убираются из списка избранных, и когда доходит до последнего то он убирается но не пропадает.

Подробнее можно посмотреть на сайте https://romnew.bwsite.ru/
Добавить в избранные и убрать и вы поймете о чём я.

Скрипт.

// Обработчик клика по элементу, инициирующему загрузку контента $(document).on('click', '.chiklike', function() {   // Получение ссылки на контент, который нужно загрузить   var contentUrl = $(this).data('url');    // AJAX-запрос для загрузки контента   $.ajax({     url: contentUrl,     type: 'GET',     dataType: 'html',     beforeSend: function() {       // Действия, выполняющиеся перед отправкой запроса       $('.loader').show(); // Показываем прелоадер     },     success: function(response) {       // Действия после успешного получения контента       $('#result').html(response); // Вставляем контент в контейнер     },     complete: function() {       // Действия, выполняющиеся после получения контента (успешного или неуспешного)       $('.loader').hide(); // Скрываем прелоадер     },     error: function(xhr, status, error) {       // Действия в случае ошибки       console.log(error); // Выводим ошибку в консоль для отладки     }   }); });

// Обработчик клика по элементу, инициирующему загрузку контента $(document).on('click', '.chiklike', function() { // Получение ссылки на контент, который нужно загрузить var contentUrl = $(this).data('url'); // AJAX-запрос для загрузки контента $.ajax({ url: contentUrl, type: 'GET', dataType: 'html', beforeSend: function() { // Действия, выполняющиеся перед отправкой запроса $('.loader').show(); // Показываем прелоадер }, success: function(response) { // Действия после успешного получения контента $('#result').html(response); // Вставляем контент в контейнер }, complete: function() { // Действия, выполняющиеся после получения контента (успешного или неуспешного) $('.loader').hide(); // Скрываем прелоадер }, error: function(xhr, status, error) { // Действия в случае ошибки console.log(error); // Выводим ошибку в консоль для отладки } }); });

вызов

[[!msProducts?                 &resources=`[[!msFavorites.ids]]`             	&parents=`0`             	&tpl=`favouritestpl`                 &includeThumbs=`small`             ]]

[[!msProducts? &resources=`[[!msFavorites.ids]]` &parents=`0` &tpl=`favouritestpl` &includeThumbs=`small` ]]

favouritestpl

<div class="favourites__item">                 <div class="item">                       {if $small?}             <img src="{$small}" alt="{$description}">         {else}             <img src="assets/cache_image/noimage_360x360_6f6.jpg" alt="{$description}">         {/if}                                             </div>                 <div class="item">                     <div class="title">                         <a href="javascript:void(0);"  data-show-modal data-src="{$id|url}">                             {$pagetitle}                         </a>                     </div>                 </div>                 <div class="item">                     {if $price?}             <div class="price">{$price} р.</div>         {else}             <div class="price">Цена отсутствует</div>         {/if}                              </div>                 <div class="item">                     <div class="delete msfavorites chiklike" data-url="/izbrannoe.html"  data-click                    data-data-list="default"                    data-data-type="resource"                    data-data-key="[[+id]]" >                         <img src="assets/img/arrows_circle_remove.svg" alt="">                     </div>                 </div>             </div>

<div class="favourites__item"> <div class="item"> {if $small?} <img src="{$small}" alt="{$description}"> {else} <img src="assets/cache_image/noimage_360x360_6f6.jpg" alt="{$description}"> {/if} </div> <div class="item"> <div class="title"> <a href="javascript:void(0);" data-show-modal data-src="{$id|url}"> {$pagetitle} </a> </div> </div> <div class="item"> {if $price?} <div class="price">{$price} р.</div> {else} <div class="price">Цена отсутствует</div> {/if} </div> <div class="item"> <div class="delete msfavorites chiklike" data-url="/izbrannoe.html" data-click data-data-list="default" data-data-type="resource" data-data-key="[[+id]]" > <img src="assets/img/arrows_circle_remove.svg" alt=""> </div> </div> </div>

Сама конопка (через которую добавление идёт)

<div class="card__like msfavorites chiklike"   data-url="/izbrannoe.html" data-click                    data-data-list="default"                    data-data-type="resource"                    data-data-key="[[*id]]">                             <svg width="21" height="18" viewBox="0 0 21 18" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20 6.32647C20 11.4974 10.5 17 10.5 17C10.5 17 1 11.4974 1 6.32647C1 -0.694364 10.5 -0.599555 10.5 5.57947C10.5 -0.599555 20 -0.507124 20 6.32647Z" stroke="black" stroke-linejoin="round"></path></svg>                         </div>

<div class="card__like msfavorites chiklike" data-url="/izbrannoe.html" data-click data-data-list="default" data-data-type="resource" data-data-key="[[*id]]"> <svg width="21" height="18" viewBox="0 0 21 18" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20 6.32647C20 11.4974 10.5 17 10.5 17C10.5 17 1 11.4974 1 6.32647C1 -0.694364 10.5 -0.599555 10.5 5.57947C10.5 -0.599555 20 -0.507124 20 6.32647Z" stroke="black" stroke-linejoin="round"></path></svg> </div>

Дополнительно:

Ответы:

Ну дык ты get-запрос делаешь на страницу izbrannoe.html, которой у тебя нет, или она не опубликована. Твой скрипт тупо падает

  • Да была не опубликована, (опубликовал) нечего не изменилось всё так же ведёт себя.

    Как правильно сделать ajax окно в msFavorites?

  • Windramix, у тебя оба запроса параллельно идут. Тебе нужно добавить колбэк к функции компонента msFavorites (добавление/удаление из списка), который будет получать список. Иначе у тебя все зависит от того, что раньше отработает - твой запрос или запрос msFavorites.
  • Danny Arty, ух.... такое я точно не потяну, ладно спасибо.
  • а есть альтернатива ? =)
  • такое чувство что не кто не делал данную задачу и не задавался вопросом, что по запросу msFavorites ajax данная страница на 3 месте =)
  • Windramix, да там и делать то, раз-два и готово
  • Danny Arty, Подскажите, поможете? что куда?
  • Windramix, также как и при надобности расширения или изменения функционала других компонентов. Копируете default.min.js компонента и создаете новый файл, условно custom.js. В системных настройках компонента указываете новый файл js. И в него добавляете ваш код, по моему метод назывался processAction
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Сергей Миронов Ответ

Для создания AJAX окна в msFavorites, вам потребуется использовать JavaScript с AJAX запросами для загрузки содержимого окна без перезагрузки страницы. Ниже приведен пример кода, демонстрирующий, как это можно сделать:

1. Создайте HTML элемент, который будет открывать ваше AJAX окно, например:

```html

```

2. Напишите JavaScript код, который будет обрабатывать клик по кнопке и отправлять AJAX запрос на сервер для получения содержимого окна. Пример кода:

```html

document.getElementById('openModal').addEventListener('click', function() {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'url_to_your_server_script.php', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
document.getElementById('modalContent').innerHTML = xhr.responseText;
}
};
xhr.send();
});

```

3. На стороне сервера (в файле `url_to_your_server_script.php`) обработайте AJAX запрос и верните необходимое содержимое окна. Пример PHP кода:

```php
<?php
// Ваш код для получения содержимого окна
echo '

Заголовок окна

Содержимое окна

';
?>
```

Таким образом, при клике на кнопку "Открыть окно" будет отправлен AJAX запрос на сервер, который вернет содержимое окна. Это содержимое будет отображено внутри элемента с идентификатором `modalContent`, создавая эффект AJAX окна в msFavorites. Не забудьте адаптировать код под ваши нужды и стилизовать окно с помощью CSS.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно