Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² 1Π‘-Битрикс β€” Π·Π°Π΄Π°Ρ‡Π°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ сталкиваСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ с этой CMS.hether Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ простой JavaScript-счСтчик, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сторонний сСрвис, ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ. Главная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ систСмы: Битрикс строго раздСляСт бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ, прСдставлСниС ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ вставка ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ послС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌ с ядром.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ 5 ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… способов добавлСния ΠΊΠΎΠ΄Π° β€” ΠΎΡ‚ элСмСнтарных (Ρ‡Π΅Ρ€Π΅Π· Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€) Π΄ΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… (модификация ядра Ρ‡Π΅Ρ€Π΅Π· события). ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ бСзопасности ΠΈ совмСстимости: ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ошибок, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ стоит ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΏΠ°ΠΏΠΊΠ΅ /bitrix/, ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ инструмСнты Битрикса ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ измСнСния ΠΏΡ€ΠΈ обновлСниях. Если Π²Ρ‹ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ, Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ с ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²; Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° глубокая кастомизация β€” ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ сразу ΠΊ Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌ ΠΏΡ€ΠΎ init.php ΠΈ события.

1. Вставка ΠΊΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ (для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ²)

Π‘Π°ΠΌΡ‹ΠΉ простой способ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ HTML, CSS ΠΈΠ»ΠΈ JavaScript β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ встроСнный Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΏΡ€ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ страницы ΠΈΠ»ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹Ρ… вставок (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, счСтчика ЯндСкс.ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΈΠ»ΠΈ Π±Π°Π½Π½Π΅Ρ€Π°), Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ограничСния: ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ привязан ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ страницС ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ смСнС шаблона.

Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:

  • πŸ“ ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π½ΡƒΠΆΠ½ΡƒΡŽ страницу ΠΈΠ»ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π² ΠΏΠ°Π½Π΅Π»ΠΈ управлСния Битрикса.
  • πŸ–±οΈ ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π² Ρ€Π΅ΠΆΠΈΠΌ рСдактирования HTML (ΠΊΠ½ΠΎΠΏΠΊΠ° "HTML" Π² Ρ‚ΡƒΠ»Π±Π°Ρ€Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°).
  • πŸ’» Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ свой ΠΊΠΎΠ΄ Π² появившССся ΠΎΠΊΠ½ΠΎ. Для JavaScript рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅Π³ <script> с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ defer ΠΈΠ»ΠΈ async.
  • πŸ”„ Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ измСнСния ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π΅.
πŸ’‘

Если послС вставки ΠΊΠΎΠ΄Π° страница отобраТаСтся Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Π½Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΠ΅Ρ‚ Π»ΠΈ ваш скрипт с jQuery Битрикса. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠΎΠ΄ Π² BX.ready(function(){ ... })

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ символы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΈΠ»ΠΈ ΡƒΠ³Π»ΠΎΠ²Ρ‹Π΅ скобки), Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ΅ ΠΊΠΎΠ΄Π°. Для слоТных скриптов Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

2. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² ΠΈΠ»ΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи), ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΅Π³ΠΎ шаблона. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ сохраняСт измСнСния ΠΏΡ€ΠΈ обновлСниях Битрикса, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ хранятся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ ядра.

Пошаговая инструкция:

  1. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠšΠΎΠ½Ρ‚Π΅Π½Ρ‚ β†’ Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ структурой β†’ Π¨Π°Π±Π»ΠΎΠ½Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (ΠΈΠ»ΠΈ Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π° страницС ΠΈ ΠΊΠ»ΠΈΠΊΠ½ΠΈΡ‚Π΅ "Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ шаблон").
  2. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ стандартный шаблон (Ссли Π΅Ρ‰Π΅ Π½Π΅ сдСлано) β€” это создаст Π΅Π³ΠΎ копию Π² ΠΏΠ°ΠΏΠΊΠ΅ /local/templates/.
  3. Π’ Ρ„Π°ΠΉΠ»Π°Ρ… шаблона (template.php, script.js, style.css) Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ свой ΠΊΠΎΠ΄. НапримСр, для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ скрипта Π² template.php:
<?php

// Π’Π°Ρˆ PHP-ΠΊΠΎΠ΄ здСсь

?>

<script>

// Π’Π°Ρˆ JavaScript-ΠΊΠΎΠ΄

console.log('ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΈΠ· шаблона ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°!');

