была у меня в закладках хорошая статейка, а щас вот открыл - а ее нет:( хорошо, хоть у гугла есть сохраненная копия страницы. автор, простите за репост без подписи ...
В веб-окружении Битрикса по-умолчанию стоит msmtp для отправки писем. Если ваш домен привязан к Яндекс.Почте для домена, и вы хотите отправлять почту через реально существующий почтовый ящик с авторизацией, вам придётся внести в файл конфигурации некоторые изменения, чтобы всё работало хорошо.
Файл /home/bitrix/.msmtprc:
account default
logfile /var/log/msmtp.log
host smtp.yandex.ru #(smtp.gmail.com - для гугла) #
port 587 # именно этот порт! #lkz гугля рекомендуют ставить 465, хотя в просторах сети читал, что и 587 подходит ...#
from robot@domain.ru
keepbcc on
auth on
user robot@domain.ru
password <password>
tls on
tls_starttls on # обязательно для Яндекс.ПДД
tls_certcheck off
И не задавайте слишком длинных паролей.
P.S: при работе с GMail вторую строку (tls_starttls) наоборот включать не нужно.
UPDATE 2014-09-08
полный файлик с настройками для gmail:
account default
logfile /var/log/msmtp.log
host smtp.gmail.com
port 587
from user@gmail.com
auth on
user user@gmail.com
password password
tls on
tls_starttls on
tls_certcheck off
keepbcc on
для корректности настройки можно выполнить из сервера команду:
php -r "mail('test@email.com', 'Test', 'Test');"
UPDATE 2014-12-02
Для проверки из сайта, в командную строку можно ввести код:
if (mail("moe_mylo@gmail.com","test subject", "test body","From: otpravitel@bitrix.ru"))
echo "Сообщение передано функции mail, проверьте почту в ящике.";
else
echo "Функция mail не работает, свяжитесь с администрацией хостинга.";
Только email-адресы ставьте ваши
P.P.P.S Перенес инструкцию (вместе с дополнениями) себе на сайт
Доброго времени суток, уважаемое сообщество... Сей пост про использование стандартной библиотеки всплывающих окон PopupWindow
Для начала тем, кто еще не знаком, стоит познакомиться с официальной документацией и с постом:
Итак ...
Была у меня задача - сделать аяксовую сменую 3-х отображений списка товаров инфоблока. Об этом писать не буду. Тут достаточно изучить пост . Это успешно было реализовано. Все обрадовались, попили пива ... А дальше начали детально все тестировать и обнаружили, что стандартная всплывашка, которая появилась в eshop и реализованная через JCCatalogSection после аякс-показа элемента - просто не отрабатывает. Потратил часа 4 - так и не разобрался, что же нужно сделать, чтобы работала ... Посему, решил сделать свою всплывашку.
Создал отдельный js-файл, подключил его сразу в хедере (знаю, что можно было подключить и только на тех страницах, где это нужно, но не стал уже заморачиваться.... хотя стоило бы:) ), а также подключаем в хедере popup:
ну и последний штрих: во всех видах отображения у ссылок, отвечающих за добавление товара в корзину, добавляем класс "buy_btn". Примерно вот так:
<a class="buy_btn" href="#" product_id="<?=$arItem['ID']?>" > В корзину </a>
обычно в атрибут "product_id" помещаю ID товара, который нужно добавить в корзину. Не совсем корректно, но ничего умнее пока не придумал:)
Суть скрипта: вешаем на ссылку с классом buy_btn обработчик, который получает ID товара и количество единиц, которое нужно добавить (в данном случае - всегда 1 )и это все передаем в функцию, которая делает аякс- запрос к файлу, добавляющему товар в корзину (этот файл возвращает обратно компонент "Ссылка на корзину", который также обновляем при добавлении товара в корзину) и вызывает всплывашку.
Простите, если сбивчиво описал - у меня отпуск начался:) Всем, кто также как и я в отпуске - удачно отдохнуть!
P.S. Если не хотите портить дефолтные стили у шаблонов от eshop - просто удалите атрибут ID у ссылок добавления в корзину:)
UPD ATE 201-09-22
Увидел еще одну штуку: если нужно какое-то событие после показа popup-окна, то добавляется еще один параметр, описывающий popup:
Это увидел в компоненте catalog.se t.constructor. Оставил так, как было в исходнике. Суть: сначала в попапе показывается прелоадер, а при открытии из файла popup.php тянется содержимое попапа ... Но, конечно же, можно сделать еще кучу других очень полезных фишек, используя данный метод ...
Немного про анимацию BX.PopupWindow имеет возможность открывать и закрывать pop-up с анимацией. задается через BX.PopupWindow.setAnimation(option) Option - либо строка (fading, fading-slide, или scale), либо null или false (отключает анимацию), либо объект (на счет последнего надо смотреть отдельно, но вроде как позволяет задать свой собственный тип анимации)
Встретился сегодня с одной проблемкой и спешу поделиться решением...
Итак, ставил на один из сайтов обновления (месячный пакет накопился ...) и при обновлении какой-то сбой произошел ... Результат сбоя - не работают js-скрипты в админке... даже авторизоваться через админку не получается.
Заменил содержимое папки /bitrix/js/main/ на аналогичное же содержимое с другого сайта (где обновления встали отлично). и тут меня ждал сюрприз: включенный cdn, и, как следствие, скрипты тянутся не из указанной папки, а из облака. Все! файлы обновил, а админкой пользоваться все равно не могу, ну и CDN отключить, чтобы файлы из ядра все-таки заработали тоже не могу...
Перерыл кучу информации как же отключить cdn имея только ftp-доступ и вот до чего дошел: Открываю файл: /bitrix/modules/bitrixcloud/classes/general/cdn_config.php и в нем нахожу строки (131-134):
public function isActive()
{
return ($this->active > 0);
}
В return вместо проверки активности ставлю false - и это дает мне возможность загрузиться в админке, ну а дальше - дело техники. Отключаем cdn-ускорение и ищем дальше ошибки ...
P.S. после отключения cdn не забываем вернуть код модуля в исходное состояние!
Доброго времени суток. Встала задача - реализовать загрузку каталога из двух csv-файлов: файла с разделами каталога и файла с товарами с разброской свойств, характеристик товаров и привязкой к разделам. Создание товаров/разделов - не вижу смысла описывать, остановлюсь более детально на механизме обработки csv-файла.
Для начала, рекомендую ознакомиться с постом. Мой механизм чтения CSV - практически полностью идентичен (с небольшим дополнением).
Вот так получаем ассоциативный массив из csv-файла Построчно: * Подключаем CSV-класс * Читаем файл (при этом, первую строку также считываем) * Загружаем файл, который был добавлен в файловый input с именем "products_csv" * устанавливаем в качестве разделителя запятую * объявляем массив, в который будем помещать строки * объявляем массив, в который будем помещать заголовки полей * обрабатываем каждую строку файла * Если массив заголовков еще пустой, то заполняем его. * Иначе - перебираем все заголовки полей и формируем ассоциативный массив на основании данных строки файла * помещаем сформированный массив в общий контейнер.
Ну вот. Данные из файла считали. Дальше их необходимо обработать. Загрузить сразу все одним комом - не реально (Разделов у меня было 144 - они бы загрузились. А вот товаров - несколько тысяч. Тут бы сервер и объяснил мне на сколько я не прав...), следовательно, нужно обрабатывать блоками. Я выбрал вариант обработки каждой строки по отдельности. Для этого получился небольшой JS скрипт с отправкой данных через ajax-post-запросы:
<div id="loading"><p class="persents"><?=Loc::getMessage('PAI_LOADING');?><span class="pv">0</span>% (<?=Loc::getMessage('PAI_ROW');?><span class="rv">1</span>/<?=count($arRows)?>) </p></div>
<sc ript type="text/javascript">
var ajaxurl = '<ajax_url_path>'; // url to pass ajax requests
var Rows = <?=json_encode($arRows);?>;
var countRows = <?=count($arRows);?>;
function work_with_row(num, Row, d){
var Persents = (parseInt(num)+1)*100 / parseInt(countRows);
$('p.persents').find('span.pv').html(Math.round(Persents));
$('p.persents').find('span.rv').html(parseInt(num)+1);
$.ajax({
type: "POST",
url: ajaxurl,
data: {action: 'AddProduct', ProductData: Row},
dataType: "json",
success: function (data) {
d && d.resolve();
},
onfailure: function(){
d && d.resolve();
}
});
}
$(document).ready(function(){
var wait = BX.showWait('loading');
var deferreds = [];
var i=10;
$.each(Rows,function(index,value){
var d = new $.Deferred();
window.setTimeout(function() { work_with_row(index,value,d) }, 1000*index+(i++));
deferreds.push(d);
});
$.when.apply($, deferreds).done(function () {
$('p.persents').html('<?=Loc::getMessage('PAI_LOAD_DONE')?>');
BX.closeWait('loading',wait);
});
});
</sc ript>
Построчно: * div-контейнер, в котором будет публиковаться информация о состоянии загрузки * задаем переменную, в которой прописываем адрес, куда будем отправлять ajax-запросы * в переменную Rows помещаем считанные из csv-строки * в переменную countRows записываем количество строк для последующего подсчета текущего состояния загрузки * описываем функцию для обработки каждой записи * определяем текущий статус загрузки в процентном и абсоллютном соотношениях * далее отправляем аякс запрос, результаты которого помещаем в очередь на вывод пользователю * далее описываем функцию, котора отрабатывает сразу после загрузки страницы, т.е. после чтения csv-файла * показываем прелоадер в правом верхнем углу блока с ID=loading * определяем массив для очереди * устанавливаем приращение для очереди * перебираем все записи, при этом вызываем функцию обработки записи с интервалом * когда обработка завершена - выводим пользователю соответствующее сообщение и убираем прелоадер
Все! Вот такой вот вышел очередной опыт в переносе каталога из одной системы - в другую.
Попович Алексей написал: безоговорочно верю в то, что раз существует в ядре битрикса специальный класс для выполнения какой-либо операции, значит что-то в этом классе сделано более качественно, или более понятно для битрикса, просто я еще не знаю, что именно.
совсем нет вся суть bitrix - наплодить 100000 файлов чтобы работало только на дорогом хостинге без ограничений на кол-во файлов и процессорного времени
внимательно смотрите код прежде чем писать что ниче не работает. Автор сам не очень понял что создал. Суть в том, что если в скидке четко выделяется id товара (ВНИМАНИЕ) по одному из условий - тогда да, код имеет место быть. Если же применение скидки идёт по, например, значению свойсвта - код НЕ будет работать
Привет всем , кто подскажет как создать новый тип свойства для РАЗДЕЛА инфоблока, чтобы в нем отображался список из свойств этого или другого ИБ Нужен код Заранее спасибо
Калашнов Антон написал: Для этих целей нужно заводить отдельную папку и все тестовые скрипты хранить только в ней.
Нет, для этих целей надо запретить отгрузку каких-либо тестовых скриптов в продуктивную среду. Тестовым скриптам место лишь в тестовой среде.
Если же речь идет о служебных механизмах, то те из них, которые могут быть запущены из терминала, следует располагать выше корневой директории сайта. Те же, что предназначены к запуску из браузера, следует размещать в административной части сайта с соответствующими проверками прав доступа.
Простите меня, уважаемые разработчики сего чудо, но я действительно не понимаю логики компонента, который вызывает самого же себя по аяксу и после этого отображает контент? в чем фишка всей этой рекурсии. Может я полная деревяшка и чего-то не въезжаю, но логики действительно не могу понять:(
К тому же кастомизация шаблона этого компонента оказалась уж очень веселой. Провожу редизайн сайта и новый шаблон привязываю к отдельной папке. Выношу шаблон этого компонента в пространство имен своего нового шаблона сайта и получаю по аяксу результат, что нет у меня такого шаблона .... Пробовал уже даже в дефалтный шаблон сайта выносить - та же малина:(
В итоге пришлось создать свой шаблон прямо в папке /bitrix/components/bitrix/catalog.bigdata.products/templates/мой шаблон/
Кто понимает логику всего этого действия - буду очень благодарен за разжевывание, для общего моего развития и пользы всего сообщества:)
Богдан Фенюк написал: Если есть вызов бигадаты 'BIG_DATA':true, то вызывается дефолтный шаблон компонента, а не наш кастомный.
Бигдата подгружает шаблон, указанный в качестве шаблона компонента catalog.section. Обратитесь с описанием проблемы в тех.поддержку и оставьте здесь номер обращения - разберёмся.
Виласека Орландо написал: Бигдата подгружает шаблон, указанный в качестве шаблона компонента catalog.section. Обратитесь с описанием проблемы в тех.поддержку и оставьте здесь номер обращения - разберёмся.
Зашел на свою тестовую страницу, чтобы сделать скриншоты для поддержки, но оказалось, что всё сейчас работает правильно, т.е. поднимается кастомный шаблон catalog.section. Не знаю...... Может что-то с обновлениями последними пришло. Пока вопрос снимаю, если замечу что-то, то тогда возобновлю тему. Спасибо!
Есть подозрение у нас, что блок персональных рекомендаций всем показывает одинаковые товары. Старый catalog.bigdata.products показывал разные товары. Не знаю, насколько они были "персонализированными", но поскольку продажи с голубыми отметками есть, мы считаем, что блок работает и для покупателей полезен. Но товары были разные для разных посетителей.
А вот тут новый вариант с catalog.section https://astramed.com.ua/v4/ [{'VARIANT':'3','BIG_DATA':true},{'VARIANT':'3','BIG_DATA':true},{'VARIANT':'3','BIG_DATA':true}] и вот параметры "RCM_PROD_ID" => "", "RCM_TYPE" => "personal", "SECTION_CODE" => "", которые могут повлиять на данные, и вот что вижу я https://www.screencast.com/t/1VN3TUyHD15J
Если новый вариант вам покажет какие-либо другие товары, то скорее всего, я ошибся и всё работает отлично. А если товары такие же, то значит что-то где-то не так. Пожалуйста, подскажите, что я не так делаю?
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».