umbraco-preview-app-provider について
Umbraco のコンテンツプレビュー メニューにカスタムアプリを追加するためのスキルです。プロバイダーマニフェストと UI 要素を定義し、プレビュー関連機能を実装する手順を案内します。
主な機能
- 01プレビューメニューへのアプリ追加
- 02プレビューアプリのマニフェスト定義
- 03カスタム UI 要素の実装
- 04プレビューコンテキストへの配慮
活用シーン
- 01プレビューでのデバイスシミュレーション
- 02プレビューでのアクセシビリティ確認
- 03コンテンツプレビューでの SEO 分析
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ umbraco/ umbraco-cms-backoffice-skills --skill umbraco-preview-app-providerインストール後、Claude Code で/umbraco-preview-app-providerを入力して読み込まれたか確認します。
詳細
Umbraco プレビューアプリプロバイダー
これは何ですか?
プレビューアプリプロバイダーは、Umbraco のプレビューウィンドウメニューにカスタム項目を追加します。コンテンツエディターがコンテンツをプレビューすると、これらのアプリがプレビューメニューに表示され、デバイスシミュレーション、アクセシビリティチェック、SEO 分析、その他のプレビュー関連ツールなどの追加機能を利用できるようになります。
ドキュメント
実装する前に、常に最新のドキュメントを取得してください:
- Foundation: https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/foundation
- Extension Registry: https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/extending-overview/extension-registry
- Umbraco Element: https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/foundation/umbraco-element
関連する Foundation スキル
-
Umbraco Element: UI コンポーネントを作成するための基底クラス
- 参照スキル:
umbraco-umbraco-element
- 参照スキル:
-
Context API: プレビュー状態にアクセスする場合
- 参照スキル:
umbraco-context-api
- 参照スキル:
ワークフロー
- ドキュメントを取得 - 上記の URL に対して WebFetch を使用します
- 質問する - どのようなプレビュー機能が必要ですか?どのような UI ですか?
- ファイルを生成 - 最新のドキュメントに基づいてマニフェスト + 要素を作成します
- 説明 - 作成された内容とテスト方法を示します
最小限の例
マニフェスト (manifests.ts)
import type { ManifestPreviewAppProvider } from '@umbraco-cms/backoffice/extension-registry';
export const manifests: Array<ManifestPreviewAppProvider> = [
{
type: 'previewApp',
alias: 'My.PreviewApp',
name: 'My Preview App',
element: () => import('./my-preview-app.element.js'),
},
];
要素の実装 (my-preview-app.element.ts)
import { html, customElement, state } from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
@customElement('my-preview-app')
export class MyPreviewAppElement extends UmbLitElement {
@state()
private _isActive = false;
override render() {
return html`
<uui-box headline="My Preview Tool">
<p>Custom preview functionality</p>
<uui-button
look=${this._isActive ? 'primary' : 'default'}
@click=${this.#toggle}
>
${this._isActive ? 'Disable' : 'Enable'}
</uui-button>
</uui-box>
`;
}
#toggle() {
this._isActive = !this._isActive;
// Apply your preview functionality
this.#applyPreviewMode(this._isActive);
}
#applyPreviewMode(active: boolean) {
// Access the preview iframe or apply styles
const previewFrame = document.querySelector('iframe.preview-frame');
if (previewFrame && active) {
// Apply custom preview mode
}
}
}
export default MyPreviewAppElement;
デバイスシミュレーターの例
import { html, customElement, state } from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
@customElement('device-preview-app')
export class DevicePreviewAppElement extends UmbLitElement {
@state()
private _selectedDevice = 'desktop';
private _devices = [
{ name: 'desktop', width: '100%', label: 'Desktop' },
{ name: 'tablet', width: '768px', label: 'Tablet' },
{ name: 'mobile', width: '375px', label: 'Mobile' },
];
override render() {
return html`
<uui-box headline="Device Preview">
${this._devices.map(
(device) => html`
<uui-button
look=${this._selectedDevice === device.name ? 'primary' : 'default'}
@click=${() => this.#selectDevice(device)}
>
${device.label}
</uui-button>
`
)}
</uui-box>
`;
}
#selectDevice(device: { name: string; width: string }) {
this._selectedDevice = device.name;
// Dispatch event to resize preview
this.dispatchEvent(
new CustomEvent('preview-resize', {
detail: { width: device.width },
bubbles: true,
composed: true,
})
);
}
}
export default DevicePreviewAppElement;
インターフェースリファレンス
interface ManifestPreviewAppProvider extends ManifestElement {
type: 'previewApp';
}
ベストプラクティス
- メニューに表示されるため、UI はコンパクトに保つ
- 明確な有効/無効状態を提供する
- プレビューコンテキストと利用可能な iframe を考慮する
- 素早く認識できる適切なアイコンを使用する
以上です!常に最新のドキュメントを取得し、例は最小限に保ち、完全に動作するコードを生成してください。
コメント
Markdown 対応