ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² 1Π‘-ΠΠΈΡΡΠΈΠΊΡ β Π·Π°Π΄Π°ΡΠ°, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ Ρ ΡΡΠΎΠΉ CMS.hether Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π²ΡΡΠ°Π²ΠΈΡΡ ΠΏΡΠΎΡΡΠΎΠΉ JavaScript-ΡΡΠ΅ΡΡΠΈΠΊ, ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΉ ΡΠ΅ΡΠ²ΠΈΡ, ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ Π±ΡΠ΄ΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ. ΠΠ»Π°Π²Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ: ΠΠΈΡΡΠΈΠΊΡ ΡΡΡΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅Ρ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ Π΄Π°Π½Π½ΡΠ΅, Π° Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ Π²ΡΡΠ°Π²ΠΊΠ° ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΏΠΎΡΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ°ΠΌ Ρ ΡΠ΄ΡΠΎΠΌ.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ 5 ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΡ
ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° β ΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½ΡΡ
(ΡΠ΅ΡΠ΅Π· Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ) Π΄ΠΎ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΡ
(ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠ΄ΡΠ° ΡΠ΅ΡΠ΅Π· ΡΠΎΠ±ΡΡΠΈΡ). ΠΡΠΎΠ±ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ΄Π΅Π»ΠΈΠΌ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ: ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠΈΠΏΠΈΡΠ½ΡΡ
ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΏΠΎΡΠ΅ΠΌΡ Π½Π΅ ΡΡΠΎΠΈΡ ΠΏΡΠ°Π²ΠΈΡΡ ΡΠ°ΠΉΠ»Ρ Π² ΠΏΠ°ΠΏΠΊΠ΅ /bitrix/, ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΠΈΡΡΠΈΠΊΡΠ° ΠΏΠΎΠΌΠΎΠ³ΡΡ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡΡ
. ΠΡΠ»ΠΈ Π²Ρ Π½ΠΎΠ²ΠΈΡΠΎΠΊ, Π½Π°ΡΠ½ΠΈΡΠ΅ Ρ ΠΏΠ΅ΡΠ²ΡΡ
Π΄Π²ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²; Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½Π° Π³Π»ΡΠ±ΠΎΠΊΠ°Ρ ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·Π°ΡΠΈΡ β ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡΠ΅ ΡΡΠ°Π·Ρ ΠΊ ΡΠ°Π·Π΄Π΅Π»Π°ΠΌ ΠΏΡΠΎ init.php ΠΈ ΡΠΎΠ±ΡΡΠΈΡ.
1. ΠΡΡΠ°Π²ΠΊΠ° ΠΊΠΎΠ΄Π° ΡΠ΅ΡΠ΅Π· Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ (Π΄Π»Ρ Π½ΠΎΠ²ΠΈΡΠΊΠΎΠ²)
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π΄ΠΎΠ±Π°Π²ΠΈΡΡ HTML, CSS ΠΈΠ»ΠΈ JavaScript β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΏΡΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΡΠ°Π½ΠΈΡΡ ΠΈΠ»ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΡ Π²ΡΡΠ°Π²ΠΎΠΊ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ΅ΡΡΠΈΠΊΠ° Π―Π½Π΄Π΅ΠΊΡ.ΠΠ΅ΡΡΠΈΠΊΠΈ ΠΈΠ»ΠΈ Π±Π°Π½Π½Π΅ΡΠ°), Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ: ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ²ΡΠ·Π°Π½ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ΅ΡΡΡΡΡΡ ΠΏΡΠΈ ΡΠΌΠ΅Π½Π΅ ΡΠ°Π±Π»ΠΎΠ½Π°.
ΠΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ:
- π ΠΡΠΊΡΠΎΠΉΡΠ΅ Π½ΡΠΆΠ½ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ ΠΈΠ»ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» Π² ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΠΈΡΡΠΈΠΊΡΠ°.
- π±οΈ ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ Π² ΡΠ΅ΠΆΠΈΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ HTML (ΠΊΠ½ΠΎΠΏΠΊΠ° "HTML" Π² ΡΡΠ»Π±Π°ΡΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°).
- π» ΠΡΡΠ°Π²ΡΡΠ΅ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ Π² ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ΅Π΅ΡΡ ΠΎΠΊΠ½ΠΎ. ΠΠ»Ρ JavaScript ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅Π³
<script>Ρ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌdeferΠΈΠ»ΠΈasync. - π Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π° ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π΅.
ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ Π²ΡΡΠ°Π²ΠΊΠΈ ΠΊΠΎΠ΄Π° ΡΡΡΠ°Π½ΠΈΡΠ° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅, Π½Π΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΠ΅Ρ Π»ΠΈ Π²Π°Ρ ΡΠΊΡΠΈΠΏΡ Ρ jQuery ΠΠΈΡΡΠΈΠΊΡΠ°. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΎΠ±Π΅ΡΠ½ΡΡΡ ΠΊΠΎΠ΄ Π² BX.ready(function(){ ... })
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°Π²ΡΡΠΊΠΈ ΠΈΠ»ΠΈ ΡΠ³Π»ΠΎΠ²ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ), ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ΅ ΠΊΠΎΠ΄Π°. ΠΠ»Ρ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ.
2. ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ²ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΡΠΎΠ²Π°ΡΠΎΠ² ΠΈΠ»ΠΈ ΡΠΎΡΠΌΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΠΈ), ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΅Π³ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π°. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡΡ ΠΠΈΡΡΠΈΠΊΡΠ°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°Π±Π»ΠΎΠ½Ρ Ρ ΡΠ°Π½ΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΎΡ ΡΠ΄ΡΠ°.
ΠΠΎΡΠ°Π³ΠΎΠ²Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ:
- ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π²
ΠΠΎΠ½ΡΠ΅Π½Ρ β Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΠΎΠΉ β Π¨Π°Π±Π»ΠΎΠ½Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²(ΠΈΠ»ΠΈ Π½Π°ΠΉΠ΄ΠΈΡΠ΅ Π½ΡΠΆΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΈ ΠΊΠ»ΠΈΠΊΠ½ΠΈΡΠ΅ "Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½"). - Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½ (Π΅ΡΠ»ΠΈ Π΅ΡΠ΅ Π½Π΅ ΡΠ΄Π΅Π»Π°Π½ΠΎ) β ΡΡΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π΅Π³ΠΎ ΠΊΠΎΠΏΠΈΡ Π² ΠΏΠ°ΠΏΠΊΠ΅
/local/templates/. - Π ΡΠ°ΠΉΠ»Π°Ρ
ΡΠ°Π±Π»ΠΎΠ½Π° (
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 Π² ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠΎΡΠΊΠ°Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ΅ΡΠ΅Π΄ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΠ½ΡΠΎΠ±Π»ΠΎΠΊΠ° ΠΈΠ»ΠΈ ΠΏΡΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΌΠ΅Π½Ρ) ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ²ΠΎΡ Π»ΠΎΠ³ΠΈΠΊΡ.
ΠΡΠΈΠΌΠ΅Ρ: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΠΎΠ΄ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠ° ΠΊΠΎ Π²ΡΠ΅ΠΌ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΡΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌ Π² Π½ΠΎΠ²ΠΎΡΡΡΡ .
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
/local/php_interface/events.php - ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΊΠΎΠ΄:
<?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 Π² ΡΠ°Π·Π΄Π΅Π» "ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ°ΠΉΡΠ°":
- ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π²
ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ β ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° β ΠΠΎΠ΄ΡΠ»ΠΈ β ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ. - Π ΡΠ°Π·Π΄Π΅Π»Π΅ "ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ" Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π½ΠΎΠ²ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠΈΠΏΠ° "Π‘ΡΡΠΎΠΊΠ°" Ρ ΠΊΠΎΠ΄ΠΎΠΌ
GTM_CODE. - Π ΡΠ°Π±Π»ΠΎΠ½Π΅ ΡΠ°ΠΉΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
/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 Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅:
- ΠΠΎΠ±Π°Π²ΠΈΡΡ
vendor/Π².gitignore(Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Git). - ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΡΠΈΠΊ Π²
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>?
ΠΠ»Ρ Π²ΡΡΠ°Π²ΠΊΠΈ ΠΊΠΎΠ΄Π° Π² ΡΡΠΈ ΡΠ΅ΠΊΡΠΈΠΈ:
- ΠΡΠΊΡΠΎΠΉΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½ ΡΠ°ΠΉΡΠ° (
/local/templates/[SHABLON]/header.phpΠ΄Π»Ρ<head>ΠΈΠ»ΠΈfooter.phpΠ΄Π»Ρ</body>). - ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΊΡΡΠ²Π°ΡΡΠΈΠΌ ΡΠ΅Π³ΠΎΠΌ (
</head>ΠΈΠ»ΠΈ</body>). - ΠΠ»Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ΄ΠΎΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π· Π°Π΄ΠΌΠΈΠ½ΠΊΡ) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 5.
ΠΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ Google Analytics:
<?php if (COption::GetOptionString("main", "GA_CODE")): ?>
<script><?=htmlspecialcharsback(COption::GetOptionString("main", "GA_CODE"))?></script>
<?php endif; ?>
ΠΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π²Π½Π΅ΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, jQuery UI)?
ΠΡΡΡΠ΅ ΠΈΠ·Π±Π΅Π³Π°ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π½Π°ΠΏΡΡΠΌΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΠΈΡΡΠΈΠΊΡ ΡΠΆΠ΅ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ . ΠΡΠ»ΠΈ Π²ΡΠ΅ ΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ:
- ΠΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²
/local/js/ΠΈΠ»ΠΈ/local/css/. - ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΈΡ
ΡΠ΅ΡΠ΅Π·
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-ΠΊΠΎΠ΄ Π² ΠΠΈΡΡΠΈΠΊΡΠ΅?
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²:
- ΠΠΎΠ³ΠΈ: ΠΠΈΡΠΈΡΠ΅ Π² ΡΠ°ΠΉΠ» Ρ ΠΏΠΎΠΌΠΎΡΡΡ
AddMessage2Log():AddMessage2Log("Π’Π΅ΡΡΠΎΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅: " . print_r($variable, true), "my_debug");ΠΠΎΠ³ΠΈ Π±ΡΠ΄ΡΡ Π²
/bitrix/modules/main/admin/message_log.php. - Xdebug: ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Π² PHPStorm ΠΈΠ»ΠΈ VS Code Π΄Π»Ρ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
- ΠΡΠ²ΠΎΠ΄ Π½Π° ΡΠΊΡΠ°Π½: ΠΠ»Ρ Π±ΡΡΡΡΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅:
<?phpglobal $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",
));
?>
ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π΅Π³ΠΎ ΡΠ΅ΡΠ΅Π· ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ β ΠΠΎΠ΄ΡΠ»ΠΈ β Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ.