Ссылка на добавить в корзину/избранное/сравнение

Здравствуйте, подскажите пожалуйста, как реализовать ссылку на добавление в корзину, добавление в избранное, добавление в сравнение товаров. (ШАБЛОН КАСТОМНЫЙ!!!)

Чтобы на выходе получить что-то похожее:

<a href="https://example.com/add_to_cart?product_id=XX">Добавить в корзину</a>

Потребуется создать отдельный, или post- контроллер. В котором будет обработка такого запроса.

<a class="cm-ajax" href="{"products.add_to_cart?product_id=$product.product_id"|fn_url}">Добавить в корзину</a>

В контроллере products

if($mode == 'add_to_cart'){
	$params = $_REQUEST;
	$cart = &Tygh::$app['session']['cart'];
	$auth= &Tygh::$app['session']['auth'];

	$product_data[$params['product_id']] = [
	   'product_id' => $params['product_id'],
	   'amount'     => 1
	];
	fn_add_product_to_cart($product_data, $cart, $auth);
	return [CONTROLLER_STATUS_OK];
}

! Не тестировано. Это лишь набросок для добавления в корзину. По аналогии можно сделать и остальные. Посмотрите, как в контроллерах работают функции.

1 лайк

Или еще вариант, посмотрите, как работает блок добавления в корзину в карточке товара.

1 лайк

Должно так сработать

<a class="cm-ajax cm-post" href="{"checkout.add..123"|fn_url}">Добавить в корзину</a>

где 123 - ID товара

P.S. Да, там две точки подряд

1 лайк

Подскажите пожалуйста, в контроллер я добавил Ваш код, дамп функции возвращает INT, я так полагаю это ID корзины, но товар почему-то в корзине не добавляется.

Немного модифицировал Ваш контроллер, но есть сомнения что всё сделано правильно, посмотрите пожалуйста, спасибо!
if($mode == ‘add_to_cart’)
{
$params = $_REQUEST;
$cart = &Tygh::$app[‘session’][‘cart’];
$auth = &Tygh::$app[‘session’][‘auth’];
$product_data[$params[‘product_id’]] = [
‘product_id’ => $params[‘product_id’],
‘amount’ => 1
];
fn_add_product_to_cart($product_data, $cart, $auth);
fn_save_cart_content($cart, $auth[‘user_id’]);
return [
CONTROLLER_STATUS_OK,
‘checkout.cart’
];
}

Если не требуется выполнять дополнительные операции, попробуйте вариант от @ecomlabs

Также посмотрите как работает контроллер checkout.add, это поможет до настроить свой вариант.

В принципе мне не требуются дополнительные операции, главное требование чтобы ссылка была не с методом POST, а с методом GET

Тогда через новый контроллер. Наш метод использует POST