</script>

πŸ”Ή Π“Π΄Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ популярных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²:

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠŸΡƒΡ‚ΡŒ ΠΊ ΡˆΠ°Π±Π»ΠΎΠ½ΡƒΠ’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ
ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ²/bitrix/components/bitrix/catalog/ИзмСнСниС ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ‚ΠΎΠ²Π°Ρ€Π°, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ², ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹
Π€ΠΎΡ€ΠΌΠ° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи/bitrix/components/bitrix/form/Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ кастомных ΠΏΠΎΠ»Π΅ΠΉ, валидация
Новостная Π»Π΅Π½Ρ‚Π°/bitrix/components/bitrix/news/ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ Π²Ρ‹Π²ΠΎΠ΄Π° анонсов, пагинация
Поиск ΠΏΠΎ сайту/bitrix/components/bitrix/search/ΠšΠ°ΡΡ‚ΠΎΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π²Ρ‹Π΄Π°Ρ‡ΠΈ, Π°Π²Ρ‚ΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΡƒΡŽ копию ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ шаблона|ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π° доступа ΠΊ ΠΏΠ°ΠΏΠΊΠ΅ /local/templates/|ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π½Π° врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ|ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ API ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°-->

3. ИспользованиС Ρ„Π°ΠΉΠ»Π° init.php для Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

Π€Π°ΠΉΠ» /bitrix/php_interface/init.php β€” это Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° для Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ Битрикса. Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ:

  • πŸ”§ ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ свои классы ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  • πŸ”„ ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ стандартноС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ядра.
  • πŸ“‘ Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ событий.
  • πŸ”’ Π£ΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ добавлСния кастомной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с высоконагруТСнными страницами:

<?php

// Π€Π°ΠΉΠ»: /bitrix/php_interface/init.php

// ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ·Π΅Ρ€-Π°Π²Ρ‚ΠΎΠ·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ (Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅)

require_once $_SERVER['DOCUMENT_ROOT'] . '/local/vendor/autoload.php';

// ДобавляСм свою Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ SQL-запросов

function optimizeBitrixQuery($query) {

return str_replace('SELECT *', 'SELECT `ID`, `NAME`, `DETAIL_PAGE_URL`', $query);

}

// РСгистрируСм ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события Π½Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ SQL

AddEventHandler("main", "OnBeforeQuery", array("CustomQueryOptimizer", "onBeforeQuery"));

?

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ использованиС init.php ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ сайта ΠΈΠ»ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ тяТСлых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ) Π² этом Ρ„Π°ΠΉΠ»Π΅. Для Ρ‚Π°ΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠ·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ классов Ρ‡Π΅Ρ€Π΅Π· composer.

Π§Π΅Ρ€Π΅Π· Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€|Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ шаблонов ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²|Π€Π°ΠΉΠ» init.php|Бобытия ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ|Π”Ρ€ΡƒΠ³ΠΎΠ΅-->

4. Π Π°Π±ΠΎΡ‚Π° с событиями Битрикса (ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ)

БистСма событий β€” это Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ Битриксом способ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° Π±Π΅Π· ΠΏΡ€Π°Π²ΠΊΠΈ ядра. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ "ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ" стандартноС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ CMS Π² ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€Π΅Π΄ сохранСниСм элСмСнта ΠΈΠ½Ρ„ΠΎΠ±Π»ΠΎΠΊΠ° ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ мСню) ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ свою Π»ΠΎΠ³ΠΈΠΊΡƒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ водяного Π·Π½Π°ΠΊΠ° ΠΊΠΎ всСм Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹ΠΌ изобраТСниям Π² новостях.

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: /local/php_interface/events.php
  2. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊΠΎΠ΄:
<?php

AddEventHandler("iblock", "OnBeforeIBlockElementAdd", array("CustomWatermark", "addWatermark"));

class CustomWatermark {

public static function addWatermark(&$arFields) {

if ($arFields["IBLOCK_ID"] == 1) { // ID ΠΈΠ½Ρ„ΠΎΠ±Π»ΠΎΠΊΠ° "Новости"

if (!empty($arFields["DETAIL_PICTURE"])) {

$imagePath = $_SERVER["DOCUMENT_ROOT"] . CFile::GetPath($arFields["DETAIL_PICTURE"]);

// Π—Π΄Π΅ΡΡŒ ΠΊΠΎΠ΄ добавлСния водяного Π·Π½Π°ΠΊΠ° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Imagine)

$arFields["DETAIL_PICTURE"] = CFile::SaveFile(

array(

"name" => "watermarked_" . basename($imagePath),

"tmp_name" => $imagePath,

"type" => "image/jpeg",

),

"iblock"

);

}

}

}

}

