在Drupal 8中,我们可以使用编程方式设置节点编辑表单中的"node > Image entity reference"字段值。首先,我们需要创建一个自定义模块,并在模块的.module
文件中实现hook_form_alter()
钩子函数。以下是具体步骤:
modules
文件夹中创建一个新的文件夹,用于存放我们的自定义模块。命名该文件夹为"custom_module"(可以根据实际情况进行命名)。<?php
namespace Drupal\custom_module\Form;
use Drupal\Core\Form\FormStateInterface;
/**
* Implements hook_form_alter().
*/
function custom_module_form_alter(&$form, FormStateInterface $form_state, $form_id) {
if ($form_id == 'node_YOUR_CONTENT_TYPE_edit_form') {
// Get the node object.
$node = $form_state->getFormObject()->getEntity();
// Get the image entity reference field.
$image_field = $node->get('YOUR_IMAGE_FIELD');
// Set the image entity reference field value.
$image_field->target_id = YOUR_IMAGE_ENTITY_REFERENCE_ID;
// Save the node object.
$node->save();
}
}
请将代码中的"YOUR_CONTENT_TYPE"替换为实际的内容类型机器名称,"YOUR_IMAGE_FIELD"替换为实际的图像实体引用字段机器名称,"YOUR_IMAGE_ENTITY_REFERENCE_ID"替换为实际的图像实体引用的ID。
name: 'Custom Module'
type: module
description: 'Custom Module for Drupal 8'
package: Custom
core_version_requirement: ^8 || ^9
dependencies:
- node
<?php
use Drupal\Core\Routing\RouteMatchInterface;
/**
* Implements hook_preprocess_HOOK() for node templates.
*/
function custom_module_preprocess_node(&$variables) {
// Check if we are on the node edit form.
if ($variables['view_mode'] == 'edit') {
$node = $variables['node'];
// Load the CustomForm service.
$customForm = \Drupal::service('custom_module.custom_form');
// Set the image entity reference field value.
$customForm->setImageEntityReferenceValue($node);
}
}
<?php
namespace Drupal\custom_module\Service;
use Drupal\node\NodeInterface;
/**
* CustomForm service.
*/
class CustomFormService {
/**
* Set the image entity reference field value.
*/
public function setImageEntityReferenceValue(NodeInterface $node) {
// Get the image entity reference field.
$image_field = $node->get('YOUR_IMAGE_FIELD');
// Set the image entity reference field value.
$image_field->target_id = YOUR_IMAGE_ENTITY_REFERENCE_ID;
// Save the node object.
$node->save();
}
}
请将代码中的"YOUR_IMAGE_FIELD"替换为实际的图像实体引用字段机器名称,"YOUR_IMAGE_ENTITY_REFERENCE_ID"替换为实际的图像实体引用的ID。
services:
custom_module.custom_form:
class: Drupal\custom_module\Service\CustomFormService
arguments: ['@entity_type.manager']
modules
文件夹中找到"custom_module"模块,并启用该模块。完成以上步骤后,当您在Drupal 8节点编辑表单中设置"node > Image entity reference"字段值时,将使用编程方式设置该字段的值。请注意,在代码中的"YOUR_CONTENT_TYPE"、"YOUR_IMAGE_FIELD"和"YOUR_IMAGE_ENTITY_REFERENCE_ID"处,需要替换为实际的内容类型机器名称、图像实体引用字段机器名称和图像实体引用的ID。
领取专属 10元无门槛券
手把手带您无忧上云