用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/umbraco/Umbraco-CMS-Backoffice-Skills --skill umbraco-search-provider命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | umbraco-search-provider |
| description | Implement search providers in Umbraco backoffice using official docs |
| version | 1.0.0 |
| location | managed |
| allowed-tools | Read, Write, Edit, WebFetch |
A Search Provider integrates custom search functionality into Umbraco's backoffice search bar. It enables users to search custom data sources alongside built-in content, media, and members. The provider implements a search method that returns paginated results matching the user's query.
Always fetch the latest docs before implementing:
Repository Pattern: For data access in search providers
umbraco-repository-patternContext API: For accessing contexts within the provider
umbraco-context-apiimport type { ManifestSearchProvider } from '@umbraco-cms/backoffice/extension-registry';
const manifest: ManifestSearchProvider = {
type: 'searchProvider',
alias: 'My.SearchProvider',
name: 'My Search Provider',
api: () => import('./my-search-provider.js'),
meta: {
label: 'My Items',
},
};
export const manifests = [manifest];
import type { UmbSearchProvider, UmbSearchResultItemModel, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
export class MySearchProvider extends UmbControllerBase implements UmbSearchProvider {
constructor(host: UmbControllerHost) {
super(host);
}
async search(args: UmbSearchRequestArgs) {
const { query } = args;
// Fetch results from your data source
const results = await this.#fetchResults(query);
return {
data: {
items: results,
total: results.length,
},
};
}
async #fetchResults(query: string): <[]> {
response = ();
data = response.();
data..( ({
: ,
: item.,
: item.,
: ,
: ,
}));
}
}
;
// Each result must conform to UmbSearchResultItemModel
interface UmbSearchResultItemModel {
entityType: string; // Entity type identifier
unique: string; // Unique ID
name: string; // Display name
icon?: string | null; // Icon to display
href: string; // URL to navigate when clicked
}
import type { UmbSearchProvider, UmbSearchResultItemModel, UmbSearchRequestArgs } from '@umbraco-cms/backoffice/search';
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
import { MyRepository } from './my-repository.js';
export class MySearchProvider extends UmbControllerBase implements UmbSearchProvider {
#repository: MyRepository;
constructor(host: UmbControllerHost) {
super(host);
this.#repository = new MyRepository(this);
}
async search(args: UmbSearchRequestArgs) {
const { data } = await this.#repository.search(args.query);
const items: UmbSearchResultItemModel[] = data?.items.map((item) => ({
: ,
: item.,
: item.,
: item. ?? ,
: ,
})) ?? [];
{
: {
items,
: data?. ?? ,
},
};
}
}
;
async search(args: UmbSearchRequestArgs) {
const { query, searchFrom } = args;
// searchFrom contains the entity to search from (if specified)
const parentId = searchFrom?.unique;
const results = await this.#fetchResults(query, parentId);
return {
data: {
items: results,
total: results.length,
},
};
}
| Property | Description |
|---|---|
query | The search term entered by user |
searchFrom | Optional entity to search from (for scoped searches) |
That's it! Always fetch fresh docs, keep examples minimal, generate complete working code.
Run tests from skill examples and generate a report (project)
Validate links and references in SKILL.md files using deterministic scripts
Umbraco backoffice extension customisation - complete working examples showing how extension types combine