denisov999, ваш способ, пожалуй, удобнее.
Но выложу и свой вариант, как обещал. Когда я его писал, библиотека jQuery еще не входила в обязательном порядке в состав HostCMS, поэтому я постарался максимально обойтись комплектным javascript.
И так, в макете страницы, там где выводится краткая корзина, я писал следующее:
<div id="cart_placeholder">
<script type="text/javascript"><!-- //
document.write("<p class='text-center'><img src='/skin/hyundai/images/ajax-loader.gif' alt='Пожалуйста, подождите' /><\/p>");
RefreshCart("/");
// -->
</script>
<noscript>
<iframe src="/cart/?little_cart" class="little_cart"></iframe>
</noscript>
</div>
где cart_placeholder это идентификатор блока, в котором будет помещаться код краткой корзины. На случай, если у пользователя отключен js корзина дублируется с помощью iframe
Js-функция RefreshCart() выглядит так:
function RefreshCart(shop_path)
{
cmsrequest = shop_path + 'cart/?ajax_show_cart';
sendRequest(cmsrequest, 'get', callbackfunction_AddIntoCart);
return false;
}
каллбэк использутеся штатный, от обработчика добавления товара в корзину
Ну и в настройках ТДС "Корзина", после обработчика ajax-добавления товара в корзину добавляется следующий код:
/* AJAX рефрешинг корзины*/
if (isset($_GET['ajax_show_cart']))
{
// Отображаем корзину
$JsHttpRequest = new JsHttpRequest('UTF-8');
ob_start();
$shop->ShowCart($shop_id, $site_users_id, to_str($GLOBALS['LA']['xsl_little_cart']));
$little_cart_html = ob_get_clean();
$GLOBALS['_RESULT'] = array('cart' => $little_cart_html);
echo $JsHttpRequest->LOADER;
exit();
}
// iframe рефрешинг корзины
if (isset($_GET['little_cart']))
{
ob_start();
$shop->ShowCart($shop_id, $site_users_id, to_str($GLOBALS['LA']['xsl_little_cart_no_js']));
$little_cart_html = ob_get_clean();
echo $little_cart_html;
exit();
}
С кодировкой проблем не возникало, потому что при отправке ajax-ответа кодировка указывается явно, а при отправке html для iframe кодировка указывается в этом html.