Как получить какой-то параметр из настроек какого-либо модуля? Рассмотрим на примере настройки веб-аналитики "Когда отослать очередной статистический отчет по EMail".
Идем в настройки, открываем код страницы (html), ищем нужное поле:
И теперь можем получить данное поле так: COption::GetOptionString('statistic', 'next_exec'[, '']);
$ratingId - идентификатор рейтинга, если нужно указать авторитет используем функцию: CRatings::GetAuthorityRating(); $dbUsers - CDBResult с данными пользователей, данные рейтинга хранятся в полях "RATING_*";
Гаджеты соцсети (и рабочего стола) переопределять очень просто. Достаточно перенести его из папки /bitrix/gadjets/bitrix/ в /bitrix/gadjets/my/ (вместо my можно любую папку, главное чтобы ниже bitrix лежала).
И все, у всех пользователей сразу показывается ваш гаджет, обновления его не затронут.
Для фильтра элементов ИБ означает, что верни те элементы, у которых свойство SOMECODE не задано. Примечательность фильтра в том, что ему безразличен тип свойства - будет ли это список (установленный флажок), или строка/число - он все равно отработает корректно.
Рекомендуется применять в тех случаях, когда вы не знаете (не хотите заморачиваться) типом свойства для фильтра (например, компонент, выводящий отмеченными галочками элементы).
Данный фильтр превращается во что-то примерно такое:
Код
AND NOT(FPV0.VALUE IS NULL OR length(FPV0.VALUE)<=0)
Для выборки свойств типа файл множественного типа можно пользоваться недокументированной функцией CFile::GetList($arOrder = Array(), $arFilter = Array(), $arParams = Array())
Примечание: 1. Если посмотреть на код метода, то можно увидеть, что arOrder и arParams нигде не используются
2. в arFilter нужно подставлять плейсхолдер, поэтому синтаксис отличается (наверное, это пофиксят и сделают единообразно).
Код
$strFileID = implode(',', $arFilesID);
// в фильтр добавляем плейсхолдер
$arFilesID = array("@ID" => $strFileID);
// делаем запрос
$arResultFiles = array();
$rcsFiles = CFile::GetList(false, $arFilesID, false);
while($arFile = $rcsFiles->GetNext())
{
// делаем реврайтинг и создаём поле SRC
// в поле SRC хранится путь к ресурсу
$src = "/".(COption::GetOptionString("main", "upload_dir", "upload"))."/".$arFile["SUBDIR"]."/".$arFile["FILE_NAME"];
$src = str_replace("//","/",$src);
if(defined("BX_IMG_SERVER"))
$src = BX_IMG_SERVER.$src;
$arFile = $arFile + Array("SRC" => $src);
$arResultFiles[$arFile['ID']] = $arFile;
}
это было в 9.5x как будет в десятке — будем посмотреть.
Бывает, что форумов много, и путь меняется. Чтобы не пробегать по всем форумам и вручную менять пути, выполните запрос:
Код
UPDATE b_forum2site SET PATH2FORUM_MESSAGE = '/forum/messages/forum#FORUM_ID#/topic#TOPIC_ID#/message#MESSAGE_ID#/' WHERE SITE_ID='s1';
Вместо s1 укажите ID нужного сайта.
Напомню, что я про настройку "Шаблон пути к сообщению на сайте" в настройках форума в админке. Используется при поиске и при отправке почтовых уведомлений.
После этого не забудьте выполнить переиндексацию модуля поиск.
Хак включения фишек Многие, наверное, видели мастер установки/настройки, например, корпортала. В мастере существуют шаги, позволяющие включать/отключать определённый функционал, разбитый по группам. В меню сайта при этом прописывается условие отображения пункта меню на включенность фичи, так же подобное условие зашито в код некоторых компонентов. Иногда хочется временно отключить какой-либо функционал (например, "группы") и включить его позднее. При этом запускать мастер заново тут бывает не совсем удобно, потому что он ко всему прочему переустановит шаблон сайта (и продублирует ряд объектов, если они уже были). Один из выходов - воспользоваться методом CBXFeatures::ModifyFeaturesSettings(array(), array("Фича" => Флаг включения (1/0))). Посмотреть список фич можно принтом результата CBXFeatures::GetFeaturesList(). Например, для включения функционала групп соцсети: CBXFeatures::ModifyFeaturesSettings(array(), array("Workgroups" => 1))
Использовать с пониманием, что вы делаете =) Так как помимо включения/отключения фич мастер установки/настройки так же устанавливает модули и всё такое, в отличие от простого "включения" фич описанным методом.
Уже больше года в продукте, в инфоблоках, появилось одно хитрое поле - nElementID.
Задача - одним запросом выбрать не только нужный элемент новостей, но и следующий элемент по порядку (пусть будет ID по убыванию), и предыдущий. Все бы ничего, но ID могут отсутствовать по порядку, да и сортировка может быть совершенно другая.
Как решается в лоб. Делаем два запроса - в одном дергаем нужный элемент и один следующий. И вторым запросом просто меняем сортировку и в фильтре указываем следующий элемент ниже текущего. Два запроса получается.
Если вдруг потребуется разместить код компонента на странице/в шаблоне, но чтобы его нельзя было настраивать/менять настройки, можно сделать, например, так:
Описание задачи от заказчика Есть N инфоблоков работающих в качестве классификаторов. На странице редактирования элемента ИБ типа «классификатор» нужно вывести данные по связям этого элемента ИБ с другими ИБ. Т.е. нужно показать редактору какие ИБ ссылаются на этот ИБ, какое количество связанных материалов есть (ессно фильтруем по нужным критериям). Нужны ссылки на быстрый отбор этих материалов.
Решение Делаем новый тип данных, а уже в методе GetPropertyFieldHtml размещаем логику, которая будет делать полезную работу.
Так мы можем внедриться в любую форму редактирования ИБ, и генерить в ней нужные нам нестандартные контролы и данные. Достаточно для нужных ИБ добавить «волшебное» свойство.
P.S. 1. Если это совсем уж хак, то ногами сильно не пинайте 2. Очень понравилась функция CIBlock::GetAdminElementListLink - генерация ссылок на фильтры в админке.
Что получилось в итоге: список ссылок вида:
Код
Наименование инфоблока [ наименование свойства ] — количество активных привязок
И до того мне жалко стало менять шаблон ради одной ссылочки, что я сделал довольно через одно место (с помощью этого метода):
Код
$MESS['/bitrix/components/bitrix/socialnetwork.user_groups/templates/.default/lang/ru/template.php']['SONET_C33_T_UPDATES'] = 'Посмотреть последние изменения</a> | <a href="#">Массовое изменение групп';
Не так давно (или уже давно) в продукте появилась довольно удобная штука, про которую практически сразу и забыли. Вот пришлось жестоко напрягать память как же метод называется.
Речь про AddViewContent и ShowViewContent.
Первая позволит вам указать место вывода, а вторая установить выводимый контент много позже. Применять можно довольно мощно - например, в шаблоне сайта вывести даты отображенных в контентой части новостей (в цикле вывода новостей собираем эти даты, плюсуем в одну строку и передаем в AddViewContent).
Прежде всего позволяет избежать дублирование компонент и лишних циклов.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».