Здравствуйте! Подскажите как сделать функционал “добавить в список сравнения” без ссылки по аналогии с “добавить в избранное”. Так как на всех страницах, где используются списки товаров, из-за этого появляется очень много ненужных (мусорных) ссылок такого вида 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 лайка