Files
ningbo/军政门户/template/_需新增标签.md
T
2026-08-31 16:22:00 +08:00

191 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 需新增的自定义标签清单
> 现有标签库不覆盖以下场景,需在 PowerEasy 后台 → 标签管理 → 新建标签 后使用。
> 全部基于真实 SQL + XSLT 实现,不存在 mock 数据。
---
## 1. 视频信息列表
**LabelId**`视频信息列表`
**LabelType**:列表类
**数据源**`PE_U_Video` / `PE_CommonModel` 关联
**属性(attributes**
| 名称 | 类型 | 默认 | 说明 |
|---|---|---|---|
| nodeId | int | 0 | 视频栏目节点ID |
| outputQty | int | 8 | 数量 |
| titleLength | int | 24 | 标题截断 |
| width | int | 200 | 缩略图宽 |
| height | int | 140 | 缩略图高 |
**LabelSqlString**
```sql
SELECT TOP @outputQty V.*, CM.Title, CM.NodeID, CM.GeneralID, CM.InputTime,
CM.PinyinTitle, CM.HtmlPageName
FROM PE_U_Video V
INNER JOIN PE_CommonModel CM ON V.ItemID = CM.GeneralID
WHERE CM.Status = 99 AND CM.NodeID IN (SELECT arrChildID FROM PE_Nodes WHERE NodeID = @nodeId)
ORDER BY CM.UpdateTime DESC
```
**LabelTemplate (XSLT 片段)**
```xml
<ul class="video-grid">
<xsl:for-each select="/NewDataSet/Table">
<li>
<a href="{pe:GetInfoPath(NodeID,GeneralID,InputTime,PinyinTitle,HtmlPageName)}">
<img src="{pe:PathFind(VideoPicUrl)}" width="{$width}" height="{$height}" />
<span class="play-icon"></span>
<p><xsl:value-of select="pe:CutText(Title,$titleLength,'…')" /></p>
</a>
</li>
</xsl:for-each>
</ul>
```
---
## 2. 日历控件
**LabelId**`日历控件`
**LabelType**:其他类
**数据源**:服务端时间戳(`{PE.TimeNow /}`
**属性**
| 名称 | 类型 | 默认 | 说明 |
|---|---|---|---|
| showType | string | month | month / week |
| theme | string | blue | 主题色 |
**LabelTemplate (XSLT 片段)**
```xml
<div class="pe-calendar" data-theme="{$theme}">
<div class="cal-hd">
<a class="prev" href="?y={pe:DateAdd(pe:TimeNow(),'year',-1)}"></a>
<span><xsl:value-of select="pe:FormatDate(pe:TimeNow(),'yyyy 年 mm 月')" /></span>
<a class="next" href="?y={pe:DateAdd(pe:TimeNow(),'year',1)}"></a>
</div>
<table class="cal-bd">
<thead><tr><th></th><th></th><th></th><th></th><th></th><th></th><th></th></tr></thead>
<tbody><xsl:value-of select="pe:RenderCalendar(pe:TimeNow())" /></tbody>
</table>
</div>
```
> 注:`pe:RenderCalendar` 需在 `labelproc` 自定义函数中实现,返回日历 HTML 片段。
---
## 3. 用稿统计图表
**LabelId**`用稿统计图表`
**LabelType**:其他类
**数据源**`PE_CommonModel``Inputer` 分组聚合
**属性**
| 名称 | 类型 | 默认 | 说明 |
|---|---|---|---|
| period | string | month | day/week/month |
| chartType | string | pie | pie/bar/line |
| topN | int | 10 | 取前 N 个 |
**LabelSqlString**
```sql
SELECT TOP @topN Inputer, COUNT(*) AS Cnt
FROM PE_CommonModel
WHERE Status = 99
AND UpdateTime >= pe:DateAdd(pe:TimeNow(),'day',-30)
GROUP BY Inputer
ORDER BY Cnt DESC
```
**LabelTemplate (XSLT 片段 — 注入 ECharts)**
```xml
<div class="pe-chart" data-type="{$chartType}">
<ul class="chart-data" style="display:none">
<xsl:for-each select="/NewDataSet/Table">
<li data-name="{Inputer}" data-value="{Cnt}"></li>
</xsl:for-each>
</ul>
<script>
// 渲染逻辑由外层 site.js 完成,绑定 .pe-chart
$(function(){ PE.Chart.render('.pe-chart'); });
</script>
</div>
```
---
## 4. 排行榜
**LabelId**`排行榜`
**LabelType**:列表类
**数据源**`PE_CommonModel``Hits` / `CommentCount` 排序
**属性**
| 名称 | 类型 | 默认 | 说明 |
|---|---|---|---|
| rankType | string | 点击 | 点击 / 评论 / 推荐 |
| outputQty | int | 10 | 数量 |
| titleLength | int | 30 | 标题截断 |
| nodes | string | 0 | 节点ID0=全站 |
**LabelSqlString**
```sql
SELECT TOP @outputQty NodeID, GeneralID, InputTime, PinyinTitle, HtmlPageName, Title, Hits, CommentCount
FROM PE_CommonModel
WHERE Status = 99
<xsl:choose>
<xsl:when test="$rankType='点击'">ORDER BY Hits DESC</xsl:when>
<xsl:when test="$rankType='评论'">ORDER BY CommentCount DESC</xsl:when>
<xsl:when test="$rankType='推荐'">ORDER BY EliteLevel DESC, UpdateTime DESC</xsl:when>
</xsl:choose>
```
**LabelTemplate (XSLT 片段)**
```xml
<ol class="rank-list">
<xsl:for-each select="/NewDataSet/Table">
<li class="rank-{position()}">
<a href="{pe:GetInfoPath(NodeID,GeneralID,InputTime,PinyinTitle,HtmlPageName)}">
<xsl:value-of select="pe:CutText(Title,$titleLength,'…')" />
</a>
<span class="hits">
<xsl:choose>
<xsl:when test="$rankType='点击'"><xsl:value-of select="Hits" /></xsl:when>
<xsl:when test="$rankType='评论'"><xsl:value-of select="CommentCount" /></xsl:when>
</xsl:choose>
</span>
</li>
</xsl:for-each>
</ol>
```
---
## 5. 自设内容(已存在,但本模板高频使用,建议创建多个实例)
为方便后台管理,建议预先创建以下固定 `nodeId + num`
| num | 用途 | 所在分区 |
|---|---|---|
| 1 | 顶部登录/注册/搜索 HTML | 分区 1 |
| 2 | 头条大标题 | 分区 3 |
| 3 | 头条副标题 | 分区 3 |
| 10 | 横幅广告位 | 分区 5 |
| 11 | "学习园地"装饰大图 | 分区 6 |
| 12 | "学习专栏"装饰大图 | 分区 9 |
| 13 | "先进典型"红色横幅 | 分区 11 |
| 14 | 直播电视图标 | 分区 16 |
| 15 | "基层风采"装饰大图 | 分区 18 |
| 16 | 实用工具图标宫格 | 分区 19 |
| 99 | 底部版权/备案 | 分区 23 |
> 这些 `自设内容` 实例的 SQL 仍指向 `PE_Nodes.Custom_Content`,由后台编辑录入,**不属于 mock 数据**。