Не устанавливается значение свойства. А если перед выполнением в SALE было Y, то после выполнения удаляет значения свойства. То есть при выполнении просто происходит удаление значения свойства.
Здравствуёте, Хотел спрость на тему вот этого вопроса https://dev.1c-bitrix.ru/community/forums/messages/forum6/topic84573/message470217/#message470217. У меня похожая проблема, должно сначало приходить письмо оформлемления заказа, потом после подтвердение заказа магазином, приходит письмо с сылкой на оплату, после оплаты приходит письмо о успешной оплате, но вот проблема на этом моменте опять приходит письмо со ссылкой об оплате(ссылка уже не действующая). Я думаю мой слечай. Подскажите пожалуйста по подробей, в каком файле вставить \Bitrix\Sale\Notify::setNotifyDisable(true); перед вызовом DoSaveOrder.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Если возникли проблемы с очисткой cookies в браузере и не получается авторизоваться, можно инициировать удаление лишней куки со стороны сервера:
1. Если не используется многосайтовость, а поле «Доменное имя» очищено, то надо удалить куку с точкой в начале. Для этого впишите в любую строку файла dbconn.php следующий код: setcookie("PHPSESSID", "", 777, '/', '.site.ru'); где site.ru - имя вашего домена.
2. Если используется многосайтовость или не очищено поле «Доменное имя», то впишите код: setcookie("PHPSESSID", "", 777, '/'); строго без имени домена.
Не добавляются платежные системы после переноса сайта. Раньше при добавлении платежной системы было выпадающее меню с различными типами платежных систем, а теперь их нет. Подскажите, где начинать искать решение этой проблемы.
Добрый день, друзья! На дворе 2021 год, а проблема до сих пор не решена со стороны разработчика. Вот и я столкнулся с этой проблемой. Предисловие: был перенос хостинга (c VPS на другую VPS). Перенос прошел почти гладко, но вот с почтой загвоздки. Итак, что сейчас сделано: настроена отправка почты через Postfix, агенты на кроне, все тесты проходят хорошо (все зелененькие галочки). В терминале почта нормально отправляется и доставляется через юзеров root и bitrix. Но при выполнении заказов, при регистрации пользователя и др. событий с сайта, почта отправляется, но не доходит до пользователя. Симлинк на /ets/msmtp сделан. В crontab от bitrix прописан PATH. Крон срабатывает нормально (через минуту после события на сайте появляется в логах msmtp). Лог msmtp
Mar 08 09:11:01 host=127.0.0.1 tls=on auth=off from=noreply@binpro.ru recipients=alex-00@mail.ru mailsize=3749 smtpstatus=250 smtpmsg='250 2.0.0 Ok: queued as A6E0723B4D' exitcode=EX_OK Mar 08 09:40:05 host=127.0.0.1 tls=on auth=off from=noreply@binpro.ru recipients=velobox@inbox.ru mailsize=36938 smtpstatus=250 smtpmsg='250 2.0.0 Ok: queued as 8FC7E23B4C' exitcode=EX_OK Mar 08 10:09:03 host=127.0.0.1 tls=on auth=off from=noreply@binpro.ru recipients=alex-00@mail.ru mailsize=3749 smtpstatus=250 smtpmsg='250 2.0.0 Ok: queued as D129E23B51' exitcode=EX_OK
Настройки msmtp
# smtp account configuration for default account default logfile /home/bitrix/msmtp_default.log host 127.0.0.1 port 25 from noreply@binpro.ru keepbcc off auth off tls on tls_certcheck off
echo "hello from mail.com.ru." | msmtp --debug -a site.ru test@site.ruгде site.ru - значение account в конфиге .msmtprc
пример конфига для яндекса
# smtp account configuration for site.ru account site.ru logfile /home/bitrix/msmtp_site.ru.log host smtp.yandex.ru port 587 from noreply@site.ru keepbcc on auth on user noreply@site.ru password *********** tls on tls_starttls on tls_certcheck off
Не помогают вариации настроек главного модуля для отправки почты и т.д.
Укажите тут /bitrix/admin/settings.php?lang=ru&mid=main&tabControl_active_tab=tab_mail&back_url_settings= "Дополнительный параметр для передачи функции mail:" -a site.ru (см. скрин)
Чтобы гуглю было проще искать: SUCCESS_EXEC='F' , b_event, не работает почта msmtprc
После восстановления пароля, пользователь нажимает на кнопку авторизации, вводит свой логин и новый пароль, но авторизация не происходит. Ошибок не выдает, просто обновляется страница и на этом все. После повторного нажатия на кнопку авторизации - аторизует. В чем может быть проблема?
Всем привет! У меня вот такой вопрос, какие можете посоветовать курсы по битриксу? И вообще что думаете по перспективам развития битрикса в Казахстане? Стоит ли сейчас ставить фокус на его изучение, либо работать лучше с Российскими партнерами? все таки если быть откровенным в России разработчики битрикса куда более продвинутые и фрилансера найти гораздо легче? Спасибо заранее за ответ)
Иногда плавающая "панель управления Битрикс" вызывает трудности. Это бывает, когда на сайте сделана плавающая шапка. Тогда либо (чаще всего) панель Битрикса перекрывает шапку либо наоборот и доступ другой панели становится затруднительным. Да, для неавторизованных и других пользователей, которым не доступна панель администрирования - проблем нет. Вот и приходится заниматься изобретением колеса! Вот если бы была возможность "прятать за край" панель администратора Битрикс и показывать при подводе мышки к краю экрана - вот это было бы очень удобно! Помните была подобная функция в Windows, позволяющая прятать за край экрана "Панель задач"?
Я так понял, пока гуглил, что CUSTOM_PRICE очень "любим" многими за то, что ведёт себя как FINAL_PRICE (которого нет, но суть передаёт лучше). Знаю ситуации, когда такое поведение необходимо. Но так получилось, что чаще мне надо добавить кастомную цену на товар не отключая при этом последующие правила работы с корзиной. И вот я нашёл способ добавлять заранее известную наценку (так можно и понижать цену, но я только про наценку буду говорить) не используя CUSTOM_PRICE. Пропишу основные моменты.
Раз у меня все такие товары всё равно добавляются через кастомный ajax запрос, и наценка известна в момент добавления, то могу спокойно её передавать свойством товара в корзине.
Просто в шаблоне корзины её не выводим для пользователя отдельно, раз она уже считается, тогда никого она смущать не будет. Будем использовать кастомный CatalogProvider (это слишком легко гуглится, чтобы дополнительно расписывать) и слегка дополним getProductData.
/**
* @param array $products
*
* @return Sale\Result
*/
public function getProductData(array $products)
{
$result = parent::getProductData($products);
// Во избежании казусов при работе с командной строкой PHP
if(!Bitrix\Main\Context::getCurrent()->getSite())
return $result;
$basket = Sale\Basket::loadItemsForFUser(Sale\Fuser::getId(), Bitrix\Main\Context::getCurrent()->getSite());
$productDataList = array();
foreach($result->getData()['PRODUCT_DATA_LIST'] as $productId => $arProduct)
{
foreach($arProduct['PRICE_LIST'] as $basketItemId => &$arItem)
{
// При добавлении в корзину нет у товара ID, мы не сможем его свойства тут посмотреть
if((int)$basketItemId !== 0)
{
if($basketItem = $basket->getItemById($basketItemId))
{
$properties = $basketItem->getPropertyCollection()->getPropertyValues();
// Если есть наценка, добавляем её к цене
if(!empty($properties['PRICE_ADD']) && isset($properties['PRICE_ADD']['VALUE']))
{
$arItem['BASE_PRICE'] = $arItem['BASE_PRICE'] + (float)$properties['PRICE_ADD']['VALUE'];
$arItem['PRICE'] = $arItem['PRICE'] + (float)$properties['PRICE_ADD']['VALUE'];
}
}
}
}
$productDataList[$productId] = $arProduct;
unset($arItem);
}
$result->setData(['PRODUCT_DATA_LIST' => $productDataList]);
return $result;
}
Тут всё просто. При вызове обработчика, в корзине находятся товары со свойством наценки, их цена обновляется. Но если товар только добавили, он игнорируется (не достать его свойства пока что в этой функции, их вообще может ещё не быть у товара). На этом моменте компонент bitrix:sale.basket.basket при загрузке страницы уже работает как надо. И если раньше (у вас на проекте) обновление количества товара в корзине происходило через
$item->setField('QUANTITY', $value);
придётся его поменять на
$item->setFieldNoDemand('QUANTITY', $value);
(у меня переделанный шаблон, скопированный ещё тогда, когда цена пересчитывалась при нажатии кнопки "Пересчитать", и ajax обновление количества ручками писанное)
К сожалению, у меня не получилось заставить компонент плавающей корзины bitrix:sale.basket.basket.line обновлять цену при добавлении. Но если копировать его в своё пространство имён и наследовать, то в ajax.php перед вызовом компонента добавляем пересчёт корзины
// Не надо нам при удалении ничего пересчитывать здесь. Таков путь.
if(!$_POST['sbblRemoveItemFromCart'])
{
$basket = \Bitrix\Sale\Basket::loadItemsForFUser(\Bitrix\Sale\Fuser::getId(), SITE_ID);
$refreshStrategy = \Bitrix\Sale\Basket\RefreshFactory::create(\Bitrix\Sale\Basket\RefreshFactory::TYPE_FULL);
$result = $basket->refresh($refreshStrategy);
$basket->save();
}
И где-нибудь повыше модуль sale подключаем (чего стесняться в компоненте корзины, он всё равно там будет). В стандартном шаблоне SITE_ID задаётся выше, так что он определён. И у меня нельзя в плавающей корзине менять количество, только удалять. Не знаю, как себя поведёт при другом раскладе, но теоретически никаких проблем быть не должно.
Собственно всё. Теперь наша наценка - полноценная часть цены. Без всяких блокирующих скидки CUSTOM_PRICE'ов. Единственное, что не делает этот способ совсем незаметным, так это вывод свойства наценки в заказе в админке менеджерам. Но лично я могу этим пренебречь.
Очередное обновление не прошло гладко. При установке обновления очередного модуля выскочила ошибка 504. Это уже не первый раз происходит.
Причина такой ошибки - создание индексов, на довольно большом объеме данных. Из-за чего база может затянуть время выполнения скрипта больше чем таймаут nginx. В этот раз виновником был модуль voximplant, при обновлении он зарядил создание индекса CREATE FULLTEXT INDEX IXF_VI_STATS_1 ON b_voximplant_statistic_index(CONTENT)
Приходится через SHOW PROCESSLIST смотреть когда база справится с этим, и продолжать установку обновлений, в надежде что скрипт последней установки закончил выполнение корректно.
Почему нельзя вынести создание индексов на агенты, уже после установки обновления, не понятно.
Идеально было бы вынести установку обновлений в отдельный фоновый процесс на сервере, а не устанавливать их дергая сервер ajax запросами.
Добрый день, всем! Необходимо реализовать функцию SEO шаблонов less, и использовать следующим образом {=less iblock_element_property.70 "0.30" iblock_element_property.191.PROPERTY_183 iblock_element_property.191.PROPERTY_184}.
Сейчас в инфоблоке iblock_element_property.70 есть свойство типа строка с разными значениями веса изделия, например, 0.12, 1.12 и т.д.
Т.е. если есть свойство инфоблока iblock_element_property.70 и его значение меньше числа 0.30, то выводить значение свойства PROPERTY_183. если больше либо равно 0.30, то выводить значение другого свойства PROPERTY_184 из другого инфоблока, как это реализовать в пользовательской функции, зарегистрировать обработчик события этой функции в файле init.php и использовать ее в шаблоне?
Помогите реализовать очень нужно, заранее спасибо!
здравствуйте. подскажите пожалуйста. у меня на почту приходят заказы с файлом. я настроил почтовый ящик, чтоб письма с этой почты автоматически создавался лид. Создался лид, в комментариях у лида есть файл заказа с почты. как мне обратиться через REST к лиду который создался недавно. Делаю по фильтру, но у меня выводит все лиды за все время.
Всем добрый вечер. Нудна очень помощь - сломался. Битрикс коробка на VirtualBox. При увеличении диска sda3 в момент указания начального сектора была допущена ошибка в одной цифре и теперь виртуальная машина не поднимается, выдает ошибку warning /dev/disk/by-label/bxroot does not exist и все в таком духе (скриншот прикрепил). Помогите пожалуйста, как мне исправить данную ситуацию? Сразу должен оговориться, я не программист и простые фразы из серии "запусти это " или зайти в "конфиг и поправь строку где есть что-то" вызовет еще тысячу вопросов, но помощь очень нужна...
Группировка свойств по разделам или проблема порядка в инфо-блоке с разнородными товарами. В админке есть интерфейс для группировки свойств по разделам. Задача фактически достать эту связку если где-то нужно в публичке или в каких-то алгоритмах импорта или в кабинете.
Существует таблица связей. Интересный у неё mysql-запрос DR OP TABLE if exists b_iblock_section_property; cre ate table if not exists b_iblock_section_property ( IBLOCK_ID int(11) not null, SECTION_ID int(11) not null, PROPERTY_ID int(11) not null, SMART_FILTER char(1), DISPLAY_TYPE char(1), DISPLAY_EXPANDED char(1), FILTER_HINT varchar(255), PRIMARY KEY pk_b_iblock_section_property (IBLOCK_ID, SECTION_ID, PROPERTY_ID), INDEX ix_b_iblock_section_property_1 (PROPERTY_ID), INDEX ix_b_iblock_section_property_2 (SECTION_ID) );
Но так это фреймворк, переходим на уровень абстракции, но всё таки посмотрев на таблицу b_iblock_section_property, можно отметить следующее. Существую записи с SECTION_ID = 0 это основные свойства, то есть выборка списка должна влючать записи как без раздела так и с заданным разделом, так и свойства наследников.
Тут предстоит получить всех родителей заданного раздела.
Мне же нужно просто свойства, не для умного фильтра а для кабинета, ну то есть в админке интерфейс же управления есть и клиент набравший аккуратно свойства, должен же их и при выводе видеть. Больше возможностей будет если работать с новым ядром и так use Bitrix\Iblock\SectionPropertyTable
Всё выводит, и главное что даёт порядок, для каталогов где разнородный товар.
OnBeforeEventSend - замена данных для макроса в почтовом шаблоне
Что то я долго искал решение, а как оказалось проблема была в том что входные переменные нужно передавать по ссылке!
Если нужно подставить свое значение в макрос (к примеру #AUTHOR#) почтового шаблона, например компонента обратной связи bitrix:main.feedback то делается это так:
AddEventHandler('main', 'OnBeforeEventSend', "OnBeforeEventSendHandler"); function OnBeforeEventSendHandler(&$arFields, &$arTemplate) { global $USER;
if($USER->IsAuthorized()) { $arFields["AUTHOR"] = 'Юзер залогинен: '.$USER->GetID().' ('.$USER->GetLogin().') '.$USER->GetFullName().', поле формы: '.$arFields["AUTHOR"]; }else{ $arFields["AUTHOR"] = 'Юзер не залогинен, поле формы: '.$arFields["AUTHOR"]; } }
Сегодня после установки двух новых сайтов, столкнулся с проблемой: при настройки обмена (самописный) с 1С, обмен не стартовал, журнал обмена 1С при проверке соединения выдавал ошибку - "Произошла ошибка авторизации".
Проверка авторизации происходила следующим образом:
Из 1С приходили данные пользователя (логин/пароль) в открытом виде.
Пользователь (админ для обмена), был записан в системной таблице "Список пользователей" (b_user).
Для того, чтобы проверить данные (сравнить логин/пароль), необходимо было получить MD5-хеш от пароля.
API Битрикса не использовалось, т.к. не покрывало все потребности. Например $USERcheck->Login()возвращает true или false и не понятно, что ввел пользователь не так логин или пароль? Или же если кто то авторизован под пользователем и под ним идет проверка функцией она всегда будет возвращать true.
Что удалось выяснить
Первым делом необходимо было выяснить, какие критические изменения были в релизе, обратившись к Истории версий, было найдено следующее изменение:
v20.5.400 2020-07-24 Пароли пользователей теперь хешируются по алгоритму SHA-512.
Таким образом необходимо было переписать функцию. Вот обновленная функция, для последней версии Битрикс:
//проверяем, является ли $password текущим паролем пользователя
function isUserPassword($userId, $password){
$userData = CUser::GetByID($userId)->Fetch();
$salt = substr($userData['PASSWORD'], 3, 16);
$password = crypt($password, '$6$'.$salt.'$');
return ($password == $userData['PASSWORD']);
}
Кому интересно, как формируется пароль и записывается в БД Битрикс, можно посмотреть теперь тут: