mcpField
D
drupal-paragraphs

drupal-paragraphs

github.com/edutrul開発7350 回インストール21 週間前に更新
リポジトリ

drupal-paragraphs について

Drupal の Paragraphs エンティティとフィールドを扱う開発スキルです。コードでの作成、フォーム変更、レンダリング、Twig からの参照を解説します。

主な機能

  1. 01参照された Paragraph の取得
  2. 02Paragraphs のプログラム作成
  3. 03Paragraph フォームの変更
  4. 04Paragraph のレンダリングと Twig 参照

活用シーン

  1. 01ノードの Paragraph フィールド値の取得
  2. 02コードで Paragraph エンティティを作成
  3. 03バンドル別に Paragraph フォーム要素を変更
  4. 04Drupal や Twig で Paragraph コンテンツをレンダリング

インストール

コマンドをコピーしてターミナルで実行します。

$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();

Paragraphs のフォームを変更する

#[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 %}

一般的なバンドルチェックパターン

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;
  }
}

コメント