По работе над проектом созданным на CMS Modx Revolution, встала необходимость создать выгрузку товаров магазина в турбо-страницы яндекса. Весь процесс создания я описывать не буду, а расскажу, как быстро создать страницу добавления в корзину для двух популярных модулей.
Турбо-страницы Яндекса и Minishop2 MODX
В первую очередь создадим сниппет, например «addproduct». Вставляем в него очень маленький код
<?php
/**
* @property id - (int) id товара.
* @property $carturl - (int) id корзины или страницы куда мы хотим перейти.
*/
if ($miniShop2 = $modx->getService('miniShop2')) {
$miniShop2->initialize($modx->context->key); //Инциализация сервиса
$miniShop2->cart->add($id); // Добавляем товар в корзину c полученным ID
$url = $modx->makeUrl($carturl, "", "", "full"); //по id скорзины получаем урл для перехода
$modx->sendRedirect($url); //переходим в корзину, можно перейти и в саму карточку товара
}
return ;
Подробнее о сервисе minishop2 можно почитать тут
Теперь нужно вставить этот сниппет в страницу, которая будет обрабатывать турбо-страницы магазина.
Можно создать документ с начальным шаблоном или любым шаблоном, все равно будет сразу переход в корзину. У меня это страница «сайт.ру/addproduct.html».
В шаблон или содержимое документа вставляем наш сниппет, отключая кеширование.
[[!addproduct? &id=`[[#GET.id]]` &carturl=`160`]]
&id=`` получаем из строки id товара и отправляем его снипету (подробнее тут).
&carturl=`160` - сюда вставляем id корзины или документа, куда будет переход после добавления товара в корзину.
Вот и все страница обработки товаров для турбо-страниц готова, остальное делаем по инструкции от яндекса.
Турбо-страницы Яндекса и Shopkeeper3 MODX
В модуле интернете-магазина Shopkeeper3 все делается гораздо проще, возможно, но я не уверен. После подгрузки библиотеки jQuery вставляем скрипт:
<script>
$(document).ready(function() {
//Функция для обработки параметров url адреса
var getUrlParameter = function getUrlParameter(sParam) {
var sPageURL = decodeURIComponent(window.location.search.substring(1)),
sURLVariables = sPageURL.split('&'),
sParameterName,
i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return sParameterName[1] === undefined ? true : sParameterName[1];
}
}
};
if((getUrlParameter('addtocart') == 'true')){ //проверяем что на данную страницу мы обратились для добавления товара в корзину
$.post({
type: 'POST',
url: 'https://spectre.su/articles/internet-magazin-modx-revolution-i-turbo-straniczyi-yandeksa.html',
data: 'shk-id=27&shk-count=1&test__27__add',
success: (data) => {
//После успешного добавления в корзину обновим содержимое корзины
var el = document.createElement('html');
el.innerHTML = data;
$('.shopCart').html($(el).find('.shopCart').html())
}
})
}
})
</script>
Если вы хотите это делать на отдельной странице, вставляем в содержимое документа или шаблона скрипт
<script>
$(document).ready(function() {
$.post({
type: 'POST',
url: 'https://spectre.su/articles/internet-magazin-modx-revolution-i-turbo-straniczyi-yandeksa.html',
data: 'shk-id=27&shk-count=1&test__27__add',
success: (data) => {
//После успешного добавления в корзину переходим в корзину
$(location).attr("href", ""); //где ИД id документа с корзиной
}
})
})
</script>
Вот и все, остальное по инструкции от яндекса.