Сколько времени пишу под Битрикс, никогда не знал о существовании константы SITE_TEMPLATE_PATH (не описанной, как всегда, в документации, но любезно подсказанной моим коллегой).
Точнее, если бы это было так просто, я бы об этом не писал
Задача
Представим такую задачу: нужно разработать форму, изменения из которые будут приняты только в том случае, если пользователь правильно введёт свой текущий пароль. Пример такой формы можно увидеть, к примеру, на free-lance.ru (Настройки → Основные настройки).
Проблема
Предположим, что проблем с у формой у нас не возникло. Но вот беда, как проверить пароль из формы на соответствие текущему паролю пользователя? К сожалению, стандартной функции в API Битрикса я для этого не нашёл.
Всё проблемы имеют решение
Сначала я подумал, что в поле PASSWORD Битрикс хранит простой MD5-хеш от пароля. Но всё оказалось не всё так-то просто
Оказывается, Битрикс прибявляет к паролю так называемую "соль" (подробности — в спец. литературе). Покопавшись в метода CUser::Login() можно узнать и алгорим сверки. А дальше дело за маленьким: реализовать этот алгорим у себя.
В Битриксе, начиная с версии 7.1.3, появилась возможность переопределить стандартный механизм отправки почты.
Когда может быть полезен такой финт ушами? К примеру, когда в конторе есть какой-то централизованный сервис отправки почты, который должны использовать все приложения (SMTP-сервер на другой машине, веб-служба, что угодно). Для примера, рассмотрим GMail в качестве такого сервиса.
Механика простая: везде, где должна вызываться функция mail(), вызывается bxmail(). А уже в этой функции, перед вызовом стандартной функции mail(), Битрикс проверяет, определена ли функция custom_mail() и, если да, вызывает её вместо mail(). Соответственно, чтобы переопределить механизм отправки, нужно всего лишь написать функцию custom_mail() (в /bitrix/php_interface/init.php, к примеру (если хотим, чтобы такой механизм отправки действовал для всех сайтов на данной копии)).
Приступим к делу! Лично мне для отправки почты через GMail ближе всего Zend_Mail, но... Ни эта библиотека, ни другие не позволяют установить "сырые" заголовки для письма. А разбирать $additional_headers мне что-то не очень хочется. Следовательно, выбор перепадает на PEAR::Net_SMTP, как на механизм прямой работы с SMTP-сервером.
Итак, ближе к коду!
require_once 'Net/SMTP.php';
/**
* Отпраляем почту через SMTP-сервер GMail (пользователь: user@gmail.com).
*
* @see CEvent::HandleEvent()
* @see bxmail()
*
* @param string $to Адрес получателя.
* @param string $subject Тема.
* @param string $message Текст сообщения.
* @param string $additionalHeaders Дополнительные заголовки передаются Битриксом почти всегда ("FROM" передаётся здесь).
*
* @return bool
*/
function custom_mail($to, $subject, $message, $additionalHeaders = '')
{
/*
* Настройки можно (нужно) вынести в админку, но это уже домашнее задание :)
*/
$smtpServerHost = 'ssl://smtp.gmail.com';
$smtpServerHostPort = 465;
$smtpServerUser = 'user@gmail.com';
$smtpServerUserPassword = 'password';
if (!($smtp = new Net_SMTP($smtpServerHost, $smtpServerHostPort))) {
return false;
}
if (PEAR::isError($e = $smtp->connect())) {
return false;
}
if (PEAR::isError($e = $smtp->auth($smtpServerUser, $smtpServerUserPassword))) {
return false;
}
preg_match('/From: (.+)\n/i', $additionalHeaders, $matches);
list(, $from) = $matches;
$smtp->mailFrom($from);
$smtp->rcptTo($to);
/*
* Получаем идентификатор конца строки у Битрикса.
*/
$eol = CAllEvent::GetMailEOL();
$additionalHeaders .= $eol . 'Subject: ' . $subject;
if (PEAR::isError($e = $smtp->data($additionalHeaders . "\r\n\r\n" . $message))) {
return false;
}
$smtp->disconnect();
return true;
}
Вынесение настроек в админку, создание статического объекта соединения (чтобы не тратить время при отправке множества писем за раз) — это всё задания на дом
Добрый день. Запутался маленько, получается с помощью данного механизма можно разделить почту по типам. В стиле информация о задачах с 1 почты, информация о событиях календаря с другой?
Apache — это, по большому счёту, такой рудемент уже. И держится он только потому, что много в мире виртуальных хостингов, на которых .htaccess решает. Ну и всяких специфических расширений к нему куча (если уж случилась ситуация, что такое расширение нужно — тут да, тут без вариантов Apache).
Представим, что мы на собственном сервере, на котором имеются все возможности доступа к конфигурации. Тогда что нам мешает полностью избавиться от Apache в пользу nginx? Мне не помешало ничего
Далее я просто приведу пару подводных камней и путей из обхода, с которыми пришлось столкнуться при переходе.
Собственно, основная проблема только с ЧПУ, с тем, как его настроить. Решается просто:
server {
...
if (!-e $request_filename) {
rewrite ^(.*)$ /bitrix/urlrewrite.php last;
}
location ~ \.php$ {
if (!-f $request_filename) {
rewrite ^(.*)/index.php$ $1/ redirect;
}
...
}
...
}
Далее, наткнулся на ограничение максимального размера заголовка. Возможно, это я такой везучий, но так уж случилось у меня с настройками по умолчанию, поэтому, думаю, может и у других быть. Я решил проблему на уровне всего сервера:
Инфоблоки — это, наверное, самый используемый модуль. Ни один сайт на Битриксе не обходится без него. Это очень гибкий инструмент, но чтобы воспользоваться всей этой гибкостью, придётся хорошенько изучить API. Но официальная документация, как мы знаем, описывает не всё моменты
Задача
И так, задача, которая встаёт перед каждым разработчиком, который использует информационные блоки — выбрать свойство(-а) элемента инфоблока и вывести его на экран. Первая половина дела банальна: метода класса CIBlockElement подробно описаны в документации. А вот со второй половиной (особенно, если свойство сложного типа) уже интереснее
Решение задачи
Возьмём свойство типа «HTML\текст». Для этого свойства нельзя просто вывести его значение (ключ «VALUE»), т.к. это — массив, содержащий,«сырое» значений и его тип (HTML или текст). Нет, мы может, конечно, сами отформатировать «сырое» значение в соответствии с его типом, но в голову закрадывается сомнение — неужели это не реализовано в самой CMS? Как же работает с произвольными свойствами компонент bitrix:news?
Собственно, из кода этого самого bitrix:news мы и сможем узнать, как же он так хитро работает А ничего хитрого-то, оказывается, и нет! Всего один вызов метода GetDisplayValue класса CIBlockFormatProperties:
Подскажите более детально пожалуйста по вопросу Tuvalin Roman. Надо вывести свойство "привязка желементов с автозаполнением" и вместе с ним вывести картинку элементов из этого свойства.
Итак, механиз уже давно известен. Но есть проблема: пользоваться решением, описанным в предыдущей заметке, довольно неудобно: правка php_interface/init.php, настройка клиента в коде...
Но пришлось время избавиться от всего этого Пришло время обернуть всё это в удобный модуль. Предпочтительный вариант установки модуля — из PEAR-канала:
До недавнего времени меня вводила в недоумение постраничная навигация. Нигде в документации не описано, как поменять шаблон для неё! Но, если руки растут из того места, то во всём можно разобраться самому. А чтобы другим не пришлось тратить на это время, я решил написать эту заметку
Что было? Что будет?
И так, начнём! Что же мы имеем в начале?
Как-то некрасиво, на мой взгляд. Но это можно исправить!
Вот, что из всего этого мы хотим получить:
Тире между числами в интервале, красивая навигация…
За работу!
Для исправления нужно-то всего ничего — поменять шаблон компонента bitrix:system.pagenavigation. Этот компонент не описан в документации, его не в визуальном редакторе. Он «системный»
Приведу, без лишних разговоров, код исправленного мною шаблона (который нужно положить, конечно же, в /bitrix/templates/components/bitrix/system.pagenavigation/.default, если Вы хотите, чтобы он по умолчанию работал на сайте).
А названия шаблона поменять не пробовали? тот что на первой картинке имеет название .default и применяется по умолчанию. тот который хотел достичь автор статьи схож с шаблоном с именем modern. Если у Вас системный компонент то в его настройках относящихся к выводу постраничной навигации есть поле для названия шаблона с помощью которого его нужно выводить. Указываете название шаблона постраничной навигации и он у вас меняет внешний вид.
У меня компонент вывода товаров (catalog.section), он скопирован его шаблон я изменил, в коде есть строка отвечающая за пагинацию товаров, но это не компонент пагинации, чтобы скопировал и изменил.
Как изменить эту пагинацию? Залазил в /bitrix/components/bitrix/system.pagenavigation/templates/ там несколько шаблонов, они не отвечают за это, а в /bitrix/templates/мой_сайт/components/bitrix/ нет компонента system.pagenavigation.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».
например у меня в компоненте надо подставить текущий путь к шаблону
надо аналог SITE_TEMPLATE_PATH только без пути файла
типа SITE_TEMPLATE_URL
bitrix/templates/furniture_pale-blue/components/bitrix/main.feedback/feedback/template.php