📅  最后修改于: 2023-12-03 15:30:34.376000             🧑  作者: Mango
在 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 中,我们可以使用自定义块来显示我们需要的内容,并通过传递参数来动态生成不同的内容。我们可以通过块插件类、自定义块模板和配置表单等方式来实现参数传递的功能。