Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π–ΡƒΡ€Π½Π°Π» PC Magazine/RE β„–09/2009Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 27

Автор PC Magazine/RE

; $Id$

Π’ Ρ„Π°ΠΉΠ»Π°Ρ… с PHP-ΠΊΠΎΠ΄ΠΎΠΌ послС ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ‚Π΅Π³Π° <?php Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ строку

// $Id$

Π­Ρ‚Ρƒ строку, Ссли ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ CVS-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Drupal, Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ слуТСбная информация.

Π”Π°Π»Π΅Π΅ Π² Ρ„Π°ΠΉΠ»Π΅ .info Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Ρ‚Ρ€ΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: Π½Π°Π·Π²Π°Π½ΠΈΠ΅ модуля, Π΅Π³ΠΎ описаниС ΠΈ вСрсия ядра Drupal, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² ΡΡ‚ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹: минимальная вСрсия PHP, нСобходимая для запуска модуля, Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Drupal, Π±Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΈ ΠΏΡ€. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС всСх доступных ΠΊ использованию Π² .info-Ρ„Π°ΠΉΠ»Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ (ссылка Π½Π° эту ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ†ΠΈΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ страницы Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π° Π²ΠΎ Π²Ρ€Π΅Π·ΠΊΠ΅ «Бсылки Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽΒ»).

Π’ нашСм случаС Ρ„Π°ΠΉΠ» currencies.info Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Π²ΠΈΠ΄:

; $Id$

name = Currencies block

description = Show currencies

core = 6.x

Π₯отя ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» Π² нашСм ΠΌΠΎΠ΄ΡƒΠ»Π΅ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ, Π½ΠΎ ΠΏΠΎΠΊΠ° ΠΎΠ½ отсутствуСт Π² спискС ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π² систСмС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΈ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ.


currencies.install

По стандартам кодирования Drupal ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅ΠΉ Ρ…ΡƒΠΊ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π²ΠΈΠ΄Π°:

/*

 * Implementation of hook_Π½Π°Π·Π²Π°Π½ΠΈΠ΅_Ρ…ΡƒΠΊΠ°().

 */

Аналогичный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π΅Π· тСкста Implementation of...) с описаниСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅Π΄ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ систСмой Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Doxygen, ΠΏΠΎ Π½ΠΈΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ вСсти поиск. Π—Π΄Π΅ΡΡŒ для экономии мСста Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹.

БистСма управлСния сайтом Drupal построСна ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ: ядро Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ β€“ Ρ„Π°ΠΉΠ»ΠΎΠ² с PHP-ΠΊΠΎΠ΄ΠΎΠΌ.

ΠŸΡ€ΠΈ инсталляции ΠΈ дСинсталляции ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ…ΡƒΠΊΠΈ hook_install ΠΈ hook_uninstall. ΠžΡ‚ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Π² Drupal ΠΊΡ€ΠΎΠΌΠ΅ понятий инсталляции ΠΈ дСинсталляции Π΅ΡΡ‚ΡŒ понятия Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΈ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ модуля. Если ΠΌΠΎΠ΄ΡƒΠ»ΡŒ устанавливаСтся Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ (Π² административном интСрфСйсС, Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ установлСна Π³Π°Π»ΠΎΡ‡ΠΊΠ° Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ² Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ модуля ΠΈ Π½Π°ΠΆΠ°Ρ‚Π° ΠΊΠ½ΠΎΠΏΠΊΠ° Submit), сначала происходит событиС install, Π·Π°Ρ‚Π΅ΠΌ событиС enable, Ρ‚. Π΅. ядро Drupal ΠΈΡ‰Π΅Ρ‚ ΠΈ, Ссли Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Ρ…ΡƒΠΊΠΈ hook_install ΠΈ hook_enable для устанавливаСмого модуля. Π”Π°Π»Π΅Π΅, Ссли администратор Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Ρ‚ΠΎ происходит событиС disable ΠΈ вызываСтся функция, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ Ρ…ΡƒΠΊ hook_disable. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ вновь Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ событиС enable, Π° Π½Π΅ install. Если ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π±Ρ‹Π» сначала Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½, Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΠ΄Π°Π»Π΅Π½ (ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ производится Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡ‚ списка ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ страницС), Ρ‚ΠΎ происходят события disable ΠΈ uninstall ΠΈ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ модуля ΠΎΠΏΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄ΡƒΡ‚ события install ΠΈ enable.

Π’Π°ΠΊΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ события install программисты ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ модуля Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π° ΠΏΡ€ΠΈ событии uninstall β€“ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ ΠΈΡ…, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ послС дСинсталляции модуля Π² систСмС Π½Π΅ остаСтся Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π² Π΅Π³ΠΎ присутствия. ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ модуля (enable ΠΈ disable) Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ сохранСнныС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ся, Π° лишь ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» модуля.

ΠŸΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ события install программисты ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ модуля Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…

ВСрнСмся ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ курсах Π²Π°Π»ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ currencies Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ с сСрвСра Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π‘Π°Π½ΠΊΠ° Π Π€. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΎΠΊΠ°Π·Π΅ Π±Π»ΠΎΠΊΠ° Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ с запросом ΠΊ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌΡƒ сСрвСру, Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… нашСго ΡΠ°ΠΉΡ‚Π°. Π’ ΡΠ°ΠΌΠΎΠΌ простом случаС для хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ функциями cache_set ΠΈΠ»ΠΈ variable_set ΠΈΠ· ядра Drupal, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π΅Π½, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ курсах Π²Π°Π»ΡŽΡ‚ Π·Π° Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΅Π΅ Π°Π½Π°Π»ΠΈΠ·Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ создадим ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π² Π½Π΅ΠΉ Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ всю ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

Наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€ довольно прост, поэтому события enable ΠΈ disable ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π½Π΅ΠΌ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚, Π° Π½Π° install ΠΈ uninstall ΠΌΡ‹ Π½Π°Π·Π½Π°Ρ‡ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ создания ΠΈ удалСния Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² Π‘Π”, для Ρ‡Π΅Π³ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ currencies.install размСстим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Ρ…ΡƒΠΊΠΈ hook_install ΠΈ hook_uninstall:

function currencies_install() {

  drupal_install_schema('currencies');

}

function currencies_uninstall() {

  drupal_uninstall_schema('currencies');

}

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ drupal_install_schema ΠΈ drupal_uninstall_schema ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ Drupal Schema API. Schema API β€“ это слой абстракции ΠΎΡ‚ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, благодаря ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ программист ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свой SQL-запрос ΠΏΠΎΠ΄ Ρ‚Ρƒ ΠΈΠ»ΠΈ ΠΈΠ½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, Π΅ΠΌΡƒ достаточно ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Schema API, послС Ρ‡Π΅Π³ΠΎ этот массив Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π² ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ SQL-запрос ΠΊ Ρ‚ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с Dupal. ЕдинствСнный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ эти Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, β€“ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ модуля, схСма ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ установлСна ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π°, Ρ‚. Π΅. послС Π²Ρ‹Π·ΠΎΠ²Π° drupal_install_schema('currencies') Drupal попытаСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, описанныС Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ hook_schema модуля currencies, поэтому Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ эту Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ (см. листинг 1). Π­Ρ‚ΠΎΡ‚ Ρ…ΡƒΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ассоциативный массив, содСрТащий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ…. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создаСтся Ρ‚Π°Π±Π»ΠΈΡ†Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ currencies_block ΠΈ двумя полями: timestamp ΠΈ data. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ массива ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Листинг 1

function currencies_schema() {

  $schema['currencies_block'] = array(

    'description' => t('Some table description.'),

    'fields' => array(

      'timestamp' => array(

        'type' => 'int',

        'size' => 'normal',

        'not null' => TRUE,

        'default' => 0,

      ),

      'data' => array(

        'type' => 'text',

        'not null' => TRUE,

      ),

    ),

  );

  return $schema;

}

На Π΄Π°Π½Π½ΠΎΠΌ этапС Π² нашСм ΠΌΠΎΠ΄ΡƒΠ»Π΅ currencies Π΅ΡΡ‚ΡŒ Π΄Π²Π° Ρ„Π°ΠΉΠ»Π°: currencies.info ΠΈ currencies.install, Π½ΠΎ ΠΎΠ½ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ нСдоступСн для Π²Ρ‹Π±ΠΎΡ€Π° Π½Π° страницС со списком ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π½Π΅ΠΌ отсутствуСт самый Π²Π°ΠΆΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» β€“ .module. Если Π² ΠΏΠ°ΠΏΠΊΠ΅ модуля ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» currencies.module ΠΈ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Π½Π΅ΠΌ всСго Π΄Π²Π΅ строчки:

<?php

// ; $Id$

(ΠΈΡ… описаниС Π±Ρ‹Π»ΠΎ Π΄Π°Π½ΠΎ Π²Ρ‹ΡˆΠ΅), ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ‚ΡƒΡ‚ ΠΆΠ΅ станСт доступным для установки, ΠΎΠ΄Π½Π°ΠΊΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ» currencies.module Π½Π΅ содСрТит Π½ΠΈΠΊΠ°ΠΊΠΈΡ… инструкций, установка этого модуля ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ созданию ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² Π‘Π” ΠΈ ΠΎΠ½ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π΅Π½. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ самому Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ, слоТному ΠΈ Π²Π°ΠΆΠ½ΠΎΠΌΡƒ этапу β€“ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ основного Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° модуля.


