Для важных ИБ, которыми управляют несколько людей, желательно включать «журналирование». Так вы сможете быстро найти концы в случае непонятного удаления элементов или их редактирования.
Настройки журналирования - вкладка в настройках ИБ
Советую даже опытным спецам посмотреть как сделаны (и которые будут сделаны) решения от самого Битрикс (магазин, инфопортал, к примеру). Встречаются довольно хитрые решения, новый взгляд на обычные компоненты
4-й параметр в false. А уже после обработки запустить переиндексацию инфоблоков сайта. Запись в модуль поиска увеличивает конечное время исполнения в десятки-сотни раз.
Иногда требуется, чтобы компонент генерировал XML-код, или еще что вне шаблона сайта. Можно делать для таких целей отдельный шаблон сайта, но по ряду причин это неудобно. Создавать страницу без визуальных шапок и подвала - еще более неудобно. Хотя бы потому что до них нельзя добраться и отредактировать параметры.
Метод просто - внутри компонента до начала работы и какого-либо вывода:
Дмитрий Яковенко пишет: я всегда создаю в нижнем (считаю, что читабельнее) — не путаюсь.Они везде преобразовываются к верхнему (кроме GetProperties )
Сейчас не проверю, но помню что символьные коды полей в DISPLAY_PROPERTIES всегда в верхнем регистре возвращаются. Т.е. если я буду помнить, что я назвал свойство prop, то и ожидать буду в массиве prop, а не PROP как оно будет в реальности. А это уже разные ключи и лишний повод для ошибки. А с верхним регистром трудно ошибиться
Всегда следите за памятью в ваших скриптах, особенно если они работают в фоне.
Код на PHP можно написать так, что приложение будет «течь» как ниагарский водопад. Если это обычная страница, то это ещё куда не шло. Максимум через 30 секунд её жизнь закончится. Но если это обмены с другой ИС, фоновая задача работающая десятки минут или даже часы, то небрежность в коде может привести к печальным последствиям. Скрипт будет вылетать «по памяти».
Желание «добавить ещё памяти» не вариант, нужно смотреть что «течёт» и исправлять. Тяжёлая артиллерия это xhprof или xdebug, но можно сделать проще в течении 5 секунд.
При работе с фоновыми скриптами или агентами всегда проверяйте, что у них достаточно прав для работы. Типичный случай: скрипт отладили запуская из консоли, всё ок. Добавляем его как агент, а он не работает. Агент исполнялся от другого пользователя, а скрипт при своей работе пишет лог. Прав на запись не хаватало, система логирования бросала исключение которое никто не перехватывал и всё отваливалось.
Дальновиднее делать ресайз и/или накладывать ватермарки только в шаблонах компонентов, а оригиналы изображений, хранящиеся в инфоблоках, оставить в покое. Cовет от Leshchenko Sergey поможет сохранить оригиналы изображений если изменятся требования к размеру иллюстраций.
Используйте символьные коды в поляx XML_ID при создании свойств списка, так ваш код не будет привязан к автоинкрементным идентификаторам и будет переносимым.
Код
<?if('CURRENT_STATUS_FREE' == $arItem["DISPLAY_PROPERTIES"]["CURRENT_STATUS"]["VALUE_XML_ID"]):?>
// делаем одно
<?else:?>
// делаем другое
<?endif?>
Пару лет назад на одном проекте начал накапливать обработчики событий на редактирование элемента. И код сгенерировать, и скриншоты нарезать. В общем, через пару лет самолет сохранялся минуту...
Потом я понял, что после сохранения элемента добавляем агент (или несколько), которые и будут делать всю работу (коды, скрины, остатки, что угодно). Соответственно, хит редактора никак не будет тормозиться, на сайте это появится практически мгновенно (я запускаю агенты раз в минуту), а все агенты вынесены на крон.
В компоненте bitrix:menu.sections следует отключать IS_SEF, если вам не требуется выделение пунктов меню при переходе в соответствующую категорию. Иначе на каждом хите будет парситься URL.
Ну и заодно следует помнить, что выделение пункта возможно только в ЧПУ-конфигурации раздела.
Бывает, что сайт отказывает (весь, или некоторые страницы), а браузер сообщает что-то типа "сброс соединения" или "неверное содержимое". В этом случае стоит отключить модуль компрессии, ошибки станут видны. Если недоступна и страница модулей, то достаточно в include.php модуля компрессии вставить return false;
Но у него есть особенность: - включаемой области может и не быть, тогда ничего не выведется, а в дальнейшем может создаться автоматически через режим правки - и в этом случае есть неприятный сюрприз - область создастся по шаблону обычный страницы, то есть с header и footer, что плохо; чтобы этого избежать, в параметре TEMPLATE надо передавать имя пустой (если не надо иное) включаемой области, которые лежат в /bitrix/templates/.default/page_templates
Если php-функция вернула флаг сигнализирующий об ошибке, то всегда вызывайте error_get_last() Особенно, если это фоновые скрипты, которые работают автономно.
1. Самый плохой пример. Наивно полагаем, что все всегда будет хорошо. ... copy($arNewModule['MODULE_PICTURE'], $dstFilePath); ...
2. Уже лучше, но что произошло так и останется загадкой. А если такое писать в лог, то вообще ничего не понятно.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».