?

πŸ”Ή ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹Π΅ события для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ:

  • πŸ“ OnBeforeIBlockElementAdd / OnAfterIBlockElementAdd β€” Ρ€Π°Π±ΠΎΡ‚Π° с элСмСнтами ΠΈΠ½Ρ„ΠΎΠ±Π»ΠΎΠΊΠΎΠ².
  • πŸ›’ OnBeforeBasketAdd β€” модификация ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹.
  • πŸ” OnSearchGetURL β€” кастомизация ссылок Π² поискС.
  • πŸ‘€ OnBeforeUserRegister β€” валидация рСгистрации ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.
Как Π½Π°ΠΉΡ‚ΠΈ всС доступныС события Π² БитриксС?

ΠŸΠΎΠ»Π½Ρ‹ΠΉ список событий ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ автоматичСски. Для этого Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² init.php ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

AddEventHandler("main", "OnEpilog", function() {

global $APPLICATION;

$events = GetModuleEvents("main", "", true);

file_put_contents($_SERVER["DOCUMENT_ROOT"] . "/events_list.txt", print_r($events, true));

});

ПослС обновлСния любой страницы сайта Π² Ρ„Π°ΠΉΠ»Π΅ /events_list.txt появится список всСх зарСгистрированных событий. НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄ послС использования!

5. ΠšΠ°ΡΡ‚ΠΎΠΌΠΈΠ·Π°Ρ†ΠΈΡ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ поля ΠΈ свойства

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ динамичСский ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· Π°Π΄ΠΌΠΈΠ½ΠΊΡƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сниппСты для SEO ΠΈΠ»ΠΈ кастомныС JS-счСтчики), ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ свойства ΠΈΠ½Ρ„ΠΎΠ±Π»ΠΎΠΊΠΎΠ² ΠΈΠ»ΠΈ настройки ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: созданиС поля для вставки Google Tag Manager Π² Ρ€Π°Π·Π΄Π΅Π» "Настройки сайта":

  1. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Настройки β†’ Настройки ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° β†’ ΠœΠΎΠ΄ΡƒΠ»ΠΈ β†’ Основной ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.
  2. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ "Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ настройки" Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π½ΠΎΠ²ΠΎΠ΅ свойство Ρ‚ΠΈΠΏΠ° "Π‘Ρ‚Ρ€ΠΎΠΊΠ°" с ΠΊΠΎΠ΄ΠΎΠΌ GTM_CODE.
  3. Π’ шаблонС сайта (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, /local/templates/.default/header.php) Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ этого поля:
<?php

$gtmCode = COption::GetOptionString("main", "GTM_CODE");

if (!empty($gtmCode)) {

echo htmlspecialcharsback($gtmCode);

}

?>

πŸ”Ή ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

  • πŸŽ›οΈ Π£Π΄ΠΎΠ±Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄ΠΎΠΌ Ρ‡Π΅Ρ€Π΅Π· Π°Π΄ΠΌΠΈΠ½ΠΊΡƒ (Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹).
  • πŸ”’ Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ: ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· htmlspecialcharsback, Ρ‡Ρ‚ΠΎ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΎΡ‚ XSS.
  • πŸ”„ Π›Π΅Π³ΠΊΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π±Π΅Π· доступа ΠΊ FTP.
πŸ’‘

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ свойства β€” ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, пиксСли Ρ€Π΅Ρ‚Π°Ρ€Π³Π΅Ρ‚ΠΈΠ½Π³Π°, Ρ‡Π°Ρ‚-Π±ΠΎΡ‚Ρ‹ ΠΈΠ»ΠΈ ΠΏΠΎΠΏ-Π°ΠΏΡ‹).

6. Π Π°Π±ΠΎΡ‚Π° с composer ΠΈ Π°Π²Ρ‚ΠΎΠ·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ классов

