UMI - AJAX корзина и её содержимое

При разработке одного интернет-магазина на UMI.CMS Shop мне довелось столкнуться с тем, что для изменения текста, который пользователь видит сразу после помещения товара в корзину, недостаточно поменять его лишь в файле локализации.

За основу при разработке сайта был взят интернет-магазин "современный" на базе XSLT-шаблонизатора. По умолчанию в этом магазине помещение товара в корзину со страницы рубрики происходит без перезагрузки страницы: при клике на кнопку "добавить в корзину" меняется количество товаров, написанное на данной кнопке, и при этом же меняется текст в плавающем информационном блоке в шапке сайта.

После замены текста в файле локализации /xsltTpls/i18n/constants.ru.dtd с:


<!ENTITY basket-add "Добавить в корзину">
<!ENTITY basket-empty "В корзине нет ни одного товара">
<!ENTITY basket-items-text "товаров на сумму ">

на:


<!ENTITY basket-add "В корзину">
<!ENTITY basket-empty "Вы пока ничего не выбрали">
<!ENTITY basket-items-text "</span></div><div><span class='label'>сумма</span>">

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

Небольшое исследование показало, что искомый старый текст находится в файле /js/site/basket.js и его там много. Нужно:

1. В строке 9 заменить текст на кнопке:


            add_basket_button_text = 'Добавить в корзину',

на свой, например:


            add_basket_button_text = 'В корзину',

2. Дальше в строке 53 нужно изменить текст для информатора корзины со старого:


            text = e.summary.amount + ' шт товаров на сумму ' + text;

на новый:


            text = '<div><span class="label">товаров</span><span class="num">' + e.summary.amount + '<span class="dim">шт.</span></span></div><div><span class="label">сумма</span><span class="num">' + text;

3. В строке 56 надо отредактировать сообщение для информатора корзины, которое показывается в случае, если корзина пуста:


            text = 'В корзине нет ни одного товара.';

написать что-то своё:


            text = 'Вы пока ничего не выбрали';

4. Для того, чтобы содержимое плавающего блока корзины выводилось как корректный HTML, следует заменить ещё в строке 61 формат вывода HTML:


        jQuery('.basket_info_summary').text(text);

на:


        jQuery('.basket_info_summary').html(text);

5. И наконец нужно изменить сам шаблон корзины /xsltTpls/modules/emarket/basket.xsl


    <xsl:template match="summary[amount > 0]" mode="basket">
        <div><span class="label">товаров</span><span class="num"><xsl:apply-templates select="amount" /></span></div>
        <div><span class="label">сумма</span><span class="num"><xsl:apply-templates select="price/actual" /></span><span class="dim">руб.</span></div>
    </xsl:template>

Способ трудно назвать красивым, возможно скажете вы. И я с вами соглашусь. Корректнее было бы использовать в js-файле константы для значений на кнопках и в информаторе.

Поделиться с друзьями:

Комментарии

Замечательно, я предполагал

Замечательно, я предполагал все ровно наоборот. Открыли глаза, спасибо!!!

Редко найдешь материал на эту

Редко найдешь материал на эту тему. Ждем продолжения...

Освежили давно забытые идеи

Освежили давно забытые идеи