📜  Drupal 9 如何将参数传递给自定义块 - PHP (1)

📅  最后修改于: 2023-12-03 15:30:34.376000             🧑  作者: Mango

Drupal 9 如何将参数传递给自定义块 - PHP

在 Drupal 9 中,我们可以创建自定义块来显示我们需要的内容。有时候我们可能需要将一些参数传递给我们的自定义块,以便根据参数不同来显示不同的内容。那么该如何将参数传递给自定义块呢?下面是具体实现方法。

首先,我们需要创建一个自定义块,并定义一个块插件类,该类需要实现 BlockBase 接口,如下所示:

<?php

namespace Drupal\my_module\Plugin\Block;

use Drupal\Core\Block\BlockBase;

/**
 * Provides a 'My Custom Block' block.
 *
 * @Block(
 *   id = "my_custom_block",
 *   admin_label = @Translation("My Custom Block"),
 * )
 */
class MyCustomBlock extends BlockBase {

  /**
   * {@inheritdoc}
   */
  public function build() {
    // Build the block content.
    $build = [
      '#theme' => 'my_custom_block',
      '#content' => $this->getCustomContent(),
    ];

    return $build;
  }

  /**
   * Gets the custom content for the block.
   *
   * @return string
   *   A string representing the custom content.
   */
  protected function getCustomContent() {
    // Get the parameters passed to the block.
    $parameters = $this->getConfiguration();

    // Use the parameters to generate the custom content.
    // ...

    return $custom_content;
  }

}

在上面的代码中,我们创建了一个名为 MyCustomBlock 的块插件类,并重写了 build() 方法,该方法返回要显示的内容。在 build() 方法中,我们调用了 getCustomContent() 方法来生成要显示的自定义内容,而 getCustomContent() 方法是从块配置中获取参数并使用它们来生成内容的。

然后,我们需要在 my_module.module 文件中定义我们的自定义块模板。在模板中,我们可以使用传递给块的参数来生成相应的内容。模板文件的位置应为 /templates/my-custom-block.html.twig,其内容如下所示:

{{ content }}
{% if parameters.foo %}
<h2>{{ parameters.foo }}</h2>
{% endif %}

在上面的模板中,我们使用 {{ content }} 变量来输出在块 build() 方法中生成的内容,并在特定条件下使用我们的块参数 foo 生成额外的标题。

最后,我们需要在管理员界面中为我们的自定义块定义配置表单。在上面的例子中,我们添加了一个名为 foo 的文本框作为配置表单中的参数,并根据需要添加其他参数。在 MyCustomBlock 类中添加以下方法即可:

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

    // Add the configuration options form elements.
    $form['foo'] = [
      '#type' => 'textfield',
      '#title' => t('Foo'),
      '#description' => t('Enter the value of foo.'),
      '#default_value' => $this->configuration['foo'] ?? '',
      '#weight' => '0',
    ];

    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function blockSubmit($form, &$form_state) {
    parent::blockSubmit($form, $form_state);

    // Save the configuration options.
    $values = $form_state->getValues();
    $this->configuration['foo'] = $values['foo'];
  }

在上面的代码中,我们重写了 blockForm() 方法和 blockSubmit() 方法,用来创建和保存我们的自定义块参数。

现在,我们已经完成了将参数传递给自定义块的全部过程。当我们在块配置中设置了参数后,块将使用这些参数生成相应的自定义内容,从而达到不同的显示效果。

总结

在 Drupal 9 中,我们可以使用自定义块来显示我们需要的内容,并通过传递参数来动态生成不同的内容。我们可以通过块插件类、自定义块模板和配置表单等方式来实现参数传递的功能。