mcpField
D
drupal-paragraphs

drupal-paragraphs

github.com/edutrul开发7350 次安装21 周前更新
代码仓库

关于 drupal-paragraphs

用于处理 Drupal Paragraphs 实体和字段的开发技能,涵盖代码创建、表单修改、渲染及 Twig 访问。

主要功能

  1. 01读取引用的段落
  2. 02以代码创建 Paragraphs
  3. 03修改段落表单
  4. 04渲染段落并在 Twig 中访问

适用场景

  1. 01读取节点段落字段值
  2. 02在代码中创建段落实体
  3. 03按 bundle 修改段落表单元素
  4. 04在 Drupal 或 Twig 中渲染段落内容

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/edutrul/drupal-ai --skill drupal-paragraphs

安装后在 Claude Code 中输入/drupal-paragraphs确认已加载。

附带文件README.md

详细介绍

Drupal Paragraphs

从节点访问 Paragraphs

use Drupal\paragraphs\Entity\Paragraph;

// Get all paragraphs from a field
$items = $node->get('field_content')->referencedEntities();
foreach ($items as $paragraph) {
  /** @var \Drupal\paragraphs\Entity\Paragraph $paragraph */
  $bundle = $paragraph->bundle();
  $value = $paragraph->get('field_text')->value;
}

// Get first paragraph
$paragraph = $node->get('field_content')->first()?->entity;

以编程方式创建 Paragraphs

$paragraph = Paragraph::create([
  'type' => 'text_block',
  'field_title' => 'My Title',
  'field_body' => [
    'value' => 'Body content',
    'format' => 'basic_html',
  ],
]);
$paragraph->save();

$node->get('field_content')->appendItem([
  'target_id' => $paragraph->id(),
  'target_revision_id' => $paragraph->getRevisionId(),
]);
$node->save();

修改 Paragraph 表单

#[Hook('field_widget_single_element_paragraphs_form_alter')]
public function fieldWidgetParagraphsFormAlter(array &$element, FormStateInterface $form_state, array $context): void {
  $paragraph = $element['#paragraph'];
  if ($paragraph->bundle() === 'text_block') {
    // Alter the text_block paragraph form element.
    $element['subform']['field_title']['#access'] = FALSE;
  }
}

渲染 Paragraphs

// Build render array for a paragraph
$view_builder = $this->entityTypeManager->getViewBuilder('paragraph');
$build = $view_builder->view($paragraph, 'default');

Twig 中的 Paragraph

{# Render paragraph field #}
{{ content.field_content }}

{# Iterate paragraphs #}
{% for item in content.field_content['#items'] %}
  {{ item.entity.field_text.value }}
{% endfor %}

常见的 Bundle 检查模式

foreach ($node->get('field_content')->referencedEntities() as $paragraph) {
  /** @var \Drupal\paragraphs\Entity\Paragraph $paragraph */
  switch ($paragraph->bundle()) {
    case 'text_block':
      // Handle text block.
      break;
    case 'image_block':
      // Handle image block.
      break;
  }
}

评论

支持 Markdown