Drupal 8 表单和块视图

Drupal 8 form and view in block

我是 Drupal 的新手,在一个块中我想要一个带有 select 框和提交按钮的表单。 link中的每个选项都是link的内容页。即当用户select一个选项并点击提交按钮时它会重定向到其他节点页面。

对于上述要求,客户使用了 Drupal 7 的 Web 表单,我想克隆 Drupal 8 的要求。我尝试了 EForm,我能够创建一个表单,但我无法在 Block 中显示该表单布局和视图。

我不确定 Eform 模块是否适合我的要求。 你们能帮我在Drupal 8中满足上述要求我需要安装哪些模块吗?

好的,我不知道是否有任何模块可以完全满足您的需求,但您可以构建自己的自定义解决方案。在我看来主要有两种可能:

  • 创建一个带有 HTML 主体字段的自定义块类型,将您的 HTML 放在那里,您就完成了。 优点:容易做到,缺点:硬编码

  • 干净的方式:创建一个新的节点类型 and/or 一个新的类别,您将用于您的国家/地区节点。然后您将以编程方式创建一个块并查询该特定国家/地区类型的所有节点或具有 "country page" 类别的节点,无论您使用什么来组织这些节点。然后您只需从该数据创建一个表单并呈现它。 优点:动态的,只要您添加或删除该类型/类别的新节点,select 列表就会自行更新。 缺点: 刚开始比较费力

我个人建议使用选项 2。选项 1 更适合非常简单和 "stupid" 的要求,例如在您网站的多个位置显示一些硬编码 text/image,或者如果它是一些临时的东西竞选预告片,将在 1 周内结束,之后您将把它扔掉。

编辑:

实体查询:https://api.drupal.org/api/drupal/core!lib!Drupal.php/function/Drupal%3A%3AentityQuery/8

如何在 Drupal 8 中构建表单: https://www.drupal.org/node/2117411

要在模板中仅显示带有预处理的块,最好的方法是:

$block = \Drupal\block\Entity\Block::load('my_block_id');
$variables['My_region'] = \Drupal::entityManager()
      ->getViewBuilder('block')
      ->view($block);

然后在你的 page.html.twig 或 node.html.twig 或 xxx.html.twig 中使用你的变量 My_region 像这样:

{% if page.My_region %}
{{ page.My_region }}
{% endif %}

详情查看:

https://drupal.stackexchange.com/questions/171686/how-can-i-programmatically-display-a-block