Բլոկի համար կոնֆիգուրացիոն ձև ավելացնել
Այժմ ասենք, որ մենք ուզում ենք ավելացնել հնարավորություն՝ կայքի ստեղծողին ներմուծելու կոնֆիգուրացիայի մի մասը մեր կસ્ટમ բլոկի յուրաքանչյուր օրինակ համար։ Միշտ հիշեք, որ 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(); // Կատարեք անհրաժեշտ գործողություններ։ }
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.