umbraco-block-editor-custom-view について
umbraco-block-editor-custom-viewは、Block List、Block Grid、Block RTEエディター内のブロック表示をカスタマイズするUmbraco拡張開発者向けスキルです。Web Componentの実装と、コンテンツタイプやエディターに応じた適用設定を案内します。
主な機能
- 01ブロック用カスタムビューの作成
- 02Block List、Block Grid、Block RTEへの対応
- 03コンテンツタイプによるビューの適用範囲指定
- 04ブロックのコンテンツと設定データへのアクセス
活用シーン
- 01特定のコンテンツブロック向けテーマ付きプレビューの設計
- 02Block Gridでのカスタムカード表示
- 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 を作成できます。これは、テーマ別のプレビュー、ドメイン固有の可視化、または拡張された編集エクスペリエンスに役立ちます。
ドキュメント
実装する前に、常に最新のドキュメントを取得してください:
- メインドキュメント: https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/extending-overview/extension-types/block-custom-view
- Block Editor: https://docs.umbraco.com/umbraco-cms/model-your-content/property-editors/built-in-umbraco-property-editors/block-editor
- Foundation: https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/foundation
関連する Foundation スキル
- Umbraco Element: カスタムビュー要素を実装するために使用します
- 参照スキル:
umbraco-umbraco-element
- 参照スキル:
参照例
Umbraco のソースには、動作する例が含まれています:
場所: /Umbraco-CMS/src/Umbraco.Web.UI.Client/examples/block-custom-view/
この例は、カスタムブロックビューの実装を示しています。本番環境のパターンとして参考にしてください。
ワークフロー
- ドキュメントを取得 - 上記の URL に対して WebFetch を使用します
- 質問する - どのブロックタイプですか?どのエディター(list、grid、RTE)ですか?
- ファイルを生成 - 最新のドキュメントに基づいてマニフェストとビュー要素を作成します
- 説明する - 何が作成されたか、どのようにテストするかを示します
最小限の例
マニフェスト (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 |
要素のプロパティ
| プロパティ | 型 | 説明 |
|---|---|---|
content | UmbBlockDataType | ブロックのコンテンツデータ |
settings | UmbBlockDataType | ブロックの設定データ |
以上です!常に最新のドキュメントを取得し、例は最小限に保ち、完全に動作するコードを生成してください。
コメント
Markdown 対応