logo

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

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

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

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

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

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

Scroll
19/06/2025, by Ivan

Զեկույց

Drupal 8-ում բլոկները իրականում բաղկացած են երկու առանձին API կառուցվածքից՝ ստեղծելու օգտատերերի միջերես, որը նման է Drupal-ի նախորդ տարբերակներում օգտագործվողին: Այս երկու API-ն են՝ Block Plugin API, որը ինքնուրույն API է բազմակի օգտագործման համար, և Block Entity API, որը հատուկ է Drupal 8-ի համար բլոկների տեղադրման և տեսանելիության վերահսկման:

Block Plugin API-ով բլոկների ստեղծում

Մոդուլի մեջ ձեր կողմից սահմանված բլոկներ ստեղծելու համար անհրաժեշտ է ուսումնասիրել և հասկանալ պլագինների API-ն և մասնավորապես անոթացիաների վրա հիմնված պլագինների հայտնաբերում մեխանիզմը, որը Drupal 8-ն օգտագործում է ձեր բլոկը սահմանող կոդը հայտնաբերելու համար:

Օգտագործողի կողմից սահմանված բլոկ ստեղծելու քայլերն են՝

 

Ավելի՜ն դարձնել բլոկը տեսանելի Drupal-ի և ձեր օգտատերերի համար

Drupal-ն օգտագործում է PSR-4 ստանդարտը հայտնաբերության համար: Գիտակցելով, որ մոդուլի անունը fax է, ձեր բլոկների կոդը պետք է տեղադրվի fax/src/Plugin/Block/ պանակում: Հետևյալ ֆայլի անունը պետք է համապատասխան լինի դասին, որ պարունակում է: Օրինակ, եթե ուզում ենք սահմանել FaxBlock դաս, ապա այն պետք է լինի ֆայլում fax/src/Plugin/Block/FaxBlock.php հետևյալ օրինակով՝

namespace Drupal\fax\Plugin\Block;

use Drupal\Core\Block\BlockBase;

/**
 * Provides a 'Fax' block.
 *
 * @Block(
 *   id = "fax_block",
 *   admin_label = @Translation("Fax block"),
 * )
 */
class FaxBlock extends BlockBase {
  // Override BlockPluginInterface methods here.
}

Անոթացիայում նշված id հատկությունը սահմանում է ձեր բլոկի եզակի մեքենայական ընթեռնելի նույնականացուցիչը և անունը, որը կտեսնվի այլ կոդից: admin_label անոթացիան սահմանում է բլոկի ընթեռնելի անունը, որը օգտագործվում է ադմինիստրատիվ միջերեսում: Անոթացիայի հասանելի հատկությունները կարելի է գտնել \Drupal\Core\Block\Annotation\Block-ում (հասանելի հատկություններ):

Ամենատարածված երկու մեթոդներն են վերօրակագրվել՝

  • BlockPluginInterface::build() - պետք է վերադարձնի ռենդերային զանգված, որը սահմանում է բովանդակությունը, որ դուք ուզում եք, որ բլոկը ցուցադրի
  • BlockBase::access() - վերահսկում է բլոկի տեսանելիությունը: Չափելի է, որ վերադարձնի AccessResult օբյեկտ

Ավելացնել օգտատիրոջ կարգավորելի պարամետրեր ձեր բլոկին

Կարող եք նաև ավելացնել օգտատիրոջ կարգավորելի պարամետրեր բլոկի կարգավորումների ձևում՝ վերօգտագործելով BlockPluginInterface::blockForm() և BlockPluginInterface::blockSubmit() մեթոդները, ապա օգտագործելով BlockBase::setConfigurationValue() և BlockBase::getConfiguration():

Հաջորդ օրինակում մենք ավելացնում ենք նոր տեքստային դաշտ blockForm() մեթոդում, ապա պահում ենք օգտատիրոջ մուտքագրված տվյալները blockSubmit() մեթոդում: Կոդը ցույց է տալիս, թե ինչպես կարելի է ստանալ, ստուգել և թարմացնել արժեքները համապատասխան մեթոդներով:

use Drupal\Core\Block\BlockBase;
use Drupal\Core\Block\BlockPluginInterface;
use Drupal\Core\Form\FormBuilderInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Cache\Cache;

/**
 * Provides a 'Fax' block.
 *
 * @Block(
 *   id = "fax_block",
 *   admin_label = @Translation("Fax block"),
 * )
 */
class FaxBlock extends BlockBase implements BlockPluginInterface {

  // Access  method here ...

  /**
   * {@inheritdoc}
   */
  public function build() {

    $config = $this->getConfiguration();
    $fax_number = isset($config['fax_number']) ? $config['fax_number'] : '';
    return array(
      '#markup' => $this->t('The fax number is @number!', array('@number' => $fax_number)),
    );  
  }

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

    // Retrieve existing configuration for this block.
    $config = $this->getConfiguration();

    // Add a form field to the existing block configuration form.
    $form['fax_number'] = array(
      '#type' => 'textfield',
      '#title' => t('Fax number'),
      '#default_value' => isset($config['fax_number']) ? $config['fax_number'] : '',
    );
    
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function blockSubmit($form, FormStateInterface $form_state) {
    // Save our custom settings when the form is submitted.
    $this->setConfigurationValue('fax_number', $form_state->getValue('fax_number'));
  }

  /**
   * {@inheritdoc}
   */
  public function blockValidate($form, FormStateInterface $form_state) {
    $fax_number = $form_state->getValue('fax_number');

    if (!is_numeric($fax_number)) {
      $form_state->setErrorByName('fax_number', t('Needs to be an integer'));
    }
  }
}

Կարող եք նաև օգտագործել BlockBase::getConfiguration() մեթոդը build()-ում՝ կարգավորումներ ստանալու և դրանք ձեր օգտատերերին ցուցադրելու համար: Ձեր բլոկի access() մեթոդը կարող է պարունակել ավելի բարդ տրամաբանություն՝ որոշելու համար՝ բլոկը ցուցադրվի, թե ոչ:

Օգտագործման թույլտվության մեթոդի օրինակ:

/**
 * {@inheritdoc}
 */
public function access(AccountInterface $account, $return_as_object = FALSE) {
  return \Drupal\Core\Access\AccessResult::allowedIf($account->isAuthenticated());
}

Կարող եք նաև ստեղծել ձեր սեփական կեշավորման պայմանները:

Կեշ-թեգերի կիրառման մեթոդի օրինակ. Ավելին կեշ-թեգերի մասին իմանալու համար:

/**
 * {@inheritdoc}
 */
public function getCacheTags() {
  return \Drupal\Core\Cache\Cache::mergeTags(parent::getCacheTags(), ['node_list']);
}

Եթե ցանկանում եք փոխել բլոկի առավելագույն կեշի ժամանակը 0-ի, ավելի շատ իմանալ կեշի առավելագույն տարիքի մասին՝

public function getCacheMaxAge() {
  // Եթե ցանկանում եք անջատել այս բլոկի կեշավորումը:
  return 0;
}

 

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.