В Битриксе, начиная с версии 7.1.3, появилась возможность переопределить стандартный механизм отправки почты.
Когда может быть полезен такой финт ушами? К примеру, когда в конторе есть какой-то централизованный сервис отправки почты, который должны использовать все приложения (SMTP-сервер на другой машине, веб-служба, что угодно). Для примера, рассмотрим GMail в качестве такого сервиса.
Можно ли это использовать, чтобы отправлять почту не через один ящик как сейчас, а напрямую? Наверное, надо как-то определить ящик отправитель и подставить соответствующие ему параметры авторизации $smtpServerUser = 'user@gmail.com'; $smtpServerUserPassword = 'password'; Правильно?
Встретился сегодня с одной проблемкой и спешу поделиться решением...
Итак, ставил на один из сайтов обновления (месячный пакет накопился ...) и при обновлении какой-то сбой произошел ... Результат сбоя - не работают 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 не забываем вернуть код модуля в исходное состояние!
Сколько времени пишу под Битрикс, никогда не знал о существовании константы SITE_TEMPLATE_PATH (не описанной, как всегда, в документации, но любезно подсказанной моим коллегой).
Доброго времени суток! На форуме поднимался как-то уже вопрос о том, как, подтягивая компоненты битрикса по аяксу вытягивать также и скритп, который подключается к компоненту и файл стилей компонента. Тогда решения данного вопроса нормально не было найдено.
И вот теперь есть решение: Более подробно изучил работу с 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;
}
собственно сабж. есть у кого полностью рабочий конфиг ?
мне увы пока так и не удалось полностью подружить эту связку. столкнулся с проблемой заголовков(при ЧПУ), т.е. получаем либо на все 200 OK либо 404 Not Found
если интересно могу выложить конфиги...
совместными усилиями, собрали рабочий конфиг, спасибо Сергею Ляпко
UPD 23.12.2015: Добавил новый конфиг.
Старый
server {
listen 80;
server_name example.com www.example.com;
server_name_in_redirect off;
# access_log /var/log/nginx/example.com.nginx.access.log main;
index index.php;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
client_max_body_size 1024M;
client_body_buffer_size 4M;
root /var/www;
#кому не надо убирать у домена www это не пишем. между http:// и example.com убрать пробел, парсер дурит :)
if ($host = 'www.example.com' ) {
rewrite ^(.*)$ http:// example.com$1 permanent;
}
location / {
try_files $uri $uri/ @bitrix;
}
location ~ \.php$ {
try_files $uri @bitrix;
fastcgi_pass unix:/var/run/php5-fpm/www.sock; #путь до сокета php-fpm
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location @bitrix {
fastcgi_pass unix:/var/run/php5-fpm/www.sock; #путь до сокета php-fpm
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/bitrix/urlrewrite.php;
}
location ^~ /bitrix/admin/ {
try_files $uri @bitrixadm;
fastcgi_pass unix:/var/run/php5-fpm/www.sock; #путь до сокета php-fpm
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location @bitrixadm{
fastcgi_pass unix:/var/run/php5-fpm/www.sock; #путь до сокета php-fpm
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/bitrix/admin/404.php;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$ {
access_log off;
expires max;
error_page 404 = /404.html;#не забываем создать страницу
}
location ~ (/\.ht|/bitrix/modules|/upload/support/not_image|/bitrix/php_interface) {
deny all;
}
#все помнят это :)
location ~ /.svn/ {
deny all;
}
location ~ /\.ht {
deny all;
}
}
Эта конструкция не совсем правильная, поскольку параметр PHP_VALUE на всём пространстве данного location может быть объявлен только один и второе присваивание значения перекрывает первое правильнее будет: fastcgi_param PHP_VALUE "mbstring.func_overload=2 mbstring.internal_encoding=utf-8";
Недавно столкнулся со старой версией битрикса у клиента, нужно было реализовать нечто подобное Если в методе CEvent::Send id сайта передан как массив, то в методе SendAttach нужно поправить выборку при обращении к таблице b_event_message
Подскажите, пожалуйста, где почитать о принципах работы каптчи, подобной этой? Обычно все просто - берется случайный секретный код, сохраняется в сессии и затем сравнивается с введенным пользователем. А тут, чем отличается CheckCode от CheckCodeCrypt и зачем нужны $captchaPass, $captcha_code?
Доброго времени суток, уважаемое сообщество... Сей пост про использование стандартной библиотеки всплывающих окон 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 (отключает анимацию), либо объект (на счет последнего надо смотреть отдельно, но вроде как позволяет задать свой собственный тип анимации)
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».