Для ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° БитриксС рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ composer для управлСния зависимостями. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚:

  • πŸ“¦ ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ сторонниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PHPMailer, Guzzle).
  • πŸ”§ ΠžΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠ·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ своих классов.
  • πŸ”„ Π›Π΅Π³ΠΊΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ зависимости.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ структуры ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с composer:

/local/

β”œβ”€β”€ composer.json

β”œβ”€β”€ vendor/ # АвтозагруТаСмыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

β”œβ”€β”€ php_interface/

β”‚ β”œβ”€β”€ init.php # ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π°Π²Ρ‚ΠΎΠ·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°

β”‚ └── classes/ # Π’Π°ΡˆΠΈ классы (с Π°Π²Ρ‚ΠΎΠ·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΏΠΎ PSR-4)

ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ composer.json для Битрикса:

{

"require": {

"php": ">=7.4",

"guzzlehttp/guzzle": "^7.0"

},

"autoload": {

"psr-4": {

"Local\\": "php_interface/classes/"

}

}

}

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ПослС установки зависимостСй Ρ‡Π΅Ρ€Π΅Π· composer Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅:

  1. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ vendor/ Π² .gitignore (Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Git).
  2. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠ·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Π² init.php:
require_once $_SERVER['DOCUMENT_ROOT'] . '/local/vendor/autoload.php';

ЧастыС ошибки ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ

Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° Π² Битрикс. Π’ΠΎΡ‚ Ρ‚ΠΎΠΏ-5 ошибок ΠΈ способы ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ:

ΠžΡˆΠΈΠ±ΠΊΠ°ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Π Π΅ΡˆΠ΅Π½ΠΈΠ΅
Код Π½Π΅ выполняСтся ΠšΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ»ΠΈ страницы ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ кСш Π½Π° врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (Настройки β†’ ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ β†’ ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ кСш)
Π‘Π΅Π»Ρ‹ΠΉ экран (500 ошибка) БинтаксичСская ошибка Π² PHP ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ с ядром ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π»ΠΎΠ³ΠΈ Π² /bitrix/modules/main/include/prolog_before.php ΠΈΠ»ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ ошибок:
JS-ΠΊΠΎΠ΄ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠšΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ с jQuery Битрикса ΠΈΠ»ΠΈ отсутствуСт ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ° BX.ready() Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ BX.ready(function(){ ... }) ΠΈΠ»ΠΈ BX.defer(function(){ ... })
ИзмСнСния ΡΠ±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ послС обновлСния ΠŸΡ€Π°Π²ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² Π² /bitrix/ вмСсто /local/ ВсСгда ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ Π² /local/!
МСдлСнная Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° сайта ВяТСлыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² init.php ΠΈΠ»ΠΈ цикличСскиС события ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΠΈΡ‚Π΅ Π»ΠΎΠ³ΠΈΠΊΡƒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ классы ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

πŸ”Ή Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ:

  • 🐞 Xdebug + PHPStorm β€” для пошаговой ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ PHP.
  • πŸ” Консоль Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° (F12) β€” для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ JS-ошибок.
  • πŸ“Š ΠœΠΎΠ΄ΡƒΠ»ΡŒ "ΠžΡ‚Π»Π°Π΄ΠΊΠ°" Π² БитриксС (Настройки β†’ Настройки ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ β†’ ΠžΡ‚Π»Π°Π΄ΠΊΠ°).
πŸ’‘

ΠŸΠ΅Ρ€Π΅Π΄ внСсСниСм ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π° Π±ΠΎΠ΅Π²ΠΎΠΉ сайт всСгда тСстируйтС ΠΊΠΎΠ΄ Π½Π° staging-ΠΊΠΎΠΏΠΈΠΈ. Битрикс чувствитСлСн ΠΊ синтаксичСским ошибкам β€” ΠΎΠ΄Π½Π° ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡ€ΠΎΠ½ΠΈΡ‚ΡŒ вСсь сайт.

FAQ: ΠžΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° частыС вопросы

МоТно Π»ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ прямо Π² ΠΏΠ°ΠΏΠΊΠ΅ /bitrix/?

🚫 ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ Π½Π΅ рСкомСндуСтся. ВсС измСнСния Π² ΠΏΠ°ΠΏΠΊΠ΅ /bitrix/ Π±ΡƒΠ΄ΡƒΡ‚ потСряны ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Битрикса. ВмСсто этого:

  • ΠšΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² /local/templates/.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ события для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ.
  • Π₯Ρ€Π°Π½ΠΈΡ‚Π΅ кастомныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² /local/modules/.
