Записи с меткой "Настройки"
Исправление ошибки кодировки таблиц
В результате проверки системы, Битрикс указал, что есть ошибки в Базе данных, но иногда автоматически он не может всё исправить, и тут приходится исправлять своими ручками.
Нажимая на знак вопроса мы видим подсказку от Битрикса где сообщает, что кодировка текущих наших таблиц, должна совпадать с кодировкой базы данных.

Если перейдем по ссылке на "журнал проверки системы", то увидим список тех таблиц, где не совпали кодировки, вот нам они и нужны, на скриншоте пометил стрелочками.

SQL запрос:
ALTER TABLE b_iblock_property_feature CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Где b_iblock_property_feature - это название таблицы, у Вас могут быть другие.
Таким образом я выписал и составил список sql запросов для всех своих таблиц из журнала.
ALTER TABLE b_iblock_property_feature CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_block CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_demo CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_domain CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_file CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_hook_data CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_manifest CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_placement CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_repo CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_site CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_syspage CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_template CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_landing_template_ref CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_main_mail_blacklist CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_main_mail_sender CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_messageservice_message CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_messageservice_rest_app CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_messageservice_rest_app_lang CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_mobileapp_app CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_mobileapp_config CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_numerator CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_numerator_sequence CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rating_voting_reaction CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_ap CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_ap_permission CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_app CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_app_lang CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_app_log CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_event CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_event_offline CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_log CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_placement CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_stat CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_rest_stat_method CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_seo_service_subscription CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_user_profile_history CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_user_profile_record CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_utm_iblock_6_section CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_utm_iblock_8_section CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_uts_iblock_6_section CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE b_uts_iblock_8_section CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
После того как Вы собрали список SQL запросов, заходим в админку сайта битрикс (Настройки - Инструменты - SQL-запрос) или по пути, вставляете после адреса сайта /bitrix/admin/sql.php

