首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >D9不能在节点显示UI中更改字段区域或启用字段(例如,full、teaser等)。我可以以编程方式启用字段吗?

D9不能在节点显示UI中更改字段区域或启用字段(例如,full、teaser等)。我可以以编程方式启用字段吗?
EN

Stack Overflow用户
提问于 2022-06-28 22:28:55
回答 1查看 29关注 0票数 0

我收到了这个D9网站,我只是试着在节点显示中启用一些字段(例如,full、teaser等)。把它们分配到地区,但我做不到。加载gif将永远继续,当我单击submit时,它返回到禁用或原始的位置,这些节点显示中有很多字段。这可能是缓存问题。我在后台搞不出来。

是否有任何方式可以通过编程或在数据库中启用这些字段?

如何在下面的代码中为字段分配区域?

代码语言:javascript
复制
/** @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface $display_repository **/
$display_repository = \Drupal::service('entity_display.repository');

// Assign widget settings for the default form mode.
$display_repository->getFormDisplay('node', 'node_type')
   ->setComponent('field_name', [
        'region' => 'content',
   ])
   ->save();

// Assign display settings for the 'default' and 'full' view modes.
$display_repository->getViewDisplay('node', 'node_type')
   ->setComponent('field_name', [
        'label' => 'hidden',
        'region' => 'content',
   ])
   ->save();


$display_repository->getViewDisplay('node', 'node_type', 'full')
   ->setComponent('field_name', [
        'label' => 'hidden',
        'type' => 'string_textfield',
   ])
   ->save();

如果上面的代码是正确的,那么我可以使用什么函数钩子来实现这一点?

EN

回答 1

Stack Overflow用户

发布于 2022-06-30 19:39:32

以下几点对我有用:

模块/模块.routing.yml

代码语言:javascript
复制
module.fields:
  path: '/module/fields'
  defaults:
    _controller: '\Drupal\module\Controller\ModuleController::fields'
    _title: 'Enable fields in node after changing field type'
  requirements:
    _permission: 'access content'

模块/src/Controller/ModuleController.php

代码语言:javascript
复制
namespace Drupal\module\Controller;
use Drupal\Core\Controller\ControllerBase;
/**
 * Class ModuleController.
 ** @package Drupal\lotus\Controller
 */ class ModuleController extends ControllerBase
 {
    /**
      * Fields.
      * * @return string
      * Return Fields string.
      */
    public function fields()
    {

   $display_repository = \Drupal::service('entity_display.repository');

   // Assign widget settings for the default form mode.
   $display_repository->getFormDisplay('node', 'bundle')
   ->setComponent('field_name', [
        'region' => 'content',
   ])
   ->save();

   // Assign display settings for the 'default' and 'full' view modes.
   $display_repository->getViewDisplay('node', 'bundle')
   ->setComponent('field_name', [
        'region' => 'content',
   ])
   ->save();


   $display_repository->getViewDisplay('node', 'bundle', 'full')
   ->setComponent('field_name', [
        'region' => 'content',
   ])
   ->save();

       return ['#type' => 'markup',
       '#markup' => $this->t('Field field_name has been enabled!!'),];


    }
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72793803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档