mcpField
U
umbraco-search-result-item

umbraco-search-result-item

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

umbraco-search-result-item について

Umbraco のバックオフィス検索結果をエンティティタイプ別にカスタマイズする開発者向けスキルです。最新ドキュメントを確認し、通常検索やピッカー検索の結果項目を実装する手順と例を示します。

主な機能

  1. 01エンティティ別の結果表示
  2. 02アイコン、バッジ、詳細情報の追加
  3. 03マニフェストと要素の生成
  4. 04ピッカー検索結果への対応

活用シーン

  1. 01検索結果に追加情報を表示
  2. 02特定のエンティティタイプの結果を調整
  3. 03コンテンツやメディアのピッカー結果を変更

インストール

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

$npx skills add https://github.com/umbraco/umbraco-cms-backoffice-skills --skill umbraco-search-result-item

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

詳細

Umbraco 検索結果アイテム

これは何ですか?

検索結果アイテムは、バックオフィスの検索結果で個々の検索結果がどのように表示されるかを制御するカスタムコンポーネントです。特定のエンティティタイプに対する検索結果の視覚的な表示をカスタマイズできます。追加情報、カスタムアイコン、バッジ、その他の視覚要素を表示できます。

ドキュメント

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

関連する基礎スキル

  • Umbraco Element: 結果アイテムの要素を実装するために使用します
    • 参照スキル: umbraco-umbraco-element

ワークフロー

  1. ドキュメントを取得 - 上記の URL に対して WebFetch を使用します
  2. 質問する - どのエンティティタイプですか?どのような追加情報を表示しますか?
  3. ファイルを生成 - 最新のドキュメントに基づいてマニフェストと要素を作成します
  4. 説明 - 作成した内容とテスト方法を示します

最小限の例

マニフェスト (manifests.ts)
import type { ManifestSearchResultItem } from '@umbraco-cms/backoffice/extension-registry';

const manifest: ManifestSearchResultItem = {
  type: 'searchResultItem',
  alias: 'My.SearchResultItem',
  name: 'My Search Result Item',
  element: () => import('./my-search-result-item.element.js'),
  forEntityTypes: ['my-entity'],
};

export const manifests = [manifest];
要素の実装 (my-search-result-item.element.ts)
import { html, css, customElement, property } from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
import type { UmbSearchResultItemModel } from '@umbraco-cms/backoffice/search';

@customElement('my-search-result-item')
export class MySearchResultItemElement extends UmbLitElement {
  @property({ type: Object })
  item?: UmbSearchResultItemModel;

  render() {
    if (!this.item) return html``;

    return html`
      <a href=${this.item.href} class="result-item">
        <umb-icon name=${this.item.icon ?? 'icon-document'}></umb-icon>
        <div class="content">
          <span class="name">${this.item.name}</span>
          <span class="type">${this.item.entityType}</span>
        </div>
      </a>
    `;
  }

  static styles = css`
    .result-item {
      display: flex;
      align-items: center;
      gap: var(--uui-size-space-3);
      padding: var(--uui-size-space-3);
      text-decoration: none;
      color: inherit;
    }

    .result-item:hover {
      background: var(--uui-color-surface-alt);
    }

    .content {
      display: flex;
      flex-direction: column;
    }

    .name {
      font-weight: 500;
    }

    .type {
      font-size: var(--uui-type-small-size);
      color: var(--uui-color-text-alt);
    }
  `;
}

export default MySearchResultItemElement;

declare global {
  interface HTMLElementTagNameMap {
    'my-search-result-item': MySearchResultItemElement;
  }
}
拡張データを含む結果アイテム
// If your search provider returns extended data
interface MySearchResultModel extends UmbSearchResultItemModel {
  description?: string;
  status?: string;
  updatedDate?: string;
}

@customElement('my-search-result-item')
export class MySearchResultItemElement extends UmbLitElement {
  @property({ type: Object })
  item?: MySearchResultModel;

  render() {
    if (!this.item) return html``;

    return html`
      <a href=${this.item.href} class="result-item">
        <umb-icon name=${this.item.icon ?? 'icon-document'}></umb-icon>
        <div class="content">
          <span class="name">${this.item.name}</span>
          ${this.item.description
            ? html`<span class="description">${this.item.description}</span>`
            : ''}
          <div class="meta">
            ${this.item.status
              ? html`<uui-tag>${this.item.status}</uui-tag>`
              : ''}
            ${this.item.updatedDate
              ? html`<span class="date">${this.item.updatedDate}</span>`
              : ''}
          </div>
        </div>
      </a>
    `;
  }
}
複数のエンティティタイプに対する結果アイテム
const manifest: ManifestSearchResultItem = {
  type: 'searchResultItem',
  alias: 'My.SearchResultItem.Custom',
  name: 'Custom Search Result Item',
  element: () => import('./custom-result-item.element.js'),
  forEntityTypes: ['my-entity-a', 'my-entity-b', 'my-entity-c'],
};
ピッカー検索結果アイテム
// For customizing results in picker search (content pickers, media pickers, etc.)
import type { ManifestPickerSearchResultItem } from '@umbraco-cms/backoffice/extension-registry';

const manifest: ManifestPickerSearchResultItem = {
  type: 'pickerSearchResultItem',
  alias: 'My.PickerSearchResultItem',
  name: 'My Picker Search Result',
  element: () => import('./my-picker-result.element.js'),
  forEntityTypes: ['my-entity'],
};

アイテムモデルのプロパティ

プロパティ説明
entityTypeエンティティタイプの識別子
uniqueアイテムの一意の識別子
name表示名
iconアイコン名 (任意)
hrefクリック時に移動する URL

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

コメント