<div class="node<?php if ($sticky) {
print " sticky";
} ?>
<?php if (!$status) {
print " node-unpublished";
} ?>">
<h2 class="title"><?php print $title?></h2>
<span class="submitted"><?php print $submitted?></span>
<div class="content"><?php print $content?></div>
</div>
Π€ΠΎΡΠΌΡΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ Π²ΠΈΠ΄Π° ΡΠΎΡΠΌ, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ Ρ ΠΎΡΠ½ΠΎΠ²Π°ΠΌΠΈ Drupal Forms API β ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠΎΡΠΌ. ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Forms API Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ HTML-ΡΠΎΡΠΌ Π²ΡΡΡΠ½ΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Π»ΠΎΠ³ΠΈΠΊΠΈ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Forms API ΡΠ΅ΡΠ°Π΅Ρ ΡΡΠ΄ Π²Π°ΠΆΠ½ΡΡ Π·Π°Π΄Π°Ρ:
β’ Π»ΡΠ±ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΡΠΎΡΠΌΠ΅, ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ Π΄ΡΡΠ³ΠΈΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ, Π½Π΅ ΠΌΠ΅Π½ΡΡ Π΅Π΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°;
β’ Π»ΡΠ±ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π²Π²Π΅Π΄Π΅Π½Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π΄Π°Π½Π½ΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΌΡ;
β’ ΡΠΎΡΠΌΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Forms API, Π·Π°ΡΠΈΡΠ΅Π½Ρ ΠΎΡ Π°ΡΠ°ΠΊ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΌΡ;
β’ Π»ΡΠ±ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΡΠΎΡΠΌΡ, Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ Π΅Π΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΠ°ΠΆΠ΄Π°Ρ ΡΠΎΡΠΌΠ° Π² Drupal ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ². ΠΡΠΎΡ ΠΌΠ°ΡΡΠΈΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ±ΠΎ Π²ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°Ρ ΡΠΎΡΠΌΡ, ΡΡΠ½ΠΊΡΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ (Π²Π°Π»ΠΈΠ΄Π°ΡΠΎΡΡ, validators) ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ (ΡΠ°Π±ΠΌΠΈΡΡΠ΅ΡΡ, submitters) Π²Π²Π΅Π΄Π΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ . ΠΠ°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π° Π² ΡΠ°ΠΉΠ»Π΅ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ Π² ΡΡΠ°ΡΡΠ΅, ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² PC Magazine/RE, 9/2009.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ.
function test_form($form_state) {
$form["example_text_field"] = array(
'#type' => 'textfield',
'#title' => 'Example text field',
);
$options = array(
0 => 'zero',
1 => 'one',
2 => 'two',
);
$form["example_select"] = array(
'#type' => 'select',
'#title' => 'Example select list',
'#options' => $options,
'#description' => t('You can select only value "one" in this
form'),
);
$form["submit"] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
}
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π²ΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΎΡΠΌΡ, ΡΠΎΡΡΠΎΡΡΡΡ ΠΈΠ· ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ, Π²ΡΠΏΠ°Π΄Π°ΡΡΠ΅Π³ΠΎ ΡΠΏΠΈΡΠΊΠ° Ρ ΡΡΠ΅ΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠΌΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ β Π΅Π΅ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ($form_id), ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΠΎΡΠΌΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ. Π§ΡΠΎΠ±Ρ Π²ΡΠ²Π΅ΡΡΠΈ ΡΠΎΡΠΌΡ Π½Π° ΡΠΊΡΠ°Π½, Π½ΡΠΆΠ½ΠΎ ΡΠ΅ΡΠ΅Π· hook_menu ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ, Π³Π΄Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ drupal_get_form, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠ°Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° $form_id ΡΠΎΡΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π° Π½Π° ΡΠΊΡΠ°Π½Π΅:
function ΠΈΠΌΡ_ΠΌΠΎΠ΄ΡΠ»Ρ_menu() {
$items = array();
$items['test-form'] = array(
'title' => 'Test form',
'page callback' => 'test_form_page',
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function test_form_page() {
return drupal_get_form('test_form');
}
Π ΠΌΠ°ΡΡΠΈΠ²Π΅, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ test_form($form_state), Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ (ΡΡΡΡΠΊΡΡΡ), ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ΄ΡΠΎ Drupal ΠΏΠΎΡΠ»Π΅ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° ΡΠΎΡΠΌΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Submit ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅Ρ Π½Π°ΠΉΡΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ form_id_validate ΠΈ form_id_submit. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠ°ΠΊ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ³Π°Π΄Π°ΡΡΡΡ, ΡΡΠΎ Π±ΡΠ΄ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ test_form_validate ΠΈ test_form_submit:
function test_form_validate($form, &$form_state) {
if($form_state['values']['example_select'] != 1) {
form_set_error('example_select', t('You must select value
"one" in select list :)'));
}
}
function test_form_submit($form, &$form_state) {
drupal_set_message('Form sumitted! Values:');
drupal_set_message("textbox: " .
$form_state['values']['example_text']);
drupal_set_message("selectlist: " .
$form_state['values']['example_select']);
}
Π€ΡΠ½ΠΊΡΠΈΡ-Π²Π°Π»ΠΈΠ΄Π°ΡΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ΅ Π² Π²ΡΠΏΠ°Π΄Π°ΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π½Π΅ one, ΠΏΠΎΡΡΠ»Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΎΡΠΌΡ Π²ΡΠ·Π²Π°Π» ΠΎΡΠΈΠ±ΠΊΡ. Π€ΡΠ½ΠΊΡΠΈΡ-ΡΠ°Π±ΠΌΠΈΡΡΠ΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½ Π²Π²Π΅Π΄Π΅Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΠ΄Π΅Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
ΠΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΌΠΎΠΆΠ΅Ρ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ $form ΡΡΠ½ΠΊΡΠΈΠΈ test_form Π·Π°Π΄Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ #submit, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ ΠΌΠ°ΡΡΠΈΠ² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ #validate Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ Π²Π°Π»ΠΈΠ΄Π°ΡΠΎΡΠΎΠ² (ΡΠΌ. Π»ΠΈΡΡΠΈΠ½Π³ 4). ΠΠ΅Π»Π΅Π½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ Π²ΡΠ΄Π΅Π»Π΅Π½Ρ ΡΡΡΠΎΠΊΠΈ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠ΅ ΠΊ ΡΠ°Π½Π΅Π΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ. ΠΠΎΠ΄ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΡΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΠΈΠ· Π»ΠΈΡΡΠΈΠ½Π³Π° 5.
ΠΠΈΡΡΠΈΠ½Π³ 4function test_form($form_state) {
$form["example_text_field"] = array(
'#type' => 'textfield',
'#title' => 'Example text field',
'#description' => 'Text must contain more then
3 symbols',
);
$options = array(
0 => 'zero',
1 => 'one',
2 => 'two',
);
$form["example_select"] = array(
'#type' => 'select',
'#title' => 'Example select list',
'#options' => $options,
'#description' => t('You can select only value "one"
in this form'),
);
$form["submit"] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
$form["#validate"] = array('test_validate_first',
'test_validate_second');
$form["#submit"] = array('test_submit_first',
'test_submit_second');
return $form;
}
ΠΠΈΡΡΠΈΠ½Π³ 5function test_validate_first($form, &$form_state) {
if(mb_strlen($form_state['values']['example_text_field']) < 3) {
form_set_error('example_text_field', t('Text must contain more then 3 symbols'));
}
}
function test_validate_second($form, &$form_state) {
if($form_state['values']['example_select'] != 1) {
form_set_error('example_select', t('You must select value "one" in select list :)'));
}
}
function test_submit_first($form, &$form_state) {
drupal_set_message('First submitter');
drupal_set_message("textbox: " . $form_state['values']['example_text']);
}
function test_submit_second($form, &$form_state) {
drupal_set_message('Second submitter');
drupal_set_message("selectlist: " . $form_state['values']['example_select']);
}
ΠΠ΄Π΅ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π²Π°Π»ΠΈΠ΄Π°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΠ΅ΠΊΡΡ, Π²Π²Π΅Π΄Π΅Π½Π½ΡΠΉ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅; Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ Π΄Π»ΠΈΠ½Π° ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΡΡΠ΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΎΡΠΌ Π²ΡΠ΅Π³Π΄Π° ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π²Π°Π»ΠΈΠ΄Π°ΡΠΎΡΡ ΠΈ ΡΠ°Π±ΠΌΠΈΡΡΠ΅ΡΡ, Π° ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΠΈΡ ΡΠ²Π½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΡΠΌΠΎΠ³ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΡ ΠΌΠ°ΡΡΠΈΠ²Ρ #submit ΠΈ #validate ΡΠ²ΠΎΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ. ΠΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π²Π°Π»ΠΈΠ΄Π°ΡΠΎΡΡ ΠΈ ΡΠ°Π±ΠΌΠΈΡΡΠ΅ΡΡ, ΡΠΎ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΡΠΌΠΎΠ³ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²ΠΎΠΈΠΌΠΈ, Π° ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ΄ΠΎΠ±Π½ΠΎ.
ΠΠ° Π·Π°ΠΌΠ΅ΡΠΊΡ: ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈSignwriter. Π§Π°ΡΡΠΎ Π±ΡΠ²Π°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Ρ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΡΠΊΠ·ΠΎΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΡΠΈΡΡ, ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΠΉ Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Π΅ΠΉ ΡΠ°ΠΉΡΠ°. ΠΠΎΠ΄ΡΠ»Ρ Signwriter Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΡΠΈΡΡΠΎΠΌ (ΡΡΠΈΡΡ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ» Π·Π°ΠΊΠ°ΡΠ°Π½ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ). Π§Π΅ΡΠ΅Π· ΠΌΠ΅Π½Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ Π·Π°ΠΌΠ΅Π½Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΡΡΡΠ°Π½ΠΈΡ ΠΈ Π±Π»ΠΎΠΊΠΎΠ² ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌΠΈ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ°ΠΌΠΈ, Π° ΡΠ΅ΡΠ΅Π· ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ Π²ΠΎΠ²ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ°ΠΌΠΈ Π»ΡΠ±ΠΎΠΉ ΡΠ΅ΠΊΡΡ.
Blocktheme. ΠΠ΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ Π·Π°ΠΊΠ°ΡΠΈΠ²Π°ΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π½Π° ΡΠ°ΠΉΡΠ΅ Π±Π»ΠΎΠΊ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Π°Ρ Π² Drupal ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠ°ΡΠΎΠΊ ΠΈΠΌΠ΅Π½ Π΄Π»Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π½Π΅ Π΄Π»Ρ Π²ΡΠ΅Ρ Π·Π°Π΄Π°Ρ Π±ΡΠ²Π°Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π³ΠΈΠ±ΠΊΠΎΠΉ. ΠΠΎΠ΄ΡΠ»Ρ Blocktheme ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅ΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ Π²ΡΠ±ΡΠ°ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π·Π°ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ².
Devel. ΠΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π² ΡΡΠΊΠ°Ρ Drupal-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΡΠ΅ΠΌ ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ Devel ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ±ΠΎ Π²ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΡΡΠ°Π½ΠΈΡΡ ΡΠ°Π±Π»ΠΎΠ½Π°Ρ ΠΈ ΡΡΠ½ΠΊΡΠΈΡΡ ΡΠ΅ΠΌΠΈΠ·Π°ΡΠΈΠΈ.
PNG Fix. ΠΠΎΠ΄ΡΠ»Ρ, ΠΈΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π½Π΅ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΡΡ PNG-ΡΠ°ΠΉΠ»ΠΎΠ² Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ IE 5.5 ΠΈ IE 6. ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°Π±ΠΎΡΠ° ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ΅ΡΠ΅Π· ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠ΅ΠΌΡ ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΡ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ΅ΠΌΠ΅ ΡΡΠ°ΡΡΠΈ β ΡΠ΅ΠΌΠΈΠ·Π°ΡΠΈΠΈ Drupal. Π€ΡΠ½ΠΊΡΠΈΡ drupal_get_form, ΠΏΠΎΠ»ΡΡΠΈΠ² Π½Π° Π²Ρ ΠΎΠ΄ $form_id, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΎΡΠΌΡ, ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ²Π΅ΡΡΠΈ Π½Π° ΡΠΊΡΠ°Π½, Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ form_builder, ΠΏΡΠΎΠ²Π΅ΡΡΡΡΡΡ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ ΡΠΎΡΠΌΡ, ΠΈ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΡΡΠΈΡ ΠΏΡΠ°Π² Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ HTML-ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΎΡΠΌΡ. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΎΡΠΌΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ id. Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ Π²ΠΈΠ΄Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΎΡΠΌΡ β ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ CSS-ΡΠ°ΠΉΠ»Π° Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΡΡΠΈΠ»Π΅ΠΉ Π½ΡΠΆΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΎΡΠΌΡ. ΠΡΠ»ΠΈ ΡΡΠΎΠ³ΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΡΠΎΡΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ #prefix ΠΈ #suffix, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ HTML-ΠΊΠΎΠ΄, Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΡΠΉ Π΄ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΡΠ»ΠΈ ΠΈ ΡΡΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ #theme, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ΅ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅ΠΌΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅ΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π΄Π»Ρ Π²ΡΠ΅ΠΉ ΡΠΎΡΠΌΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ ΠΈΠ»ΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΅Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Drupal Π΄Π»Ρ ΡΠ΅ΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΡΠΌΡ ΠΏΡΠΎΠ±ΡΠ΅Ρ Π½Π°ΠΉΡΠΈ ΡΡΠ½ΠΊΡΠΈΡ theme_form_id, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° #theme Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ.
ΠΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ #theme, Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Ρ ΡΠ΅ΡΠ΅Π· hook_theme (ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ Ρ ΡΠΊΠ° Π±ΡΠ»ΠΎ Π΄Π°Π½ΠΎ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅).
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π²Π½Π΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ ΡΠΊΠ° hook_theme:
function Π½Π°Π·Π²Π°Π½ΠΈΠ΅_ΠΌΠΎΠ΄ΡΠ»Ρ_theme() {
return array(
'example_text_field_theme_function' => array(
'arguments' => array('form' => NULL),
),
);
}
ΠΠ°ΡΠ΅ΠΌ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² $form["example_text_field"], ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ test_form, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π² Π½Π΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ #theme:
$form["example_text_field"] = array(
'#type' => 'textfield',
'#title' => 'Example text field',
'#description' => 'Text must contain more then 3 symbols',
'#theme' => 'example_text_field_theme_function',
);
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ theme_example_text_field_theme_function ΠΈ Π·Π°Π΄Π°ΡΡ Π² Π½Π΅ΠΉ Π»ΡΠ±ΠΎΠΉ HTML-ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°:
function theme_example_text_field_theme_function($element) {
$class = "";
if(isset($element["#needs_validation"])) {