Как сделать "добавить в список сравнения" без ссылки по аналогии с "добавить в избранное"

Здравствуйте! Подскажите как сделать функционал “добавить в список сравнения” без ссылки по аналогии с “добавить в избранное”. Так как на всех страницах, где используются списки товаров, из-за этого появляется очень много ненужных (мусорных) ссылок такого вида https://unitheme.net/index.php?dispatch=product_features.add_product&product_id=304&redirect_url=index.php%3Fdispatch%3Dcategories.view%26category_id%3D166
Эти ссылки видят боты поисковиков и переходят по ним, тратят краулинговый бюджет на сканирование сайта попусту

<div id="compare_list_{$product_id}">
{assign var="status_compare" value=false}

{foreach from=$smarty.session.comparison_list item="comp"}
    {if $comp == $product_id}
        {assign var="status_compare" value=true}
    {/if}
{/foreach}

{if !$config.tweaks.disable_dhtml}
    {$ajax_class = "cm-ajax cm-ajax-full-render"}
{/if}

{if !$hide_compare_list_button}
    {$c_url                = $redirect_url|default:         $config.current_url|escape:url}
    {$compare_button_typ   = $compare_button_typ|default:  "icon"}
    {$but_id               = $compare_but_id|default:       $but_id}
    {$but_name             = $compare_but_name|default:     $but_name}
    {$but_title            = $compare_but_title|default:    __("add_to_comparison_list")}
    {$but_meta             = $compare_but_meta|default:     "ut2-add-to-compare $ajax_class"}
	{if $status_compare}
	    {$but_href = "product_features.delete_product?product_id=$product_id&redirect_url=$c_url"|fn_url}
	    {$but_title = __("delete_from_comparison_list")}
	    <a	class="ty-active  
		{if $but_meta}{$but_meta}{/if}
	    {if $details_page} label{/if}
	    {if $but_name} cm-submit{/if}
	    {if !$runtime.customization_mode.live_editor} cm-tooltip{/if}"
	
	    {if $but_title} title="{$but_title}" data-ce-tooltip-position="center"{/if}
	    {if $but_id} id="{$but_id}"{/if}
		data-ca-target-id="compare_list*,comparison_list,account_info*,abt__ut2_compared_products"
	    {if $but_href} href="{$but_href|fn_url}"{/if}>
	
	    {if $compare_button_typ == "icon"}<i class="ut2-icon-baseline-equalizer"></i>{/if}
	    <span>{__("compared")}</span>
	    </a>
	{else}
		{$but_name = "dispatch[product_features.add..$product_id]"}
		{$but_id = "button_compare_$product_id"}
		<a	class="
		{if $but_meta}{$but_meta}{/if}
	    {if $details_page} label{/if}
	    {if $but_name} cm-submit{/if}
	    {if !$runtime.customization_mode.live_editor} cm-tooltip{/if}"
	    {if $but_title} title="{$but_title}" data-ce-tooltip-position="center"{/if}
	    {if $but_id} id="{$but_id}"{/if}
		{if $but_name} data-ca-dispatch = {$but_name} {/if}  
		  >

	    {if $compare_button_typ == "icon"}<i class="ut2-icon-baseline-equalizer"></i>{/if}
	    <span>{__("compare")}</span>
	    </a>
	{/if}
{/if}
<!--compare_list_{$product_id}--></div>
1 лайк

оверрайд buttons/add_to_compare_list.tpl

правильно ли я Вас понял, надо заменить код в файле?\design\themes\abt__grtheme2\templates\buttons\add_to_compare_list.tpl

добавьте в свой модуль my_changes, чтобы не заменять код и не потерять при обновлении

у меня получается вот такое


и при нажатии пару секунд крутится но товар так и не добавляется к сравнению (кэш чистил)
тоесть, тут не так важно отображение (это не сложно поправить), а сама функция добавления к сравнению не срабатывает (не открывается popup окно)

Меняем кнопку:

Спойлер
{$comp_list = $smarty.session.comparison_list}

{* constant *}
{$compare_button_type = $compare_button_type|default:"icon"}
{$but_name = "dispatch[product_features.add_product..$product_id]"}
{$but_id = $compare_but_id|default:"button_compare_$product_id"}
{$but_role = $compare_but_role|default:"text"}
{$but_href = $compare_but_href|default:$but_href}
{$but_onclick = $compare_but_onclick|default:$but_onclick}

{* dynamic *}
{$but_title = $compare_but_title|default:__("add_to_comparison_list")}
{$but_meta = $compare_but_meta|default:"compare"}

{* change active *}
{if $comp_list && in_array($product_id, $comp_list)}
	{$but_title = "Убрать из сравнения"}
	{$but_meta = "compare uk-active"}
{/if}

{if $compare_button_type == "icon"}
	{$but_icon = $compare_but_icon|default:"barchart"}
	{$but_text = $compare_but_text|default:false}
{else}
	{$but_icon = ($compare_but_icon === true) ? "barchart" : $compare_but_icon}
	{$but_text = $compare_but_text|default:__("add_to_comparison_list")}
{/if}

{include file="buttons/button.tpl"
	but_id=$but_id
	but_meta=$but_meta
	but_name=$but_name
	but_text=$but_text
	but_title=$but_title
	but_role=$but_role
	but_onclick=$but_onclick
	but_href=$but_href
	but_icon=$but_icon
}

И модифицируем контроллер product_features:

Спойлер
$list = 'features';

Tygh::$app['session']['excluded_features'] = isset(Tygh::$app['session']['excluded_features']) ? Tygh::$app['session']['excluded_features'] : [];
Tygh::$app['session']['comparison_list'] = isset(Tygh::$app['session']['comparison_list']) ? Tygh::$app['session']['comparison_list'] : [];
$comp_list = & Tygh::$app['session']['comparison_list'];
/*$auth = & Tygh::$app['session']['auth'];*/

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
	// Add feature to comparison list
	if ($mode === 'add_feature') {
		if (!empty($_REQUEST['add_features'])) {
			Tygh::$app['session']['excluded_features'] = array_diff(Tygh::$app['session']['excluded_features'], $_REQUEST['add_features']);
		}
	}

	if ($mode === 'add_product') {
		if (empty($comp_list)) $comp_list = array();
		$list = $_REQUEST['product_data'];

		foreach($list as $item) {
			$p_id = (int)$item['product_id'];
		}

		if (!in_array($p_id, $comp_list)) {
			array_unshift($comp_list, $p_id);
			$product_data = fn_get_product_data($p_id, $auth);
		}

		if (defined('AJAX_REQUEST')) {
			if (!empty($product_data)) {
				fn_gather_additional_product_data($product_data, true, true);
				$product_data['amount'] = 1;
				$product_data['display_price'] = $product_data['price'];

				$added_products = [$p_id => $product_data];
				Tygh::$app['view']->assign('added_products', $added_products);

				fn_set_notification('N', __('notice'), __('product_added_to_cl'));
			} else {
				$key = array_search($p_id, $comp_list);
				unset($comp_list[$key]);

				fn_set_notification('W', __('notice'), "Товар удалён из списка избранного");
			}
		} else {
			unset($_REQUEST['redirect_url']);
		}
	}

	return [CONTROLLER_STATUS_OK];
}

// Add product to comparison list
if ($mode === 'add_product') {
...

В common/product_data указываем id блоков, в которых будут ссылки и кнопки:

<input type="hidden" name="result_ids" value="cart_status*,comp_list*,wish_list*,checkout*,account_info*" />

Получилось вот так: CS Cart: избранное и сравнение ajax - YouTube

2 лайка