我以为这很容易,但我很难过。
我有一个包含 id 字段的自定义内容类型。我使用基本页面模板呈现这些。
我编写了一个小模块,该模块创建了一个块,该块填充了来自外部 API 的数据。一切正常,除了我似乎无法弄清楚如何将 id 的值从给定页面的内容传递到我的模块,以便它可以进行 API 调用。
这将是直接 php 中的几行代码,在 Drupal 8 中它不会那么复杂,twig 可以吗?
我以为这很容易,但我很难过。
我有一个包含 id 字段的自定义内容类型。我使用基本页面模板呈现这些。
我编写了一个小模块,该模块创建了一个块,该块填充了来自外部 API 的数据。一切正常,除了我似乎无法弄清楚如何将 id 的值从给定页面的内容传递到我的模块,以便它可以进行 API 调用。
这将是直接 php 中的几行代码,在 Drupal 8 中它不会那么复杂,twig 可以吗?
我设法在这里找到了解决方案
我重新发布它以防它对其他人有用。
如果您正在生成自定义块,您可以通过块构建函数中的路由系统访问内容字段,如下所示:
public function build() {
if ($node = \Drupal::routeMatch()->getParameter('node')) {
$field_my_custom_value = $node->field_my_custom_value->value;
}
//do something with the variable, like make the API call
//Make sure to set the cache to the context or even to zero if you need
return array(
'#markup' => $this->t('my content to render'),
'#cache' => array(
'contexts' => ['contexts' => ['route']],
),
);
}
我认为你可以通过 HOOK_preprocess 达到你想要的。
利用:
YOUR_MODULE_preprocess_node(&$variables){ ... } or
YOUR_MODULE_preprocess_block(&$variables){ ... }
从内容类型访问您的变量并将其传递给您的函数 oder 模板。