Բլոկի համար կոնֆիգուրացիոն ձև ավելացնել
Այժմ ասենք, որ մենք ուզում ենք ավելացնել հնարավորություն՝ կայքի ստեղծողին ներմուծելու կոնֆիգուրացիայի մի մասը մեր կસ્ટમ բլոկի յուրաքանչյուր օրինակ համար։ Միշտ հիշեք, որ Drupal 8-ում կայքի բոլոր կոնֆիգուրացիաները կարող են արտահանվել մշակման կայքից և ներմուծվել արտադրական կայք (հայտնի է որպես Կոնֆիգուրացիայի կառավարում)։ Դուք՝ մոդուլների հավաքող, կարող եք նաև տրամադրել նախնական կոնֆիգուրացիա, որպեսզի ավտոմատ լցնի ձևը, երբ կայքի ստեղծողը ստեղծում է նոր բլոկ։
Առկա HelloBlock դասին ավելացրեք հետևյալ «use» օպերատորները՝ արդեն եղածների հետևից՝
use Drupal\Core\Block\BlockPluginInterface; use Drupal\Core\Form\FormStateInterface;
Թարմացրեք դասի հայտարարումը՝ ներառելու համար նոր «BlockPluginInterface» ի իրականացման օպերատորը՝
class HelloBlock extends BlockBase implements BlockPluginInterface {
Դրանից հետո ավելացրեք հետևյալ մեթոդը դասին։ Կարծես ամբողջական ֆայլն այստեղ է, բայց ուշադրություն դարձրեք, որ ձևի անունը և կոնֆիգուրացիայի անունները չեն համընկնում այս ձեռնարկի հետ։
Այս կոդը միայն կավելացնի ձևը, ձևի մշակումը և արդյունքների պահպանումը հաջորդ էջերում է։
/**
* {@inheritdoc}
*/
public function blockForm($form, FormStateInterface $form_state) {
$form = parent::blockForm($form, $form_state);
$config = $this->getConfiguration();
$form['hello_block_name'] = [
'#type' => 'textfield',
'#title' => $this->t('Who'),
'#description' => $this->t('Who do you want to say hello to?'),
'#default_value' => isset($config['hello_block_name']) ? $config['hello_block_name'] : '',
];
return $form;
}
Այս օրինակով ձևը առաջին հերթին սահմանվում է իր ծնողական դասի blockForm()-ի միջոցով՝ $form = parent::blockForm($form, $form_state) հրամանով։ Դրանից հետո մենք ձևին ավելացնում ենք նոր դաշտ։ Այս գործընթացը կոչվում է պոլիմորֆիզմ և օբյեկտային ծրագրավորման (OOP) կարևոր առավելություններից մեկն է։
Հետո մենք պետք է Drupal-ին ասենք պահպանել ձևի արժեքները կոնֆիգուրացիայում այս բլոկի համար։ Ահա օրինակ՝
/**
* {@inheritdoc}
*/
public function blockSubmit($form, FormStateInterface $form_state) {
parent::blockSubmit($form, $form_state);
$values = $form_state->getValues();
$this->configuration['hello_block_name'] = $values['hello_block_name'];
}
Ձևը դիտելու համար գնացեք admin -> Structure -> Block Layout բաժին, ընտրեք արդեն ավելացված օրինակ և սեղմեք Configure (Hello World) բլոկի համար։
Եթե ցանկանում եք ավելացնել մի քանի ներկայացում՝ օգտագործեք նույն ձևը՝
/**
* {@inheritdoc}
*/
public function blockForm($form, FormStateInterface $form_state) {
$form = parent::blockForm($form, $form_state);
$config = $this->getConfiguration();
$form['hello_block_name'] = [
'#type' => 'textfield',
'#title' => $this->t('Who'),
'#description' => $this->t('Who do you want to say hello to?'),
'#default_value' => isset($config['hello_block_name']) ? $config['hello_block_name'] : '',
];
$form['actions']['custom_submit'] = [
'#type' => 'submit',
'#name' => 'custom_submit',
'#value' => $this->t('Custom Submit'),
'#submit' => [[$this, 'custom_submit_form']],
];
return $form;
}
Նոր հատուկ ներկայացման գործողություն՝
/**
* Custom submit actions.
*/
public function custom_submit_form($form, FormStateInterface $form_state) {
$values = $form_state->getValues();
// Կատարեք անհրաժեշտ գործողություններ։
}