尝试在Drupal 8上开始使用自定义模块开发。没有以前的Drupal开发背景。在过去2周左右的时间里一直在阅读和看一些材料。
除了“Hello World”之外,我决定敢于做一些“复杂”的事情,但我仍然坚持我将如何实现这一目标。
这是我到目前为止:
我假设我需要“挂钩”某个地方,从数据库中返回人员列表。然后我遍历数据,获取生日,计算年龄,将结果(年龄)粘贴回数据,然后页面/视图将以某种方式显示。
当然我已经被困在如何做到这一点?我需要在哪里挂钩?用什么API?然后,当然,我已经创建了一个视图,但视图没有“年龄”字段 - 因为这是动态计算的。那么我将在何处以及如何展示它?
这么多的问题...
如果有人知道一些与此类似的教程,我会很感激。开始使用Drupal的“自定义”方面有点艰难。
谢谢你的一些提示!
实际上,您可以在没有自定义编码的情为此,您可以使用以下任一模块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
。
在那里,您可以包含刚刚在proprocess中创建的变量。
person age: {{ person_age }}
确保清除缓存以便Drupal看到所有这些更改。
更多信息
要找出要覆盖的树枝模板,请参阅here有关twig and getting available variables的更多信息通过在以前的链接上启用调试模式,也可以获得有关使用哪个树枝模板的更多信息。
我建议你拿一本关于drupal开发的书,以更具体的方式理解所有这些概念。