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
我是 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