templates\specific\catalog\show.html.twig:
Код: Выделить всё
{% extends 'specific/layout_fo.html.twig' %}
{% block stylesheets %}
{{ parent() }}
{% endblock %}
{% block body %}
{% include 'override/oc/user/basket/_little_basket.html.twig' %}
{% endblock %}
{% block javascripts %}
document.addEventListener('DOMContentLoaded', function () {
// Gérer le clic sur le bouton "Ajouter au panier"
const addToCartButtons = document.querySelectorAll('.add-to-cart-btn');
addToCartButtons.forEach(button => {
button.addEventListener('click', () => {
const productCatId = button.getAttribute('data-product-id');
const inputs = document.querySelectorAll(`input[data-product-id="${productCatId}"]`);
const selectedProducts = Array.from(inputs).map(input => ({
productCatId: input.getAttribute('data-product-id'),
variantId: input.getAttribute('data-variant-id'),
quantity: parseInt(input.value, 10) || 0
})).filter(item => item.quantity > 0);
fetch('{{ path('specific_add_to_cart') }}', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
},
body: JSON.stringify({ products: selectedProducts })
})
.then(response => response.json())
.then(data => {
if (data.success) {
console.log('Les articles ont été ajoutés au panier avec succès.');
console.log(selectedProducts);
} else {
console.log('Une erreur s\'est produite. Veuillez réessayer.');
}
})
.catch(error => {
console.error('Error:', error);
});
});
});
{% endblock %}
Код: Выделить всё
class CartController extends BaseController
{
#[Route(path: [
'fr' => '/ajouter-au-panier',
], name: 'specific_add_to_cart', methods: ['POST'])]
public function addToCart(Request $request, BasketorInterface $basketor): Response
{
$data = json_decode($request->getContent(), true);
if (!$data || !isset($data['products'])) {
return new JsonResponse(['success' => false, 'message' => 'Invalid data'], Response::HTTP_BAD_REQUEST);
}
$msg = '';
foreach ($data['products'] as $dataProduct) {
$productCatalog = $this->getRepository(ProductCatalog::class)->findOneBy(['id' => $dataProduct['productCatId'], 'active' => true]);
$basketor->addToBasket($productCatalog, $msg, $dataProduct['quantity']);
}
return new JsonResponse(['success' => true]);
}
#[Route(path: '/actualize-basket', name: 'specific_actualize_basket', methods: ['GET'])]
public function getBasket(Request $request, BasketorInterface $basketor): Response
{
$data = \json_encode($basketor->getBasket());
return new JsonResponse([
'success' => true,
'payload' => $data,
]);
}
}
Спасибо.
Подробнее здесь: https://stackoverflow.com/questions/787 ... y-variable