Содержание
Вы любите Битрикс? Просто вы не умеете его готовить!
Невозможность восстановления пароля админки, если это не запрограммировано
Самый простой способ восстановить доступ в админку - сброс пароля. Токен для действия высылается на почту.
Если /auth/index.php
не запрограммирован (а из коробки это так), восстановить невозможно.
Это не баг, это фишка.
Неожиданное поведение кеша
Необходимо всегда помнить, что при разработке разумно кеш выключать, а на продакшене он включен. Думали очистили кеш и все в порядке? Вот варианты неожиданного поведения кеша.
Первый. При выводе меню оно внезапно оказалось до <html>
.
Лечение: правильно использовать «магию»: http://dev.1c-bitrix.ru/api_help/main/reference/cmain/showtitle.php
Второй. Не добавляются JavaScript-файлы в тело страницы, как результат - неработоспособность. Виновато автокеширование компонента. Подробное описание здесь: http://dev.1c-bitrix.ru/community/blogs/vad/1820.php
Лечение: перенести JS из компонента «на уровень выше», либо не кешировать данный компонент, либо использовать рецепт выше.
Хотите немного уличной магии?
Третий. Не подгружаются блоки на главной странице. В этом виноват вызов метода CIBlockElement::GetList()
, причем на dev все работает, значит в каком-то модуле этот столь популярный, казало бы, класс подгружается.
Лечение:
CModule::IncludeModule("iblock");
Автоподгрузка классов. - Не, не слышали!
Медиабиблиотека
Хорошая вещь, позволяет организовать коллекции изображений, видео и аудио. Но без возможности сортировки.
Вы должны были привлечь её внимание простым естественным вопросом. А вы что спросили?
Как пройти в библиотеку?
В три часа ночи?! Идиот!
Хотите удобную сортировку?
Цель: сортировка по рубрикам, внутри рубрики - по областям, внутри области - по названию архива.
Пример:
- Архивные короба
- Алтайский край
- Алтайский отдел по делам архивов
- Государсвенный архив
Через фильтры это сделать невозможно. Поэтому только SQL-like метод: ORDER BY field1, field3, field3
...
Реальное решение Bitrix-style: Выбираем ID элементов (чтобы скормить в arFilter
, например), упорядочивая по названию секции элемента, потом по названию одного его свойства, потом по названию элемента.
Вот что получилось:
- select-id.sql
SELECT b_iblock_element.ID FROM `b_iblock_element` JOIN `b_iblock_section` ON (b_iblock_section.ID = b_iblock_element.IBLOCK_SECTION_ID) LEFT JOIN `b_iblock_element_property` ON (b_iblock_element_property.IBLOCK_ELEMENT_ID = b_iblock_element.ID AND b_iblock_element_property.IBLOCK_PROPERTY_ID = 165) -- ID свойства LEFT JOIN b_iblock_element AS `prop` ON (b_iblock_element_property.VALUE = prop.ID) WHERE b_iblock_element.IBLOCK_ID = 41 -- ID инфоблока AND b_iblock_element.ACTIVE = "Y" AND (b_iblock_element.ACTIVE_FROM IS NULL OR b_iblock_element.ACTIVE_FROM <= NOW()) AND (b_iblock_element.ACTIVE_TO IS NULL OR b_iblock_element.ACTIVE_TO >= NOW()) ORDER BY b_iblock_section.SORT, prop.NAME, b_iblock_element.NAME;
Оставь надежду всяк сюда входящий
А пагинацию?
Продолжение истории...
Запрос select-id.sql
работает, полученные ID скармливаем в фильтр, Битрикс при выборке все равно сортирует по-своему, так как нельзя указать чтобы сортировал в том же порядке, что и условие с ID.
Другими словами, нельзя через фильтры сделать так:
ORDER BY Field(ID, 500, 301, 404)
Если переложить всю работу по сортировке на result_modifier
- забрать все элементы и в нем отсортировать, не будет пагинации, что логично.
Если ограничить в фильтре количество до 10, Битрикс будет плевать на порядок ID, выберет первые, в result_modifier
этот десяток можно пересортировать, но по всем страницам он будет неправильный.
Так как же сделать пагинацию?
- Грубым методом - подключить пагинацию отдельно с заполением кучи запутанных параметров $arResult по документации не получилось.
- Хитрым методом - вызывать 2 инфоблока - один из них исключительно для пагинации, другой для результатов
- Правильным методом - подсунуть собственно созданный объект класса CIBlockResult:
function BANavString($NavRecordCount, $NavPageSize, $NavPageNomer, $navTemplateName = '', $navTitle = '', $navAlways = false) { $rsElement = new CIBlockResult(); $rsElement->NavRecordCount = $NavRecordCount; // количество записей $rsElement->NavPageSize = $NavPageSize; // количество записей на странице $rsElement->NavPageNomer = $NavPageNomer; // номер текущей страницы $rsElement->NavPageCount = ceil($rsElement->NavRecordCount / $rsElement->NavPageSize); // количество страниц return $rsElement->GetPageNavStringEx($navComponentObject, $navTemplateName, $navTitle, $navAlways); }
Редактор ест текст
При загрузке текста в визуальном редакторе любой аттрибут data-*
в теге a
«исчезает», однако его возможно вновь прописать и сохранить
Глюк в версии 14.0.6, и, скорее всего, в других.
Примечание: аналогичная ситуация в других редакторах исправляется внесением изменений в их настройки.
Интересная каптча
Включить каптчу возможно для регистрации (сразу), либо на вход с определенной попытки после неправильного ввода пароля, но не сразу. Это не предусмотрено, а напрасно! С новыми куками каптча для «второй» попытки не нужна!
Причем каптча не показывается для несуществующих пользователей
- system.auth.form/component.php
$APPLICATION->NeedCAPTHAForLogin($arResult["USER_LOGIN"])