Как Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π² <head> ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ </body>?

Для вставки ΠΊΠΎΠ΄Π° Π² эти сСкции:

  1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ шаблон сайта (/local/templates/[SHABLON]/header.php для <head> ΠΈΠ»ΠΈ footer.php для </body>).
  2. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ свой ΠΊΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ Ρ‚Π΅Π³ΠΎΠΌ (</head> ΠΈΠ»ΠΈ </body>).
  3. Для динамичСского управлСния ΠΊΠΎΠ΄ΠΎΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· Π°Π΄ΠΌΠΈΠ½ΠΊΡƒ) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ свойства, ΠΊΠ°ΠΊ описано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 5.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для Google Analytics:

<?php if (COption::GetOptionString("main", "GA_CODE")): ?>

<script><?=htmlspecialcharsback(COption::GetOptionString("main", "GA_CODE"))?></script>

<?php endif; ?>

Как ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ внСшнюю Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, jQuery UI)?

Π›ΡƒΡ‡ΡˆΠ΅ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ сторонних Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Битрикс ΡƒΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ…. Если всС ΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ:

  1. ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² /local/js/ ΠΈΠ»ΠΈ /local/css/.
  2. ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΈΡ… Ρ‡Π΅Ρ€Π΅Π· CJSCore::Init() (для JS) ΠΈΠ»ΠΈ $APPLICATION->SetAdditionalCSS() (для CSS). ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
<?php

// ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ кастомного JS

CJSCore::Init(array("jquery", "custom_script"));

$APPLICATION->AddHeadScript('/local/js/custom_script.js');

// ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ CSS

$APPLICATION->SetAdditionalCSS('/local/css/custom_style.css');

?>

⚠️ Битрикс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ свою Π²Π΅Ρ€ΡΠΈΡŽ jQuery (window.BX), которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ со стандартной. Для совмСстимости ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΠΉΡ‚Π΅ ΠΊΠΎΠ΄ Π²:

BX.ready(function(){

(function($){

// Π’Π°Ρˆ ΠΊΠΎΠ΄ здСсь ($ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ jQuery)

})(BX.$);

});

Как ΠΎΡ‚Π»Π°Π΄ΠΈΡ‚ΡŒ PHP-ΠΊΠΎΠ΄ Π² БитриксС?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

  1. Π›ΠΎΠ³ΠΈ: ΠŸΠΈΡˆΠΈΡ‚Π΅ Π² Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ AddMessage2Log():
    AddMessage2Log("ВСстовоС сообщСниС: " . print_r($variable, true), "my_debug");

    Π›ΠΎΠ³ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π² /bitrix/modules/main/admin/message_log.php.

  2. Xdebug: НастройтС ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊ Π² PHPStorm ΠΈΠ»ΠΈ VS Code для пошагового выполнСния.
  3. Π’Ρ‹Π²ΠΎΠ΄ Π½Π° экран: Для быстрой ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:
    <?php
    

    global $USER;

    if ($USER->IsAdmin()) {

    echo '<pre>' . print_r($yourVariable, true) . '</pre>';

    }

    ?>

πŸ”Ή Π’Π°ΠΆΠ½ΠΎ: ВсСгда провСряйтС, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½! Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° Π°Π΄ΠΌΠΈΠ½Π° ΠΈΠ»ΠΈ IP.

Π“Π΄Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ кастомныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ?

БобствСнныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ слСдуСт Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² ΠΏΠ°ΠΏΠΊΠ΅ /local/modules/. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° модуля:

/local/modules/

└── my.custommodule/

β”œβ”€β”€ install/

β”‚ β”œβ”€β”€ index.php

β”‚ └── version.php

β”œβ”€β”€ include.php

β”œβ”€β”€ .description.php

└── lib/

└── MyClass.php

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ минимального include.php:

<?php

if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();

use Bitrix\Main\Loader;

Loader::registerAutoLoadClasses("my.custommodule", array(

"MyCustomClass" => "lib/MyClass.php",

));

?>

ПослС создания модуля установитС Π΅Π³ΠΎ Ρ‡Π΅Ρ€Π΅Π· Настройки β†’ ΠœΠΎΠ΄ΡƒΠ»ΠΈ β†’ Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.