Kinh nghiệm: Biểu Tượng Trong Drupal

Thảo luận trong 'Học tập' bởi nuongitq, 19/12/2015.

  1. nuongitq

    nuongitq Thành viên đạt chuẩn

    Tham gia:
    5/8/2014
    Bài viết:
    73
    Đã được thích:
    8
    Điểm thành tích:
    8
    Drupal 8 biểu tượng

    Trong loạt bài này có hai phần, chúng tôi sẽ sử dụng hệ thống này để xây dựng một tính năng cho phép việc sử dụng các hình thức tùy chỉnh cùng với các thực thể node. Sau khi chúng tôi đang thực hiện, chúng ta sẽ có thể làm như sau:

    cấu hình bó nút để sử dụng một trong nhiều loại hình thức để được hiển thị cùng với màn hình hiển thị nút
    dễ dàng xác định các loại hình thức mới bằng cách mở rộng từ một lớp cơ sở hợp lý
    Bởi vì chủ đề là rất tốt ở phần khác, tôi sẽ không đi vào chi tiết về cách làm việc plugins. Nhưng đừng cảm thấy tự do để chải lên trên lý thuyết trước khi lặn vào mấu chốt của nó ở đây. Và nếu bạn muốn đi xem một kết quả cuối cùng, các mã chúng tôi viết trong cả hai bài viết có thể được tìm thấy trong kho lưu trữ này.

    Chúng tôi sẽ bắt đầu bằng cách tạo ra loại Plugin tùy chỉnh của chúng tôi. Để kết thúc này, chúng ta sẽ có 2 giao diện và lớp 6. Nghe có vẻ như nhiều, nhưng tôi đảm bảo với bạn rằng họ khá nồng nhiệt và nhanh chóng để thiết lập. Sau đó, trong phần tiếp theo của loạt bài này, chúng tôi sẽ xem làm thế nào để sử dụng nó cho các hình thức tái sử dụng của chúng tôi gắn liền với các nút.

    Quản lý plugin

    Chịu trách nhiệm phát hiện và tải plugin, phần quan trọng nhất trong bất kỳ loại plugin là người quản lý. Tuy nhiên, nó rất đơn giản để tạo ra một vì Drupal đã cho chúng ta một cơ sở hợp lý để mở rộng mặc định. Vì vậy, trong mô-đun của / thư mục src của chúng tôi, chúng tôi có thể có lớp này bên trong một file ReusableFormManager.php (de facto tên của loại plugin của chúng ta trở nên ReusableForm):

    Code:
    [/SIZE][/COLOR][/FONT]
    [SIZE=4][FONT=Georgia][COLOR=rgb(27, 27, 39)]<?php
    namespace Drupal\reusable_forms;
    
    use Drupal\Core\Plugin\DefaultPluginManager;
    use Drupal\Core\Cache\CacheBackendInterface;
    use Drupal\Core\Extension\ModuleHandlerInterface;
    
    class ReusableFormsManager extends DefaultPluginManager {
    
    public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) {
        parent::__construct('Plugin/ReusableForm', $namespaces, $module_handler, 'Drupal\reusable_forms\ReusableFormPluginInterface', 'Drupal\reusable_forms\Annotation\ReusableForm');
        $this->alterInfo('reusable_forms_info');
        $this->setCacheBackend($cache_backend, 'reusable_forms');
      }
    }


    Giao diện Plugin

    Tiếp theo, chúng ta hãy tạo ra giao diện mà người quản lý mong muốn tất cả các plugin của chúng tôi để thực hiện. Bên trong một tập tin gọi là ReusableFormPluginInterface.php nằm trong src / thư mục của module của chúng ta, chúng ta có thể có điều này:

    Code:
    [/SIZE][/COLOR][/FONT]
    [SIZE=4][FONT=Georgia][COLOR=rgb(27, 27, 39)]<?php
    
    namespace Drupal\reusable_forms;
    
    use Drupal\Core\Entity\EntityInterface;
    use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
    use Drupal\Component\Plugin\PluginInspectionInterface;
    
    interface ReusableFormPluginInterface extends PluginInspectionInterface, ContainerFactoryPluginInterface {
    
      /**
       * Return the name of the reusable form plugin.
       *
       * @return string
       */
      public function getName();
    
      /**
       * Builds the associated form.
       *
       * @param $entity EntityInterface.
       *   The entity this plugin is associated with.
       *
       * @return array().
       *   Render array of form that implements \Drupal\reusable_forms\Form\ReusableFormInterface
       */
      public function buildForm($entity);
    }


    Đây là một giao diện rất đơn giản mà thực thi chỉ có hai phương pháp: getName () và buildForm (). Việc đầu tiên sẽ trở lại tên của plugin trong khi sau này được dự kiến sẽ được thông qua một đối tượng thực thể và trả lại một render mảng của một định nghĩa hình thức mà thực hiện \ Drupal \ reusable_forms \ Mẫu \ ReusableFormInterface (giao diện, chúng tôi sẽ thiết lập cho thực tế của chúng tôi hình thức). Bạn cũng sẽ nhận thấy rằng chúng tôi đang mở rộng hai giao diện khác.

    chú thích Plugin
    Theo định nghĩa trong bộ quản lý, chúng ta hãy cũng thiết lập lớp chú thích của chúng tôi bên trong src / Annotation / ReusableForm.php:
    Code:
    [/SIZE][/COLOR][/FONT]
    [SIZE=4][FONT=Georgia][COLOR=rgb(27, 27, 39)]<?php
    
    namespace Drupal\reusable_forms\Annotation;
    
    use Drupal\Component\Annotation\Plugin;
    
    /**
    * Defines a reusable form plugin annotation object.
    *
    * @Annotation
    */
    class ReusableForm extends Plugin {
    
      /**
       * The plugin ID.
       *
       * @var string
       */
      public $id;
    
      /**
       * The name of the form plugin.
       *
       * @var \Drupal\Core\Annotation\Translation
       *
       * @ingroup plugin_translatable
       */
      public $name;
    
      /**
       * The form class associated with this plugin
       *
       * It must implement \Drupal\reusable_forms\Form\ReusableFormInterface.
       *
       * @var string
       */
      public $form;
    }

    >> Khóa học lập trình android tại hà nội !

    cơ sở Plugin
    Vì vậy, đến nay chúng tôi có cốt lõi của những gì chúng ta cần cho loại plugin của chúng tôi: một người quản lý plugin mà có thể khám phá các plugin mới sử dụng các chú thích, chúng tôi xác định và nhanh chóng chúng với nhà máy mặc định của nó, tức là Nhà máy Container.

    Bây giờ chúng ta đặt các công trình mặt đất cho các plugin mình bằng cách tạo ra một lớp cơ sở tất cả các plugin có thể / nên / sẽ mở rộng. Bên trong src / thư mục của module của chúng tôi, chúng tôi có thể tạo ra một tập tin mới gọi ReusableFormPluginBase.php với lớp trừu tượng sau đây bên:
    Code:
    [/SIZE][/COLOR][/FONT]
    [SIZE=4][FONT=Georgia][COLOR=rgb(27, 27, 39)]<?php
    
    namespace Drupal\reusable_forms;
    use Drupal\Component\Plugin\PluginBase;
    use Drupal\Core\Form\FormBuilder;
    use Symfony\Component\DependencyInjection\ContainerInterface;
    abstract class ReusableFormPluginBase extends PluginBase implements ReusableFormPluginInterface {
      /**
       * The form builder.
       *
       * @var \Drupal\Core\Form\FormBuilder.
       */
      protected $formBuilder;
      /**
       * Constructs a ReusableFormPluginBase object.
       *
       * @param array $configuration
       * @param string $plugin_id
       * @param mixed $plugin_definition
       * @param FormBuilder $form_builder
       */
      public function __construct(array $configuration, $plugin_id, $plugin_definition, FormBuilder $form_builder) {
        parent::__construct($configuration, $plugin_id, $plugin_definition);
        $this->formBuilder = $form_builder;
      }
    
      /**
       * {@inheritdoc}
       */
      public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
        return new static(
          $configuration,
          $plugin_id,
          $plugin_definition,
          $container->get('form_builder')
        );
      }
      /**
       * {@inheritdoc}
       */
      public function getName() {
        return $this->pluginDefinition['name'];
      }
      /**
       * {@inheritdoc}
       */
      public function buildForm($entity) {
        return $this->formBuilder->getForm($this->pluginDefinition['form'], $entity);
      }
    }


    Giao diện Form
    Loại cắm của chúng tôi được khá nhiều kết thúc. Bây giờ chúng tôi có thể cung cấp một số mặc định hợp lý các hình thức đó sẽ được sử dụng bởi các plugin. Bên trong src / Form / ReusableFormInterface.php chúng ta có thể có giao diện đơn giản này:
    Code:
    [/SIZE][/COLOR][/FONT]
    [SIZE=4][FONT=Georgia][COLOR=rgb(27, 27, 39)]<?php
    namespace Drupal\reusable_forms\Form;
    use Drupal\Core\Form\FormInterface;
    interface ReusableFormInterface extends FormInterface {}
    

    Chúng tôi đang làm gì ở đây ngoại trừ kéo dài từ mặc định Drupal FormInterface. Chúng tôi có nó để chúng ta có thể thêm bất cứ phương pháp chúng ta cần hình thức của chúng tôi để thực hiện (hiện không có) và có thể xác định các hình thức mà thực hiện giao diện này là tương thích với các plugin của chúng tôi.

    cơ sở hình thức
    Bây giờ chúng ta có một giao diện hình thức để thực hiện, chúng ta hãy cũng tạo ra một lớp cơ sở hình thức mà phần còn lại của hình thức có thể mở rộng. Bên trong src / Form / ReusableFormBase.php chúng ta có thể có các lớp trừu tượng sau đây:
    Code:
    [/SIZE][/COLOR][/FONT]
    [SIZE=4][FONT=Georgia][COLOR=rgb(27, 27, 39)]<?php
    namespace Drupal\reusable_forms\Form;
    use Drupal\Core\Entity\EntityInterface;
    use Drupal\Core\Form\FormBase;
    use Drupal\Core\Form\FormStateInterface;
    /**
    * Defines the ReusableFormBase abstract class
    */
    abstract class ReusableFormBase extends FormBase implements ReusableFormInterface {
      /**
       * @var EntityInterface.
       */
      protected $entity;
      /**
       * {@inheritdoc}.
       */
      public function buildForm(array $form, FormStateInterface $form_state) {
        $build_info = $form_state->getBuildInfo();
        if ($build_info['args'] && $build_info['args'][0] instanceof EntityInterface) {
          $this->entity = $build_info['args'][0];
        }
        $form['first_name'] = array(
          '#type' => 'textfield',
          '#title' => $this->t('First name'),
        );
        $form['last_name'] = array(
          '#type' => 'textfield',
          '#title' => $this->t('Last name'),
        );
        $form['email'] = array(
          '#type' => 'email',
          '#title' => $this->t('Email'),
        );
        $form['actions']['#type'] = 'actions';
        $form['actions']['submit'] = array(
          '#type' => 'submit',
          '#value' => $this->t('Submit'),
          '#button_type' => 'primary',
        );
        return $form;
      }
    }

    Tham khảo: lập trình android
     

    Xem thêm các chủ đề tạo bởi nuongitq
    Đang tải...


Chia sẻ trang này