currencies.module

Π’ Drupal Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Β«Ρ€ΠΎΠ»Π΅ΠΉΒ» ΠΈ Β«ΠΏΡ€Π°Π² доступа». ΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² систСмС Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Β«Ρ€ΠΎΠ»ΠΈΒ» (Π³Ρ€ΡƒΠΏΠΏΡ‹) ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ β€“ Π°Π½ΠΎΠ½ΠΈΠΌΡ‹ ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ, ΠΎΠ΄Π½Π° ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… автоматичСски присваиваСтся ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½ ΠΎΠ½ Π² систСмС ΠΈΠ»ΠΈ Π½Π΅Ρ‚. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Β«ΠΏΡ€Π°Π²Π° доступа» ΠΊ своим рСсурсам, послС Ρ‡Π΅Π³ΠΎ администратор сайта Ρ‡Π΅Ρ€Π΅Π· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ€ΠΎΠ»ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ доступ ΠΊ ΠΊΠ°ΠΊΠΈΠΌ сСрвисам сайта. НапримСр, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ, входящиС Π² Π³Ρ€ΡƒΠΏΠΏΡƒ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ…, ΠΌΠΎΠ³ΡƒΡ‚ вСсти ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠ³, Π° Ρƒ Π°Π½ΠΎΠ½ΠΈΠΌΠΎΠ² Ρ‚Π°ΠΊΠΎΠΉ возмоТности Π½Π΅Ρ‚. Π’ любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ администратор сайта Ρ‡Π΅Ρ€Π΅Π· Web-интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€ΠΎΠ»ΠΈ (ΠΌΠΎΠ΄Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, администраторы ΠΈ Ρ‚. ΠΏ.), ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ особыС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Ρ€ΠΎΠ»Π΅ΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠ΄Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ½ΠΈΠΌΠ°Ρ‚ΡŒ с ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, Π° администраторы ΠΈΡ… Π±Π΅Π·Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ) ΠΈ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ эти Ρ€ΠΎΠ»ΠΈ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π΅ΠΌΡƒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ присвоСно нСсколько Ρ€ΠΎΠ»Π΅ΠΉ.

Π’ интСрфСйсС администратора с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ hook_menu ΠΈ Forms API Π±ΡƒΠ΄Π΅Ρ‚ создана Ρ„ΠΎΡ€ΠΌΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ список Π²Π°Π»ΡŽΡ‚.

Π’Ρ‹ΡˆΠ΅ ΡƒΠΆΠ΅ Π±Ρ‹Π»Π° описана Π»ΠΎΠ³ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ модуля, сСйчас, ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ строки ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ нашСм случаС, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π±ΠΈΡ‚Π° Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ основныС Ρ‡Π°ΡΡ‚ΠΈ:

β€’ ΠΈΠ½Ρ‚СрфСйс администратора;

β€’ Π°Π²Ρ‚оматичСски выполняСмыС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹;

β€’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π΅ΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ;

β€’ ΠΈΠ½Ρ‚СрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Π’ интСрфСйсС администратора с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ hook_menu ΠΈ Forms API Π±ΡƒΠ΄Π΅Ρ‚ создана Ρ„ΠΎΡ€ΠΌΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ администратору ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ список Π²Π°Π»ΡŽΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Π±Π»ΠΎΠΊΠ΅, адрСс XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Β«ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒΡΡΒ» информация ΠΎΠ± ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Ρ… курсах Π²Π°Π»ΡŽΡ‚, ΠΈ частоту обновлСния Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ hook_perm Π±ΡƒΠ΄Π΅Ρ‚ создано Β«ΠΏΡ€Π°Π²ΠΎ доступа», Π΄Π°ΡŽΡ‰Π΅Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ администратору сайта ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ настройкам модуля.

РСгулярно выполняСмая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄Π½Π°: ΠΏΡ€ΠΈ запускС строки cron-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ послСднСС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ курсах Π²Π°Π»ΡŽΡ‚. Если ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡˆΠ»ΠΎ врСмя большСС, Ρ‡Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ настройкС интСрфСйса управлСния ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ Π¦Π‘, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΡ… Π² Π±Π°Π·Π΅.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ создадим ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ…ΡƒΠΊΠ° hook_block, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π³ΠΎ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€ΡΡ‚Π°Π»ΡŒΡ‰ΠΈΠΊ ΠΌΠΎΠ³ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ внСшний Π²ΠΈΠ΄ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, создадим свою Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ‚Π΅ΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² систСмС ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ hook_theme.