mcpField
U
umbraco-block-editor-custom-view

umbraco-block-editor-custom-view

github.com/umbracoデザイン・UI27388 回インストール6 週間前に更新
リポジトリ

umbraco-block-editor-custom-view について

umbraco-block-editor-custom-viewは、Block List、Block Grid、Block RTEエディター内のブロック表示をカスタマイズするUmbraco拡張開発者向けスキルです。Web Componentの実装と、コンテンツタイプやエディターに応じた適用設定を案内します。

主な機能

  1. 01ブロック用カスタムビューの作成
  2. 02Block List、Block Grid、Block RTEへの対応
  3. 03コンテンツタイプによるビューの適用範囲指定
  4. 04ブロックのコンテンツと設定データへのアクセス

活用シーン

  1. 01特定のコンテンツブロック向けテーマ付きプレビューの設計
  2. 02Block Gridでのカスタムカード表示
  3. 03ブロックタイプごとの表示設定

インストール

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

$npx skills add https://github.com/umbraco/umbraco-cms-backoffice-skills --skill umbraco-block-editor-custom-view

インストール後、Claude Code で/umbraco-block-editor-custom-viewを入力して読み込まれたか確認します。

詳細

Umbraco Block Editor カスタムビュー

これは何ですか?

Block Editor カスタムビューは、Block List、Block Grid、または Block RTE エディター内のブロックに対して、カスタムの視覚的表現を提供します。デフォルトのブロックレンダリングの代わりに、ブロックコンテンツを specialized な方法で表示するカスタム Web Component を作成できます。これは、テーマ別のプレビュー、ドメイン固有の可視化、または拡張された編集エクスペリエンスに役立ちます。

ドキュメント

実装する前に、常に最新のドキュメントを取得してください:

関連する Foundation スキル

  • Umbraco Element: カスタムビュー要素を実装するために使用します
    • 参照スキル: umbraco-umbraco-element

参照例

Umbraco のソースには、動作する例が含まれています:

場所: /Umbraco-CMS/src/Umbraco.Web.UI.Client/examples/block-custom-view/

この例は、カスタムブロックビューの実装を示しています。本番環境のパターンとして参考にしてください。

ワークフロー

  1. ドキュメントを取得 - 上記の URL に対して WebFetch を使用します
  2. 質問する - どのブロックタイプですか?どのエディター(list、grid、RTE)ですか?
  3. ファイルを生成 - 最新のドキュメントに基づいてマニフェストとビュー要素を作成します
  4. 説明する - 何が作成されたか、どのようにテストするかを示します

最小限の例

マニフェスト (umbraco-package.json)
{
  "name": "My Block Views",
  "extensions": [
    {
      "type": "blockEditorCustomView",
      "alias": "My.BlockView.Hero",
      "name": "Hero Block View",
      "element": "/App_Plugins/MyBlocks/hero-view.js",
      "forContentTypeAlias": "heroBlock",
      "forBlockEditor": "block-list"
    }
  ]
}
マニフェスト (TypeScript)
import type { ManifestBlockEditorCustomView } from '@umbraco-cms/backoffice/extension-registry';

const manifest: ManifestBlockEditorCustomView = {
  type: 'blockEditorCustomView',
  alias: 'My.BlockView.Hero',
  name: 'Hero Block View',
  element: () => import('./hero-block-view.element.js'),
  forContentTypeAlias: 'heroBlock',
  forBlockEditor: ['block-list', 'block-grid'],
};

export const manifests = [manifest];
カスタムビュー要素 (hero-block-view.element.ts)
import { html, css, customElement, property } from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import type { UmbBlockEditorCustomViewElement, UmbBlockDataType } from '@umbraco-cms/backoffice/block';

@customElement('my-hero-block-view')
export class MyHeroBlockViewElement extends UmbLitElement implements UmbBlockEditorCustomViewElement {
  @property({ attribute: false })
  content?: UmbBlockDataType;

  @property({ attribute: false })
  settings?: UmbBlockDataType;

  render() {
    return html`
      <div class="hero-preview">
        <h2>${this.content?.headline ?? 'No headline'}</h2>
        <p>${this.content?.subheadline ?? ''}</p>
        ${this.content?.backgroundImage
          ? html`<div class="bg-indicator">Has background image</div>`
          : ''}
      </div>
    `;
  }

  static styles = css`
    :host {
      display: block;
    }

    .hero-preview {
      padding: var(--uui-size-space-4);
      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
      color: white;
      border-radius: var(--uui-border-radius);
      min-height: 100px;
    }

    h2 {
      margin: 0 0 var(--uui-size-space-2);
      font-size: 1.2em;
    }

    p {
      margin: 0;
      opacity: 0.8;
    }

    .bg-indicator {
      margin-top: var(--uui-size-space-2);
      font-size: 0.8em;
      opacity: 0.6;
    }
  `;
}

export default MyHeroBlockViewElement;

declare global {
  interface HTMLElementTagNameMap {
    'my-hero-block-view': MyHeroBlockViewElement;
  }
}
複数のコンテンツタイプ向けのビュー
const manifest: ManifestBlockEditorCustomView = {
  type: 'blockEditorCustomView',
  alias: 'My.BlockView.Cards',
  name: 'Card Blocks View',
  element: () => import('./card-block-view.element.js'),
  forContentTypeAlias: ['cardBlock', 'featureCard', 'testimonialCard'],
  forBlockEditor: 'block-grid',
};
エディター内のすべてのブロック向けのビュー
// Omit forContentTypeAlias to apply to all blocks
const manifest: ManifestBlockEditorCustomView = {
  type: 'blockEditorCustomView',
  alias: 'My.BlockView.Universal',
  name: 'Universal Block View',
  element: () => import('./universal-view.element.js'),
  forBlockEditor: 'block-list', // Only specify editor type
};
設定データへのアクセス
@customElement('my-styled-block-view')
export class MyStyledBlockViewElement extends UmbLitElement implements UmbBlockEditorCustomViewElement {
  @property({ attribute: false })
  content?: UmbBlockDataType;

  @property({ attribute: false })
  settings?: UmbBlockDataType;

  render() {
    // Settings contain block configuration (colors, layout options, etc.)
    const bgColor = this.settings?.backgroundColor ?? '#ffffff';
    const padding = this.settings?.padding ?? 'medium';

    return html`
      <div style="background-color: ${bgColor}" class="padding-${padding}">
        <h3>${this.content?.title}</h3>
        <div>${this.content?.text}</div>
      </div>
    `;
  }
}

マニフェストのプロパティ

プロパティ説明
forContentTypeAliasこのビューが適用されるコンテンツタイプのエイリアス
forBlockEditorエディタータイプ: block-list、block-grid、block-rte

要素のプロパティ

プロパティ型説明
contentUmbBlockDataTypeブロックのコンテンツデータ
settingsUmbBlockDataTypeブロックの設定データ

以上です!常に最新のドキュメントを取得し、例は最小限に保ち、完全に動作するコードを生成してください。

コメント