在正文字段中写入的小模块
Posted
技术标签:
【中文标题】在正文字段中写入的小模块【英文标题】:Small module to write in a body field 【发布时间】:2021-03-19 07:11:15 【问题描述】:我正在尝试制作一个小模块。模块应该从某个节点拉出正文内容。这部分工作到目前为止。现在我会将这些内容准确地写回到当前节点的正文字段中。但是我脑子里有一个节点。如何将内容写入其中?也许有人可以在跳跃时帮助我。
我当前在模块中的代码:
`
<?php
use Drupal\node\Entity\Node;
use Drupal\Core\Form\FormStateInterface;
/**
* Implements hook_form_alter().
*/
function copy_fields_from_model_contract_form_alter(&$form, FormStateInterface $form_state, $form_id)
$nid = 6766;
$node_storage = \Drupal::entityTypeManager()->getStorage('node');
$node = $node_storage->load($nid);
$contract1 = $node->field_vertragsinhalt->value;
if ($form_id == 'node_buch_anlegen_edit_form')
dpm($form);
`
【问题讨论】:
【参考方案1】:不清楚您打算何时执行此加载/修改/保存操作。每次在网站上加载表单时,HOOK_form_alter(从上面)都会运行。
您上面的代码将在每次加载表单时加载 node(id:6766),然后如果它是 buch_anlegen 类型的任何节点的编辑表单,则会将您的表单打结。因此,首先,您要么将所有特定于此表单的逻辑放入 if 语句中,要么使用 hook_form_FORM_ID_alter。其次,我怀疑你每次更新 buch_anlegen 类型的节点时都想写 node(id:6766) 的 body 字段。
如果您想预先填充所有 buch_anlegen 节点编辑表单,那么您使用的是正确的钩子,但您需要修改 $form_state 变量中的值。
如果您想在保存时修改所有 buch_anlegen 节点,并向正文字段添加一些文本,您可以执行以下操作
// Implements hook_entity_presave().
function copy_fields_from_model_contract_entity_presave(Drupal\Core\Entity\EntityInterface $entity)
$body_value = $entity->body->getValue();
$body_value = $body_value . " Add this string to the body field".
$entity->body->value = $body_value; //set value for field
当然,这会在每次保存实体时添加字符串,因此您可能需要进行检查。
注意,你不必在这个钩子中调用 $entity->save(),因为它是一个 presave 钩子并且可能导致无限递归。但是,如果您尝试在其他地方执行此操作,则可以参考此链接:
https://www.heididev.com/how-programmatically-update-fields-value-drupal-8
【讨论】:
以上是关于在正文字段中写入的小模块的主要内容,如果未能解决你的问题,请参考以下文章
为啥向HttpServletResponse中写入相应正文之后,就无法用setHeader()方法改变响应头了。