Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll
19/04/2025, by Ivan

Menu

Մենք կարող ենք օգտագործել URL-ի պարամետրերը երթուղիների (routes) համար։ Դրանք աշխատում են ճիշտ այնպես, ինչպես Views-ի կոնտեքստային ֆիլտրերը։ Օրինակ՝ մենք կարող ենք URL-ով փոխանցել տարբեր էություների ID-ներ, տեքստային տողեր կամ հերթական ID-ներ՝ բաժանված ստորակետով կամ գումարով։ Այս դասում մենք կփոխանցենք node-ի ID-ն և կցուցադրենք այդ node-ի վերնագիրը և հիմնական բովանդակությունը։

Կոդի օրինակները հասանելի են GitHub-ում՝
https://github.com/levmyshkin/drupalbook8

Ավելացնենք նոր երթուղի drupalbook.routing.yml ֆայլում՝

drupalbook.display_node:
  path: '/display-node/{node}'
  defaults:
    _controller: '\Drupal\drupalbook\Controller\DisplayNode::content'
    _title_callback: '\Drupal\drupalbook\Controller\DisplayNode::getTitle'
  requirements:
    _custom_access: '\Drupal\drupalbook\Controller\DisplayNode::access'
  options:
    parameters:
      node:
        type: entity:node

Այստեղ {node}-ը URL-ից ստացվող ID-ն է, որը Drupal-ը վերափոխում է node-ի օբյեկտի՝ օգտագործելով parameters դաշտը։

_title_callback–ը օգտագործվում է վերնագիրն առանձնացնելով սահմանելու համար։
_custom_access–ը օգտագործվում է մուտքի ստուգման հարմարեցված մեթոդի համար։

Այժմ ստեղծենք controller-ը՝ modules/custom/drupalbook/src/Controller/DisplayNode.php

<?php

namespace Drupal\drupalbook\Controller;

use Drupal\Core\Access\AccessResult;
use Drupal\node\NodeInterface;

class DisplayNode {

  public function content(NodeInterface $node) {
    $element = array(
      '#markup' => $node->body->value,
    );
    return $element;
  }

  public function access(NodeInterface $node) {
    $user = \Drupal::currentUser();
    if ($node->getType() == 'article' && !in_array('authenticated', $user->getRoles())) {
      return AccessResult::forbidden();
    }
    return AccessResult::allowed();
  }

  public function getTitle(NodeInterface $node) {
    return $node->getTitle();
  }

}

Բացատրություն՝

  • NodeInterface $node պարամետրը ավտոմատ ձևով բեռնվում է՝ հիմնված URL-ի ID-ի վրա։
  • AccessResult դասը օգտագործվում է՝ մուտքի սահմանափակումներ դնելու համար։
  • getTitle() մեթոդը վերադարձնում է node-ի վերնագիրը։ Կարող եք ավելացնել պայմաններ՝ հիմնված օգտատիրոջ իրավունքների կամ node-ի տիպի վրա։

Օրինակ՝ վերնագրում “Premium” կամ “Free” նշելու համար՝

public function getTitle(NodeInterface $node) {
  $user = \Drupal::currentUser();
  if ($node->getType() == 'article' && !in_array('authenticated', $user->getRoles())) {
    return 'Պրեմիում բովանդակություն՝ ' . $node->getTitle();
  }
  else {
    return 'Ազատ մատչելիություն՝ ' . $node->getTitle();
  }
}

Ինչպես տեսնում եք՝ Drupal-ը տրամադրում է ճկուն մեխանիզմներ՝ Ձեր էջի ելքը հարմարեցնելու համար։ Երբ հաճախորդը ցանկանում է տարբեր ելքեր տարբեր օգտատերերի համար, կարող եք հեշտությամբ դա անել՝ օգտագործելով Drupal API-ն և մի փոքր PHP կոդ։

Կոդի օրինակները կրկին՝
https://github.com/levmyshkin/drupalbook8