尝试从Drupal 8上的自定义模块开发开始。没有以前的Drupal开发背景。在过去两周左右的时间内一直在阅读和观看一些材料。
我决定不敢做比“ Hello World”更多的“复杂”事情,但是我对如何真正地解决这个问题感到困惑。
这是我到目前为止所拥有的:
我假设我需要“挂接到”某个地方,那里的人的名单是从数据库中返回的。然后,我遍历数据,获取生日,计算年龄,将结果(年龄)重新粘贴到数据中,然后页面/视图将以某种方式显示。
我当然已经对如何执行此操作感到困惑?我需要挂在哪里?用什么API?然后,当然,我已经创建了一个视图,但是该视图没有“ age”字段-因为该字段是即时计算的。那我在哪里显示呢?
这么多问题...
如果有人会知道与此类似的一些教程,我将不胜感激。从Drupal的“自定义”方面开始很难。
感谢一些提示!
答案 0 :(得分:0)
您实际上可以执行此操作而无需自定义编码。为此,您可以使用以下任一模块field_token_value或computed_field。
它们都创建了一个字段,而没有给用户提供输入任何值的文本框。 这些字段的值是根据每个字段定义的预定义规则/自定义编码/令牌计算的。
最简单的方法是在theming
层上执行此操作,而不将此值存储在数据库中。您必须在hook_preprocess_node
THEMENAME.theme
function THEMENAME_preprocess_node(&$variables){
//install debug and kint to be able to use
//kint($variables);
$node = $variables["node"];
if($node->getType() == "CONTENTTYPE" && $node->hasField('field_date')){
//get date value something like "2018-09-07T21:35:30"
$date = $node->field_date->value;
//your logic and age calculations
// ...
$age = 35;
//set variable to use in node.html.twig based templates
$variables["person_age"] = $age;
}
}
为了获得有关可用功能的更多信息,请安装调试模块并使kint(调试的一部分)能够使用kint
函数查看变量
将node.html.twig
从您的自定义主题(或父主题或经典的核心主题)复制到您的THEMENAME/templates
文件夹中,并将其重命名为node--CONTENTTYPE.html.twig
。
您可以在其中包含您刚刚在过程中创建的变量。
person age: {{ person_age }}
请确保您清除了缓存,以使Drupal能够看到所有这些更改。
更多信息
要了解要覆盖哪些树枝模板,请参见here 有关twig and getting available variables的更多信息 也可以通过在先前的链接上启用调试模式来获取有关使用哪个树枝模板的更多信息。
我建议您拿起一本有关Drupal开发的书,以更具体的方式理解所有这些概念。