КОМПЛЕКТЫ ТОВАРОВ
-- // Добавление товара в корзину
/**
* Комплекты
* Начало >>
*/
$aAssoc = Core_Array::getRequest('addassoc');
if (count($aAssoc))
{
foreach($aAssoc as $assoc)
{
$oShop_Cart_Controller = Shop_Cart_Controller::instance();
$oShop_Cart_Controller
->shop_item_id($assoc)
->quantity(1)
->add();
}
}
/**
* << Конец
*/
/**
* Обработчик решения set-of-goods
*/
var lastCheck="";$(document).ready(function(){function t(){total=parseInt($("#mainprice").data("price")),$("select.associated option").each(function(){$(this).prop("selected")&&$(this).data("price")&&(total+=parseInt($(this).data("price")))}),$("input.associated").each(function(){$(this).prop("checked")&&(total+=parseInt($(this).data("price")))}),totalStr="",totalStr+=total,total=totalStr.replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1 "),$("#bz_price").val(total),$("#mainprice").html(total)}$("input[type='radio'].associated").click(function(){lastCheck=lastCheck==this?($(this).prop("checked",!$(this).prop("checked")),""):this}),$("input.associated").click(function(){t()}),$("select.associated").change(function(){t()}),$("input[type=radio].associated:checked").click(),t(),$("select.associated option:selected").click(),t(),jQuery.extend({kaddIntoCart:function(t,a,e,c){c=c||0;var i="";return $(".associated"+a).each(function(){$(this).prop("checked")&&$.clientRequest({path:t,data:{add:$(this).data("item"),count:1},callBack:function(){},context:$("#little_cart")})}),$("select.associated option").each(function(){$(this).prop("selected")&&(i+="&addassoc[]="+$(this).data("item"))}),c?$.bootstrapAddIntoCart(t,a+i,e):$.addIntoCart(t,a+i,e),!1}})});
var lastCheck = "";
$(document).ready(function() {
function t() {
total = parseInt($("#mainprice").data("price")), $("select.associated option").each(function() {
$(this).prop("selected") && $(this).data("price") && (total += parseInt($(this).data("price")))
}), $("input.associated").each(function() {
$(this).prop("checked") && (total += parseInt($(this).data("price")))
}), totalStr = "", totalStr += total, total = totalStr.replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1 "), $("#bz_price").val(total), $("#mainprice").html(total)
}
$("input[type='radio'].associated").click(function() {
lastCheck = lastCheck == this ? ($(this).prop("checked", !$(this).prop("checked")), "") : this
}), $("input.associated").click(function() {
t()
}), $("select.associated").change(function() {
t()
}), $("input[type=radio].associated:checked").click(), t(), $("select.associated option:selected").click(), t(), jQuery.extend({
kaddIntoCart: function(t, a, e, c) {
c = c || 0;
var i = "";
return $(".associated" + a).each(function() {
$(this).prop("checked") && $.clientRequest({
path: t,
data: {
add: $(this).data("item"),
count: 1
},
callBack: function() {},
context: $("#little_cart")
})
}), $("select.associated option").each(function() {
$(this).prop("selected") && (i += "&addassoc[]=" + $(this).data("item"))
}), c ? $.bootstrapAddIntoCart(t, a + i, e) : $.addIntoCart(t, a + i, e), !1
}
})
});
<!--
*
* Комплекты
* Начало >>
-->
<xsl:if test="count(associated/shop_item) > 0">
<div class="associated-block gifts-list clearfix">
<p class="h5 text-center red bold"><i class="fa fa-gift"></i> Выберите подарок: </p>
<div class="slider-similar-wrapper">
<div id="gifts" class="slick-slider">
<xsl:apply-templates select="associated/shop_item" mode="assoc"><xsl:sort select="sorting" data-type="number"/></xsl:apply-templates>
</div>
</div>
<span class="hr"></span>
</div>
</xsl:if>
<!--
* << Конец
-->
Настройка memcahe
'memcache' => array(
'name' => 'Memcache',
'driver' => 'Cache_Memcache',
'server' => '127.0.0.1',
'port' => 11211,
'checksum' => FALSE,
'caches' => $aTypicalCaches,
),
<?php
return array (
'skin' => 'bootstrap',
'dateFormat' => 'd.m.Y',
'dateTimeFormat' => 'd.m.Y H:i:s',
//'reverseDateTimeFormat' => '',
'datePickerFormat' => 'DD.MM.YYYY',
'dateTimePickerFormat' => 'DD.MM.YYYY HH:mm:ss',
'timezone' => 'Europe/Moscow',
'translate' => TRUE,
'chat' => FALSE,
'switchSelectToAutocomplete' => 100,
'autocompleteItems' => 10,
'backendSessionLifetime' => 14400,
'availableExtension' => array ('JPG', 'JPEG', 'GIF', 'PNG', 'WEBP', 'PDF', 'ZIP', 'DOC', 'DOCX', 'XLS', 'XLSX'),
'defaultCache' => 'file',
'session' => array(
'driver' => 'database',
'class' => 'Core_Session_Database'
),...
Конфигурационный файл
Конфигурационный файл размещается в modules/core/config/cache.php и содержит переменную $aTypicalCaches с массивом имен кэшей и их конфигурациями, например:
PHP
$aTypicalCaches = array(
'default' => array('expire' => 3600, 'size' => 262144, 'tags' => FALSE),
'Core_ORM' => array('expire' => 3600, 'size' => 262144, 'tags' => FALSE),
'Core_ORM_ColumnCache' => array('expire' => 3600, 'size' => 262144, 'tags' => FALSE),
'Core_ORM_RelationCache' => array('expire' => 3600, 'size' => 262144, 'tags' => FALSE),
'informationsystem_rss' => array('expire' => 14400, 'size' => 262144),
'informationsystem_show' => array('expire' => 14400, 'size' => 262144, 'compress' => TRUE),
'informationsystem_tags' => array('expire' => 14400, 'size' => 262144, 'compress' => TRUE),
'shop_show' => array('expire' => 14400, 'size' => 262144, 'compress' => TRUE),
'shop_tags' => array('expire' => 14400, 'size' => 262144, 'compress' => TRUE),
'search' => array('expire' => 14400, 'size' => 262144, 'tags' => FALSE),
'structure_breadcrumbs' => array('expire' => 14400, 'size' => 262144),
'structure_show' => array('expire' => 14400, 'size' => 262144, 'compress' => TRUE),
'counter_allSession' => array('expire' => 1800, 'size' => 1024, 'tags' => FALSE),
);
-
expire — время жизни закэшированного элемента, указывается в секундах;
-
size — максимальный размер кэшируемого элемента, указывается в байтах;
-
tags — использовать теггирование кэша, по умолчанию TRUE;
-
compress — сжимать значение перед сохранением в кэш, по умолчанию FALSE.
return array (
'memory' => array(
'name' => 'Memory',
'driver' => 'Core_Cache_Memory',
'caches' => array(
'default' => array()
),
),
'file' => array(
'name' => 'File',
'driver' => 'Cache_File',
'checksum' => FALSE,
'caches' => $aTypicalCaches,
),
'eaccelerator' => array(
'name' => 'eAccelerator',
'driver' => 'Cache_Eaccelerator',
'checksum' => TRUE,
'caches' => $aTypicalCaches,
),
'apc' => array(
'name' => 'APC',
'driver' => 'Cache_APC',
'checksum' => TRUE,
'caches' => $aTypicalCaches,
),
'memcache' => array(
'name' => 'Memcache',
'driver' => 'Cache_Memcache',
'server' => '127.0.0.1',
'port' => 11211,
'checksum' => FALSE,
'caches' => $aTypicalCaches,
),
'xcache' => array(
'name' => 'XCache',
'driver' => 'Cache_XCache',
'checksum' => TRUE,
'caches' => $aTypicalCaches,
),
'static' => array(
'name' => 'Static',
'driver' => 'Cache_Static',
'caches' => array(
'default' => array('expire' => 3600, 'size' => NULL),
),
),);
-
name — текстовое название вида кэширования;
-
driver — имя драйвера, осуществляющего работу с кэшем. Файлы дополнительных драйверов располагаются в директории modules/cache/;
-
checksum — сохранять контрольную сумму кэшируемого объекта и проверять ее при извлечении элемента из кэша, позволяет исключить извлечение поврежденных данных;
-
caches — массив доступных кэшей, чаще всего подставляется переменная $aTypicalCaches.
Конфигурационный файл
-
skin — шаблон центра администрирования, по умолчанию 'bootstrap';
-
dateFormat — формат даты, по умолчанию 'd.m.Y';
-
dateTimeFormat — формат даты-времени, по умолчанию 'd.m.Y H:i:s';
-
timezone — временная зона, по умолчанию 'Europe/Moscow';
-
translate — использовать в пути элемента перевод, по умолчанию TRUE. В случае указания FALSE используется транслитерация;
-
chat — использовать чат между пользователями в центре администрирования, по умолчанию TRUE;
-
switchSelectToAutocomplete — количество элементов, при которых большие списки переключать на автоподстановку, по умолчанию 100. Используется, например, при выборе группы для товаров и информационных элементов;
-
autocompleteItems — количество элементов, предлагаемых в автоподстановке, по умолчанию 10;
-
availableExtension — массив расширений файлов, разрешенных для загрузки в атрибуты элементов центра администрирования. При указании дополнительных элементов не забывайте указывать их в верхнем регистре;
-
defaultCache — вид кэширования по умолчанию;
-
fileIcons — массив соответствий расширений файлов и иконок.
PHP . config.php
Настройка почты, отправка через SMTP, настройка DKIM
Конфигурационный файл размещается в modules/core/config/mail.php. Стандартно используется опция default, для которой задан драйвер sendmail:
'default' => array (
'driver' => 'sendmail',
),
вместо sendmail укажите драйвер smtp.
Далее настройте секцию с параметрами драйвера smtp:
'smtp' => array (
'driver' => 'smtp',
'username' => 'address@domain.com', // Логин
'password' => 'password', // Пароль
'host' => 'ssl://smtp.server.com', // для SSL используйте 'ssl://smtp.server.com', для TLS 'smtp.server.com'
'port' => 465, // порт 25, для SSL порт 465, для TLS порт 587
'timeout' => 10,
'log' => FALSE,
'options' => array(
'ssl' => array(
'verify_peer' => FALSE,
'verify_peer_name' => FALSE,
'allow_self_signed' => TRUE
)
)
)
Мы можем подключиться к портам 465 (SMTP over SSL) или 587 (STARTTLS), если необходим TLS, то установите опцию tls в TRUE и порт в 587:
'smtp' => array (
'driver' => 'smtp',
...
'port' => 587,
'tls' => TRUE,
'timeout' => 10,
...
)
Если адрес электронной почты отличается от username, то используйте дополнительную опцию from с указанием адреса электронной почты:
'smtp' => array (
'driver' => 'smtp',
'username' => 'username', // Логин
'password' => 'password', // Пароль
'from' => 'address@domain.com', // Адрес эл. почты
'host' => 'smtp.server.com', // для SSL используйте ssl://smtp.server.com
'port' => '25', // Порт, для SSL укажите порт 465
'options' => array(
'ssl' => array(
'verify_peer' => FALSE,
'verify_peer_name' => FALSE,
'allow_self_signed' => TRUE
)
)
)
Для отладки включите опцию 'log' в значение TRUE, не забудьте отключить опцию после завершения отладки, так как данные имеют большой размер в логах.
Указание отдельных опций для сайтов
Возможно отдельное задание опций отправки почты для выбранных сайтов, при этом для неуказанных отдельно сайтов будут использоваться общие параметры.
'smtp' => array (
'driver' => 'smtp',
// Общие настройки для всех сайтов
'username' => 'address@domain.com', // Адрес электронной почты
'port' => '25', // Порт, для SSL укажите порт 465
'host' => 'smtp.server.com', // для SSL используйте ssl://smtp.server.com
'password' => 'password', // Пароль
// Индивидуальные настройки для сайта с ID 17
17 => array(
'username' => 'address2@domain2.com', // Адрес электронной почты
'port' => '25', // Порт, для SSL укажите порт 465
'host' => 'smtp.server.com', // для SSL используйте ssl://smtp.server.com
'password' => 'password', // Пароль
)
)
Отдельное указание доступно с версии 6.5.9. Секция 'options' добавлена в версии 6.6.8. Поддержка TLS и указание timeout добавлены в версии 6.8.4.
DKIM
Для того, чтобы письма, отправляемые из системы управления, проходили проверку DKIM, необходимо соединиться с сервером по SSH и создать открытый и закрытый ключ. * доступно с версии 7.0.6
Генерация открытого и закрытого ключа
Создаем закрытый ключ, указав вместо domain.com имя домена:
openssl genrsa -out domain.com.privatekey.pem 1024
где «domain.com.privatekey.pem» — файл приватного ключа, «1024» — длина ключа.
Сохранить путь к сгенерированному ключу, файл будет создан в той же директории, откуда выполнялась команда.
Создаем открытый ключ, указав вместо domain.com имя вашего домена:
openssl rsa -in domain.com.private.pem -out domain.com.public.pem -pubout
где «domain.com.public.pem» — файл публичного ключа
Содержимое файла открытого ключа domain.com.public.pem после генерирования ключа будет следующим:
-----BEGIN PUBLIC KEY-----
ваш открытый ключ
-----END PUBLIC KEY-----
Указание открытого ключа в NS-записи домена
Через панель регистратора домена, в настройках домена создайте TXT-запись для поддомена mail._domainkey со следующим содержимым:
v=DKIM1; k=rsa; p=ваш-открытый-ключ
Ключ должен быть указан в одну строку, без BEGIN и END.
Указание ключа в настройках системы управления
В настройках драйвера или в настройках конкретного сайта укажите использование DKIM и путь к ключу, пример указания для сайта с кодом 2:
return array (
'default' => array (
'driver' => 'sendmail',
),
'sendmail' => array (
'driver' => 'sendmail',
2 => array(
'dkim' => array(
'private_key' => '/home/user4567/domain.com.private.pem',
'selector' => 'mail',
)
),
);
Кроме приведенных опций, для DKIM могут быть заданы следующие:
array(
'hash' => 'sha256', // sha256|sha1
'passphrase' => '',
'selector' => 'mail',
'domain' => NULL,
'identity' => NULL,
'body_canonicalization' => 'relaxed',
)
Особенности настройки почтовых серверов
Яндекс.Почта
Для подключения к почтовому ящику Яндекс из стороннего приложения не подходит обычный пароль, который используется для входа в учетную запись на Яндексе, создайте специальный пароль приложения.
Также может понадобиться разрешить доступ к почтовому ящику с помощью почтовых клиентов, для этого в почте выберите шестерёнку, затем Все настройки → Почтовые программы.
В качестве SMTP-сервера укажите ssl://smtp.yandex.ru, порт 465, не указывать TLS.
Mail.ru
Для подключения к почтовому ящику Mail.ru из стороннего приложения не подходит обычный пароль, который используется для входа в учетную запись, создайте специальный пароль приложения. Перейдите в настройки Mail ID → «Безопасность» → «Пароли для внешних приложений», нажмите Добавить, введите название приложения, чтобы не забыть, для какой программы пароль, скопируйте сгенерированный пароль приложения.
Настройки TinyMCE
Конфигурация визуального редактора
Конфигурация визуального редактора размещена в файле modules/core/config/wysiwyg.php и содержит параметры его инициализации.
Указание стиля для body редактора
В случае, если контент на вашем сайте отображается внутри блока с определенным стилем, например внутри <div class="myclass">здесь текст</div>, то укажите редактору этот стиль в опции body_class:
'body_class' => '"myclass"',
Скрытие части кнопок
Для скрытия части кнопок интерфейса используйте опцию toolbar_mode в значении "sliding", чтобы показать все опции сразу укажите "wrap"
'toolbar_mode' => '"sliding"',
Вставка блочных элементов внутри строчных
Стандартно вставка блочных элементов, например, <div> внутрь <a>, не допускается. Для разрешения такой вставки необходимо внести следующие изменения в конфигурацию визуального редактора:
//'forced_root_block' => '"p"',
'forced_root_block'=> 'false',
'valid_children' => '"+body[style],+a[div|h1|h2|h3|h4|h5|h6|p|#text]"' ,
Вставка тега <p> для первого абзаца
Начиная писать текст в визуальном редакторе, он стандартно оборачивается в тег первого абзаца <p>, чтобы исключить такое поведение внесите следующие изменения в конфигурацию визуального редактора:
//'forced_root_block' => '"p"',
'forced_root_block'=>'false',
'force_p_newlines' => 'false' , Добавление плагинов TinyMCE
'plugins' => '"safari,pagebreak,style,layer,table,save,advhr,advimage,advlink, emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups"',Вставка тега <meta> в тексте документа
Стандартно визуальный редактор вырезает теги <meta> из документа. Для изменения данного поведения нужно внести изменения в конфигурацию визуального редактора:
'extended_valid_elements'=>'"meta[*],i[*],noindex[*]"',
'valid_children' => '"+body[style|meta],+a[div|h1|h2|h3|h4|h5|h6|p|#text]"' ,Если хотите добавлять <meta> в определенных тегах, то расширьте правило. Например, добавление в <footer>:
'valid_children' => '"+body[style|meta],+footer[meta],+a[div|h1|h2|h3|h4|h5|h6|p|#text]"',Вставка данных из Word
С версии редактора TinyMCE 6 плагин paste стал частью ядра TinyMCE. Разработчики предлагают PowerPaste плагин с ежемесячной оплатой.
С версии 7.0.7 в поставку редактора включен плагин paste, которые осуществляет улучшенную вставку данных из Word (как в TinyMCE 5.x версии), активировать его в можете в списке плагинов.
Удаление всех товаров из корзины
Для того, чтобы дать возможность пользователю удалить из корзины сразу все товары необходимо:
1. Добавить в настройки ТДС корзины перед строкой
Core_Page::instance()->object = $Shop_Cart_Controller_Show
вот этот код:
// Удаление всех товаров из корзины
if (Core_Array::getGet('delete_all'))
{
$oShop_Cart_Controller = Shop_Cart_Controller::instance();
$oItemsInCart = $oShop_Cart_Controller->getAll($oShop);
foreach( $oItemsInCart as $oItemInCart)
{
$oShop_Cart_Controller
->shop_item_id($oItemInCart->shop_item_id)
->delete();
}
}
2. Для удаления всех товаров в XSL шаблоне Корзины разместить ссылку
<a title="Удалить все товары из заказа" onclick="return confirm('Вы уверены, что хотите удалить все товары из заказа?')" href="/shop/cart/?delete_all=1">Удалить все</a>УДАЛЕНИЕ И ДОБАВЛЕНИЕ ТОВАРОВ В КРАТКОЙ КОРЗИНЕ
// Добавление товара в корзину
if (Core_Array::getRequest('add')) ...
// Ajax Обновление товара в корзине
if (Core_Array::getRequest('updateCart')) {
$shop_item_id = intval(Core_Array::getRequest('updateCart'));
$count = intval(Core_Array::getRequest('count'));
if (($shop_item_id) && ($count)) {
$oShop_Cart_Controller = Shop_Cart_Controller::instance();
$oShop_Cart_Controller
->checkStock($bCheckStock)
->shop_item_id($shop_item_id)
->quantity($count)
->update();
}
}
// Ajax Удаляение товара из корзины
if (Core_Array::getRequest('deleteCart')) {
$shop_item_id = intval(Core_Array::getRequest('deleteCart'));
if ($shop_item_id) {
$oShop_Cart_Controller = Shop_Cart_Controller::instance();
$oShop_Cart_Controller
->shop_item_id($shop_item_id)
->delete();
}
}
// Ajax
if (Core_Array::getRequest('_', FALSE) && (Core_Array::getRequest('add') || Core_Array::getRequest('loadCart')))
// Ajax
if (Core_Array::getRequest('_', FALSE) && (Core_Array::getRequest('add') || Core_Array::getRequest('loadCart') || Core_Array::getRequest('updateCart') || Core_Array::getRequest('deleteCart')))
// Функции без создания коллекции
$.extend({
...
updateCart: function(path, shop_item_id, count){
$.clientRequest({
path: path + '?updateCart=' + shop_item_id + '&count=' + count,
callBack: $.updelCallback,
context: $('.little-cart')
});
return false;
},
deleteCart: function(path, shop_item_id){
$.clientRequest({
path: path + '?deleteCart=' + shop_item_id,
callBack: $.updelCallback,
context: $('.little-cart')
});
return false;
},
updelCallback: function(data, status, jqXHR){
$.loadingScreen('hide');
$(this).html(data);
}
<xsl:variable name="kol" select="../quantity" />
<xsl:variable name="cena" select="format-number(price, '#####0,##', 'my')" />
Стоимость: <xsl:value-of select="$cena * $kol"/>
<br />
Кол-во: <xsl:value-of select="$kol"/>
<br />
<a href="#" onclick="return $.updateCart('{/shop/url}cart/', {@id}, {$kol}+1)">Добавить</a>
<br />
<a href="#" onclick="return $.updateCart('{/shop/url}cart/', {@id}, {$kol}-1)">Убавить</a>
<br />
<a href="#" onclick="return $.deleteCart('{/shop/url}cart/', {@id})">Удалить</a>
<p>Сумма: <xsl:value-of select="total_amount"/><xsl:text> </xsl:text><xsl:value-of select="shop_currency/name"/></p>
Добавить, Убавить и Удалить лучше всего доработать и заменить на иконки