logo

Լրացուցիչ Բլոկների Տեսակներ (EBT) - Դասավորության Կառուցողի նոր փորձառություն❗

Լրացուցիչ Բլոկների Տեսակներ (EBT) - ձևավորված, կարգավորելի բլոկների տեսակներ՝ սլայդշոուներ, ներդիրներ, քարտեր, բացվող ցանկեր և շատ ուրիշներ։ Ներառված կարգավորումներ՝ ֆոնի, DOM տուփի, JavaScript փլագինների համար։ Փորձեք դասավորությունների կառուցման ապագան արդեն այսօր։

EBT մոդուլների ցուցադրական տարբերակներ Ներբեռնել EBT մոդուլները

❗Լրացուցիչ Պարբերությունների Տեսակներ (EPT) - Պարբերությունների նոր փորձառություն

Լրացուցիչ պարբերության տեսակներ (EPT) - անալոգիական պարբերության վրա հիմնված մոդուլների հավաքակազմ։

EPT մոդուլների ցուցադրական տարբերակներ Ներբեռնել EPT մոդուլները

Scroll
20/06/2025, by Ivan

Menu

Բաժին V Դրամական ուղեցույց Drupal 8-ի հիմնական մոդուլների ստեղծման համար
.info-ից մինչև թեստեր, միայն հիմնականները

Հիշո՞ւմ եք, որ սկզբում այս դասի մեջ ասել էի, որ մենք կսահմանենք բլոկ՝ ֆորմայով։ Հիմա ժամանակն է այդ հարցին անդրադառնալու։

/src/Form/LoremIpsumBlockForm.php

<?php

namespace Drupal\loremipsum\Form;

use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;

/**
 * Lorem Ipsum բլոկի ֆորմա
 */
class LoremIpsumBlockForm extends FormBase {

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'loremipsum_block_form';
  }

Այս ֆայլը շատ նման է կարգավորումների ֆայլին, բացառությամբ այն բանի, որ այն ընդլայնում է FormBase դասը։

Նա նաև ունի buildForm() մեթոդ, որը գրեթե այսպիսի տեսք ունի.

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    // Քանի՞ պարբերություն։
    // $options = new array();
    $options = array_combine(range(1, 10), range(1, 10));
    $form['paragraphs'] = [
      '#type' => 'select',
      '#title' => $this->t('Պարբերություններ'),
      '#options' => $options,
      '#default_value' => 4,
      '#description' => $this->t('Քանի՞'),
    ];

    // Քանի՞ արտահայտություն։
    $form['phrases'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Արտահայտություններ'),
      '#default_value' => '20',
      '#description' => $this->t('Ամենաշատը յուրաքանչյուր պարբերության համար'),
    ];

    // Գործարկել։
    $form['submit'] = [
      '#type' => 'submit',
      '#value' => $this->t('Ստեղծել'),
    ];

    return $form;
  }

Այս մեթոդը օգտագործվում է բլոկում ֆորման տեղադրելու համար, որի միջոցով օգտվողները կարգավորում են, թե քանի տեքստային նմուշ են ցանկանում ստեղծել։

Մի մոռացեք նաև validateForm() և submitForm() մեթոդները.

  /**
   * {@inheritdoc}
   */
  public function validateForm(array &$form, FormStateInterface $form_state) {
    $phrases = $form_state->getValue('phrases');
    if (!is_numeric($phrases)) {
      $form_state->setErrorByName('phrases', $this->t('Խնդրում ենք օգտագործել թիվ։'));
    }

    if (floor($phrases) != $phrases) {
      $form_state->setErrorByName('phrases', $this->t('Խնդրում ենք ոչ տասնորդական թվեր։'));
    }
    
    if ($phrases < 1) {
      $form_state->setErrorByName('phrases', $this->t('Խնդրում ենք օգտագործել զրոյից մեծ թիվ։'));
    }
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $form_state->setRedirect('loremipsum.generate', [
      'paragraphs' => $form_state->getValue('paragraphs'),
      'phrases' => $form_state->getValue('phrases'),
    ]);
  }

}

Այժմ անցնենք բլոկին.

<?php

namespace Drupal\loremipsum\Plugin\Block;

use Drupal\Core\Access\AccessResult;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Session\AccountInterface;

/**
 * Ներկայացնում է Lorem ipsum բլոկ, որով կարող եք ցանկացած վայրում գեներացնել տեքստ։
 *
 * @Block(
 *   id = "loremipsum_block",
 *   admin_label = @Translation("Lorem ipsum բլոկ"),
 * )
 */
class LoremIpsumBlock extends BlockBase {

  /**
   * {@inheritdoc}
   */
  public function build() {
    // Վերադարձնում է ֆորման՝ @ Form/LoremIpsumBlockForm.php-ից։
    return \Drupal::formBuilder()->getForm('Drupal\loremipsum\Form\LoremIpsumBlockForm');
  }

LoremIpsumBlock դասը ընդլայնում է BlockBase-ը և ունի չորս հիմնական մեթոդ, որոնք պետք է իրականացվեն՝ build(), blockAccess(), blockForm() և blockSubmit(): Առաջին մեթոդը պարզապես ցուցադրում է ֆորման, որը սահմանվել է մեր նախորդ քայլում։

Հաջորդը կարգավորվում է մուտքի վերահսկողությունը՝

  /**
   * {@inheritdoc}
   */
  protected function blockAccess(AccountInterface $account) {
    return AccessResult::allowedIfHasPermission($account, 'generate lorem ipsum');
  }

Սահմանեք բլոկի ֆորման ադմինիստրատիվ էկրանին.

  /**
   * {@inheritdoc}
   */
  public function blockForm($form, FormStateInterface $form_state) {

    $form = parent::blockForm($form, $form_state);

    $config = $this->getConfiguration();

    return $form;
  }

Ներկայացման ֆունկցիան.

/**
 * {@inheritdoc}
 */
public function blockSubmit($form, FormStateInterface $form_state) {
  $this->setConfigurationValue('loremipsum_block_settings', $form_state->getValue('loremipsum_block_settings'));
}

}

Այժմ մեր բլոկը պետք է աշխատի։

Source URL:

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.