Меняем кнопку:
Спойлер
{$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