
рдпрд╣ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдмрд╕реЗ рд╕рд░рд▓ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдФрд░ FAPI (
Drupal Forms API ) "рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░" рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ, рд╣рдо Drupal рдлреЙрд░реНрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдореВрд▓ рдмрд╛рддреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдФрд░ рдПрдХ рдЫреЛрдЯрд╛ рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдПрдВрдЧреЗ, рдЬреЛ AHAH рдирд╛рдордХ Drupal ajax рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдирд╛рдо рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдмрд╕ рдЗрд╕ рд╕рд░рд▓ рдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ FAPI рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рд▓реЗрдЦ рдХреНрдпреЛрдВ? рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Habr├й рдкрд░, FAPI рдХреЗ рд╕рд╛рде рдореЙрдбреНрдпреВрд▓ рдХреЗ
рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рдореЗрд░реЗ рд▓рд┐рдП рдЕрддреАрдд рдореЗрдВ рдпрд╣ рд╕рдордЭрдирд╛ рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рдерд╛ рдХрд┐ рдлреЙрд░реНрдо рдХреИрд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ - рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ "рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░" рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреАред рдореИрдВ рдЕрддреАрдд рдореЗрдВ рдирд╣реАрдВ рд▓реМрдЯ рд╕рдХрддрд╛ - рд▓реЗрдХрд┐рди рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рд╕рдорд╛рди рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЖрд▓реЗрдЦ Drupal рдХреЗ 6.x рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЖрд▓реЗрдЦ рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг 7 рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рд╣реИ - рд▓реЗрдХрд┐рди рдПрдкреАрдЖрдИ рдореЗрдВ рдЕрдВрддрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд▓реЗрдЦ рдХреЗ рднрд╛рдЧ 2 рдореЗрдВ рдПрдкреАрдЖрдИ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 7 рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред
FAPI рд░реВрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ?
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдкреНрд░рдкрддреНрд░ рдХреЛ HTML рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╕ рдЗрд╕реЗ рдкреГрд╖реНрда рдкрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк FAPI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдн рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ:
- рдкреНрд░рдкрддреНрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛, Drupal рдХреА рдереАрдорд┐рдВрдЧ, рдЗрд╕рдХрд╛ AHAH рд╕рд┐рд╕реНрдЯрдо (AJAX, Drupal рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 7 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ)ред
- рдЯреА () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдХрд░ рдлреЙрд░реНрдо рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рд╣реБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдлреЙрд░реНрдо рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рдФрд░, рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ, рдлреЙрд░реНрдо рдХреЛ рдбреНрд░реБрдкрд▓ рд░реВрдкреЛрдВ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреА рдереАрдо рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЕрдзрд┐рдХ "рдореВрд▓" рдмрдирд╛ рджреЗрдЧрд╛ред
рд╕рд░рд▓рддрдо рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдПрдВ
рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓
рдлрд╛рд╕реНрдЯрдХрдиреЗрдХреНрдЯ рдХрд╛
рдирд╛рдо рджреЗрдВред рдлрд╝реЛрд▓реНрдбрд░
/ рд╕рд╛рдЗрдЯреНрд╕ / рд╕рднреА / рдореЙрдбреНрдпреВрд▓ / рдлрд╛рд╕реНрдЯрдХрдиреЗрдХреНрдЯ рдмрдирд╛рдПрдВ - рдпрд╣ рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рд╣реЛрдЧрд╛ред рдЗрд╕рдореЗрдВ, рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдВ -
fastcontact.info рдФрд░
fastcontact.module - рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред
Ininfo рдореЗрдВ - рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦреЗрдВ:
; "" name = Fast Contact ; description = Test module for learning FAPI ; version = "6.x-1.0" ; core = "6.x" ; "" project = "fastcontact" ; package = "Other" ; datestamp = "1294001844"
рдЕрдм, рд╣рдо рдлреЙрд░реНрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдлрдПрдкреАрдЖрдИ рдлреЙрд░реНрдо рдХреЗ рдлрд╛рд░реНрдо рдФрд░ рддрддреНрд╡
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдкрддреНрд░ рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдкрддреНрд░ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред рд╕рд░рдгреА рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдПрдХ рдкреНрд░рдкрддреНрд░ рддрддреНрд╡ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдирд╛рдо рд╣реИ, рдФрд░ рдЗрд╕ рддрддреНрд╡ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рд░рдгреА рд╣реИред
рддрддреНрд╡реЛрдВ рдФрд░ рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕рд╛рд░рд╛рдВрд╢ рддрд╛рд▓рд┐рдХрд╛ Drupal API рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред
рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдмреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдлрд╝реЙрд░реНрдо рдмрдирд╛рдПрдВред
function fc_form() { $form = array();
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдлреЙрд░реНрдо рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдмреЙрдХреНрд╕ рдФрд░ рдПрдХ
рд╕рдмрдорд┐рдЯ рдмрдЯрди рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ Ajax (AHAH) рдкрд░ рдЪрд▓рддрд╛ рд╣реИред
рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ
рдЕрдм, рд╣рдореЗрдВ ANAN рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
рдЕрд╣рд╛ рддрддреНрд╡ рдХреА
рдкрде рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрде рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬрд┐рд╕ рд░реВрдк рдореЗрдВ рд╣рдордиреЗ рдкрде
'рдлрд╛рд╕реНрдЯрдХрдиреЗрдХреНрдЯ / js' рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИ)ред рдпрд╣
рд╣реБрдХ_рдореЗрдиреВ () рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Drupal
рдореЗрдиреВ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рднреА рдХрд░рддрд╛ рд╣реИ рдЬрдм рдХреБрдЫ рднреА "рдореЗрдиреВ" рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдкрде рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдореЗрдиреВ рдЖрдЗрдЯрдо рдПрдХ рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред
function fastcontact_menu() {
рд╣рдордиреЗ рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ
MENU_CALLBACK рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ рд╕рд╛рдЗрдЯ рдореЗрдиреВ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рдмрд╛рдж рдЗрд╕ рдорд╛рд░реНрдЧ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛ рдЬрд╛рдП (рдпрд╣ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИ)ред
рд╣рдорд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдлрд╝рдВрдХреНрд╢рди рд╕реАрдзреЗ рд░реВрдкреЛрдВ рдХреЗ рдХрд╛рдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╢реЛрдзрди рдХреЗ рдмрд┐рдирд╛, рд╣рдо рдХреЗрд╡рд▓ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП AHAH рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
function fastcontact_ajax() {
рдкреНрд░рдкрддреНрд░ рдкреНрд░рджрд░реНрд╢рди
рдЕрдм, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рд╣рдо рдлреЙрд░реНрдо рдХреЛ рдЬрдорд╛ рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдХреБрдЫ рдХрд░реЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рд░рдЪрдирд╛ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╣рдорд╛рд░реЗ рдлреЙрд░реНрдо рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП,
drupal_get_form () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
function render_fc_form() {
рд╣рдо
рд╣реБрдХ_рдмреНрд▓реЙрдХ () рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдмреНрд▓реЙрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ - рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╕ рдПрдХ рдЗрдирдкреБрдЯ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд▓реЙрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ php рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЙрд░реНрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
echo render_fc_form();
рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо
рдпрджрд┐ рдХреЛрдб рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╛рдХреНрдпрд╛рдВрд╢ "рдЖрдкрдиреЗ рдПрдХ рдирд╛рдо рджрд░реНрдЬ рдХрд┐рдпрд╛ рд╣реИ ..." рдЗрдирдкреБрдЯ рдлрд╝реЙрд░реНрдо рдХреЗ рддрд╣рдд рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЬрд╣рд╛рдВ ellipsis рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдирд╛рдо рд╣реЛрдЧрд╛, рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ред