扩展字段
可分为站点扩展字段、节点扩展字段、内容模型扩展字段。
1. 站点扩展字段
获取站点扩展字段信息
// 引入站点扩展字段服务
@inject SiteExtendFieldService SiteExtendFieldService
// 获取站点扩展字段信息
@{
var currentSite = this.Context.GetCurrentSite();
// 获取站点的所有扩展字段数据。
var extendFields = SiteExtendFieldService.GetAll().ToList();
currentSite.ExtendContentObject.InitExtendContent(extendFields, currentSite.ExtendContent);
}
获取指定的扩展字段值
// 方法一
@currentSite.ExtendObject.字段名称
// 方法二
@currentSite.ExtendObject[字段名称]
循环获取站点所有扩展字段
// 引入站点扩展字段服务
@inject SiteExtendFieldService SiteExtendFieldService
// 循环获取所有扩展字段内容
<ul class="site-extend-list">
@foreach(var item in extendFields)
{
if (currentSite.ExtendContentObject.ContainsKey(item.ExtendFieldName)){
<li>
<span>字段显示名称:@item.ExtendFieldDisplayName</span>
<span>字段名称:@item.ExtendFieldName</span>
<span>字段值:@currentSite.ExtendContentObject[item.ExtendFieldName]</span>
</li>
}
}
</ul>
2. 节点扩展字段
获取节点扩展字段信息
// 引入节点扩展字段服务
@inject NodeExtendFieldService NodeExtendFieldService
@{
Node node = null;
if (ViewContext.RouteData.Values["area"].ToString().Contains("ContentManage"))
{
node = Model is Node ? Model : Model.Node;
}
// 获取节点的所有扩展字段数据。
var extendField = NodeExtendFieldService.GetAll();
node.ExtendContentObject.InitExtendContent(extendField, node.ExtendContent);
}
获取指定的扩展字段值
// 方法一
@node.ExtendObject.字段名称
// 方法二
@node.ExtendObject[字段名称]
循环获取节点所有扩展字段
<ul class="site-extend-list">
@foreach(var item in extendField)
{
<li>
<span>字段显示名称:@item.ExtendFieldDisplayName</span>
<span>字段名称:@item.ExtendFieldName</span>
<span>字段值:@currentSite.ExtendContentObject[item.ExtendFieldName]</span>
</li>
}
</ul>
全局调用案例
当设有Banner的图片扩展字段,在判断是否首页及非空后调用一级节点的Banner图片。
// 引入节点、节点扩展字段服务
@inject NodeService NodeService
@inject NodeExtendFieldService NodeExtendFieldService
@{
var IsHome = ViewBag.IsHome ?? false;
Node node = ViewBag.Node;
if (ViewContext.RouteData.Values["area"].ToString().Contains("ContentManage"))
{
node = Model is Node ? Model : Model.Node;
}
if (IsHome != true)
{
if (node != null)
{
var nodeService = NodeService;
// 筛选这个节点的扩展字段数据。
var extendField = NodeExtendFieldService.GetAll();
node.ExtendContentObject.InitExtendContent(extendField, node.ExtendContent);
if (!string.IsNullOrEmpty(node.ExtendObject.BannerImage))
{
<div class="pageBanner" style="background-image: url('@Power.ToUrl(node.ExtendObject.BannerImage)');"></div>
}
else
{
var topNode = nodeService.GetAncestorNode(node, 0);
topNode.ExtendContentObject.InitExtendContent(extendField, topNode.ExtendContent);
if (!string.IsNullOrEmpty(topNode.ExtendObject.BannerImage))
{
<div class="pageBanner" style="background-image: url('@Power.ToUrl(topNode.ExtendObject.BannerImage)');"></div>
}
else
{
<div class="pageBanner"></div>
}
}
}
else
{
<div class="pageBanner"></div>
}
}
}
3. 内容模型扩展字段
若在列表组件中调用内容模型的扩展字段,需先开启扩展字段,增加ExtendField = true
参数。
@Power.ArticleList("文章标题列表", new { Count = 5, Node = "xwzx", ExtendField = true })
获取指定的扩展字段值
// 方法一
@Model.ExtendObject.字段名称
// 方法二
@Model.ExtendObject[字段名称]
循环获取模型所有扩展字段
// 引入模型扩展字段服务
@inject ContentExtendFieldService ContentExtendFieldService
@{
var contentExtendFields = ContentExtendFieldService.GetMany(x => x.MoldId == Model.Node.MoldId.Value).ToList();
<ul class="site-extend-list">
@foreach (var item in contentExtendFields)
{
<li>
<span>字段显示名称:@item.ExtendFieldDisplayName</span>
<span>字段名称:@item.ExtendFieldName</span>
<span>字段值:@Model.ExtendObject[item.ExtendFieldName]</span>
</li>
}
</ul>
}
根据字段数据类型调用字段值
布尔型
// 三目运算符
@(Model.ExtendObject.fxk ? "正确" : "错误")
// 条件判断
@if (Model.ExtendObject.fxk)
{
<text>正确</text>
}
else
{
<text>错误</text>
}
日期时间
// 使用前需判断非空
@if (DateTime.Compare(Convert.ToDateTime(Model.ExtendObject.rqsj), new DateTime()) > 0)
{
<span>@Model.ExtendObject.rqsj.ToString("yyyy-MM-dd HH:mm:ss")</span>
}
整数型
@Model.ExtendObject.zs
// 运算
@(Model.ExtendObject.zsxllb + 2)
整数集合
@foreach (var item in Model.ExtendObject.sxlbk)
{
<text>@item</text>
}
浮点型
@Model.ExtendObject.fdx
// 运算
@(Model.ExtendObject.fdx * 2)
货币型
@Model.ExtendObject.je
// 运算
@(Model.ExtendObject.je / 2)
字符型
@Model.ExtendObject.wbxz
字符型(多行文本)
// pre带换行效果
<pre>@Model.ExtendObject.dhwb</pre>
// 移除html
@{
string dhwb = Model.ExtendObject.dhwb.ToString();
<text>@dhwb.RemoveHtml()</text>
}
字符型(编辑器)
// 转为html
@Power.ToHtml(Model.ExtendObject.bjq)
// 移除html
@{
string bjq= Model.ExtendObject.bjq.ToString();
<text>@bjq.RemoveHtml()</text>
}
字符型(单图片上传)
// 引入字符串扩展服务
@inject StringExtensionsHelper StringExtensionsHelper
// 图片文件
<img src="@StringExtensionsHelper.ToUrl(Model.ExtendObject.dtpwjsc)" />
// 生成缩略图
@if (!string.IsNullOrEmpty(Model.ExtendObject.dtpwjsc))
{
string dtpwjsc = StringExtensionsHelper.ToUrl(Model.ExtendObject.dtpwjsc);
<img src="@Power.Thumbnail(dtpwjsc, 320, 240)" />
}
字符型(单文件上传)
// 引入字符串扩展服务
@inject StringExtensionsHelper StringExtensionsHelper
// 附件下载
@if (!string.IsNullOrEmpty(Model.ExtendObject.dwjsc))
{
string dwjsc = Model.ExtendObject.dwjsc.ToString();
string[] dwjscs = dwjsc.Split("/");
<a href="@StringExtensionsHelper.ToUrl(dwjsc)" download="@dwjscs[dwjscs.Length - 1]">下载</a>
}
字符型(多图片上传)
// 引入字符串扩展服务
@inject StringExtensionsHelper StringExtensionsHelper
@if (!string.IsNullOrEmpty(Model.ExtendObject.dtpsc))
{
string dtpsc = Model.ExtendObject.dtpsc.ToString();
@if (dtpsc.StartsWith("[") && dtpsc.EndsWith("]"))
{
foreach (var item in JsonConvert.DeserializeObject<List<dynamic>>(dtpsc))
{
string url = item.PhotoUrl.ToString();
<img src="@Power.Thumbnail(StringExtensionsHelper.ToUrl(url), 320, 240)" alt="@item.PhotoIntro" title="@item.PhotoTitle" />
}
}
}
字符型(多文件上传)
// 引入字符串扩展服务
@inject StringExtensionsHelper StringExtensionsHelper
@if (!string.IsNullOrEmpty(Model.ExtendObject.dwjsc))
{
string dwjsc = Model.ExtendObject.dwjsc.ToString();
@if (dwjsc.StartsWith("[") && dwjsc.EndsWith("]"))
{
foreach (var item in JsonConvert.DeserializeObject<List<dynamic>>(dwjsc))
{
string url = item.PhotoUrl.ToString();
string[] urls = url.Split("/");
<a href="@StringExtensionsHelper.ToUrl(url)" download="@urls[urls.Length - 1]" title="@item.PhotoIntro">@item.PhotoTitle</a>
}
}
}
字符型(行政区划)
// 引入行政区划服务
@inject IRegionProvider IRegionProvider
@if (!string.IsNullOrEmpty(Model.ExtendObject.hzqh))
{
var hzqh = IRegionProvider.GetRegionById(Convert.ToInt32(Model.ExtendObject.hzqh));
<span>国家:@hzqh?.Country</span>
<span>省份:@hzqh?.Province</span>
<span>城市:@hzqh?.City</span>
<span>地区(县):@hzqh?.Area</span>
<span>邮政编码:@hzqh?.PostCode</span>
<span>区号:@hzqh?.AreaNumber</span>
<span>行政区划代码:@hzqh?.AreaCode</span>
}
字符型(地理位置)
@if (!string.IsNullOrEmpty(Model.ExtendObject.dlwz))
{
string dlwz = Model.ExtendObject.dlwz.Trim('P', 'O', 'I', 'N', 'T', '(', ')');
string[] dlwzs = dlwz.Split(' ');
<span>经度: @dlwzs[0]</span>
<span>纬度: @dlwzs[1]</span>
}
字符型(颜色)
<span style="color:@(Model.ExtendObject.ys);">颜色</span>
字符型(级联下拉列表)
@Model.ExtendObject.jlxllb