была у меня в закладках хорошая статейка, а щас вот открыл - а ее нет:( хорошо, хоть у гугла есть сохраненная копия страницы. автор, простите за репост без подписи ...
В веб-окружении Битрикса по-умолчанию стоит 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 Перенес инструкцию (вместе с дополнениями) себе на сайт
Похоже отправка через Яндекс накрылась (по крайне мере у нас так - работала годами, теперь - всё - Яндекс против, что слегка завуалированно следует из ответа их техподдержки ). Настроил Гугл - работает, посмотрим, насколько долго это продлится .
Встретился сегодня с одной проблемкой и спешу поделиться решением...
Итак, ставил на один из сайтов обновления (месячный пакет накопился ...) и при обновлении какой-то сбой произошел ... Результат сбоя - не работают 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 не забываем вернуть код модуля в исходное состояние!
Доброго времени суток! На форуме поднимался как-то уже вопрос о том, как, подтягивая компоненты битрикса по аяксу вытягивать также и скритп, который подключается к компоненту и файл стилей компонента. Тогда решения данного вопроса нормально не было найдено.
И вот теперь есть решение: Более подробно изучил работу с BX.ajax
Сильно расписывать нет времени, посему, сразу готовые наработки.
Итак, есть какой-то компонент. У данного компонента есть файл result_modifier.php
Т.о. в файл /ajax.php размещаем подключение компонента. Указанным запросом получаем данный компонент и помещаем его в контейнер с id="result_container". Все!
В результате файлы script.js и style.css, подключаемые вместе с компонентом, будут также подключаться и при запросе компонента по технологии ajax.
Возникла тут интересная задача реализации многосайтововости на доменах. Есть сайт на домене .ru, контент сайта фильтруется по регионам, т.е. имеются сайты вида: moscow.sitename.ru, piter.sitename.ru, kiev.sitename.ru, kharkov.sitename.ru .... и так все регионы (как вы понимаете, список регионов постоянно расширяется...). Возникла необходимость в вынесении украинских регионов на украинский домен sitename.com.ua.
ru-сайт был поднят на BitrixVM, как сайт по умолчанию (до меня), ДНС-ы самого домена и всех его алиасов были настроены на IP сервера. Все алиасы обрабатываются на стороне сайта так что для сервера никаких проблем с обработкой поддоменов и разбросом их по различным папкам тут нет. Точнее не было, пока не было необходимости выделения украинской части сайта в отдельный сайт.
Как-то скомкано получается изложить всю проблему, но, надеюсь, кому нужно - поймут.
И вот начал я насипрйку многосайтовости. В админке битрикса вторую лицензию занял новым укр. сайтом. В админке виртуальной машины завел дополнительный сайт для .com.ua. Настроил днс-ы украинского домена и его алиасов аналогично значениям ру-домена. Открываю сайт sitename.com.ua - попадаю в верную папку. Радуюсь. А вот дальше начинается счастье... Т.к. в настройках серверов я чуть сильнее чайника, то посмотрев на файлы конфигурации nginx, впал в ступор - понимаю, где править нужно, но не понимаю, что. Пришлось обращаться к знакомому сервернику. За что ему как всегда, огромное спасибо! Кому нужен специалист такого профиля - пишите вличку, познакомлю:)
Итак, решение задачи заключалось в правке всего 4-х файлов:
server {
...
server_name _;
...
set $proxyserver "http://127.0.0.1:8888";
set $docroot "/home/bitrix/www";
index index.php;
root /home/bitrix/www;
}
подменяем параметр "server_name", прописывая сюда ру-домен с алиасами:
server {
...
server_name *.sitename.ru sitename.ru;
...
set $proxyserver "http://127.0.0.1:8888";
set $docroot "/home/bitrix/www";
index index.php;
root /home/bitrix/www;
}
Доброго времени суток, уважаемое сообщество... Сей пост про использование стандартной библиотеки всплывающих окон 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 (отключает анимацию), либо объект (на счет последнего надо смотреть отдельно, но вроде как позволяет задать свой собственный тип анимации)
Стояла передо мной задача - создавать пользователей из xml-файла, который обновляется раз в полчаса..
само добавление пользователей и парсер xml - просты, их описывать не буду. Остановлюсь именно на создании событий cron с учетом необходимости использования ядра. (подсмотрел тут)
Итак, тут: tools/users-importer.php создаю нужный скрипт, закрываю к нему доступ, чтобы никто не ломился ...
В самое начало файла-скрипта подключаем ядро продукта:
kopoBko, ничего не понел... Вы к тому что следующие агенты будут запускаться с какимто приколом?! Так я могу и 10 таких сделать и посчитать время выполнения и время зхапуска агентов.. но что это даст?!
Мне приходилось делать агенты которые внутри себя порождали еще кучу агентов, а те в свою очередь еще парочку... и все нормально отрабатывало и если ктото не успевал, остальные не запускаются вперед. Иначе бы у меня уже все поразваливалось и ничего не работало
Доброго времени суток. Встала задача - реализовать загрузку каталога из двух 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С-Битрикс».