重要前提
安装AI Skills的关键前提是:必须科学上网,且开启TUN模式,这一点至关重要,直接决定安装能否顺利完成,在此郑重提醒三遍:科学上网,科学上网,科学上网。查看完整安装教程 →
umbraco-search-result-item by umbraco/umbraco-cms-backoffice-skills
npx skills add https://github.com/umbraco/umbraco-cms-backoffice-skills --skill umbraco-search-result-item搜索结果项是一个自定义组件,用于控制后台管理界面中单个搜索结果的显示方式。它允许您为特定实体类型自定义搜索结果的视觉呈现——显示额外信息、自定义图标、徽章或任何其他视觉元素。
在实施前请始终获取最新文档:
umbraco-umbraco-element广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
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];
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;
}
}
// 如果您的搜索提供程序返回扩展数据
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'],
};
// 用于自定义选择器搜索中的结果(内容选择器、媒体选择器等)
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 |
就是这样!请始终获取最新文档,保持示例简洁,生成完整可运行的代码。
每周安装量
70
代码仓库
GitHub 星标数
15
首次出现
2026年2月4日
安全审计
安装于
github-copilot51
cursor23
opencode21
codex21
gemini-cli19
amp19
A Search Result Item is a custom component that controls how individual search results are displayed in the backoffice search results. It allows you to customize the visual presentation of search results for specific entity types - showing additional information, custom icons, badges, or any other visual elements.
Always fetch the latest docs before implementing:
umbraco-umbraco-elementimport 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];
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'],
};
| Property | Description |
|---|---|
entityType | The entity type identifier |
unique | Unique identifier for the item |
name | Display name |
icon | Icon name (optional) |
href | URL to navigate when clicked |
That's it! Always fetch fresh docs, keep examples minimal, generate complete working code.
Weekly Installs
70
Repository
GitHub Stars
15
First Seen
Feb 4, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykWarn
Installed on
github-copilot51
cursor23
opencode21
codex21
gemini-cli19
amp19
Genkit JS 开发指南:AI 应用构建、错误排查与最佳实践
10,200 周安装