SA节点列表-跨站式
分享一下天津Wj项目一个特殊需求:有个主站专题栏目需要在全站群所有子站中同步显示,因此为了子站不重复添加栏目内容,特此产生此需求。从而达到主站添加,各子站同步显示的效果。制作时系统版本:3.2.3.0
@Power.VisualizationPartialView(new
{
Description = "节点列表-跨站式",
Parameters = new
{
NodeIdentifier = new { DisplayName = "节点标识符" },
Count = new { DisplayName = "输出数量", Type = "Int32", ControlType = "Integer", DefaultValue = 99999 },
Depth = new { DisplayName = "输出层数", Type = "Int32", ControlType = "Integer", DefaultValue = 2 },
CurrentDepth = new { DisplayName = "当前层数", Type = "Int32", ControlType = "Integer", DefaultValue = 1 }
}
})
@{
var nodeService = new NodeService();
int siteId=Param.siteId;//来源站点ID
string nodeIdentifier = Param.nodeIdentifier; //栏目标识符
int Count = Param.Count ?? 99999; //输出数量
var ShowPic = Param.ShowPic ?? false; //是否显示图片
var ShowLinkTip = Param.ShowLinkTip ?? true; // 是否显示链接提示
int ImageWidth = Param.ImageWidth ?? 200; // 图片宽度
int ImageHeight = Param.ImageHeight ?? 150; // 图片高度
int TitleLength = Param.TitleLength ?? 50; //标题长度
var siteServer = new SiteService().GetEntity(siteId);//来源站点信息
var currentSite = SiteService.CurrentSite();//当前站点信息
var parentChild = nodeService.GetNodeByIdentifier(nodeIdentifier,siteId);
var childNodes = nodeService.GetChildNodeList(parentChild).Take(Count);
}
@foreach (var childNode in childNodes.Where(n=>n.NodeStatus ==NodeStatus.Open))
{
string nodeUrl;
if (childNode.NodeType == NodeType.Link)
{
if(childNode.LinkUrl.StartsWith("http")){
nodeUrl = childNode.LinkUrl;
}
else if(childNode.LinkUrl.StartsWith("{Site")){
nodeUrl = Power.Url.NodeUrl(childNode);
}
else{
nodeUrl = Power.Url.SiteUrl(siteServer.Subdomain) + childNode.LinkUrl;
}
}
else
{
if(currentSite.ForegroundAccessMode==ForegroundAccessMode.UseCatalogDomain){
//判断当前子站是否子目录访问形式,如果是:替换生成的节点路径中的站点目录路径!
string siteIdentifier="/"+currentSite.Subdomain;
nodeUrl=Power.Url.SiteUrl(siteServer.Subdomain) + Power.Url.NodeUrl(childNode).Replace(siteIdentifier,"");
}
else{
nodeUrl = Power.Url.SiteUrl(siteServer.Subdomain) + Power.Url.NodeUrl(childNode);
}
}
var showLinkTip = ShowLinkTip ? childNode.NodeName : null;
var isBlank = childNode.IsBlank ? "_blank" : null;
<li>
@if (ShowPic)
{
<a class="pic" href="@nodeUrl" target="@isBlank">
@if (string.IsNullOrEmpty(childNode.FeaturedImage))
{
<img alt="@childNode.NodeName" src="~/Content/_Common/Base/img/nopic.gif" width="@ImageWidth" height="@ImageHeight" />
}
else
{
<img alt="@childNode.NodeName" src="@Power.Thumbnail(childNode.FeaturedImage.ToUrl(), ImageWidth, ImageHeight) " width="@ImageWidth" height="@ImageHeight" />
}
</a>
}
<a class="tit" href="@nodeUrl" target="@isBlank" title="@showLinkTip">@childNode.NodeName.CutText(TitleLength, "…")</a>
</li>
}
标签使用
@Power.Partial("子栏目列表-跨站式", new {siteId=1, nodeIdentifier = "xxjhs", Count = 4, ShowPic = true, ImageWidth=275, ImageHeight=90 })
其中
siteId=1, 节点来源的站点ID
nodeIdentifier = "xxjhs", 节点的父栏目标识符
语雀分享地址:
(密码:ndy0) 《节点列表-跨站式》
这个标签制作过程必须了解的系统的功能有:
1、各站点栏目路由生成规则
2、系统站点前台访问方式有几种(子域名、主站目录、自定义域名),它们之间的路由生成规则
3、节点栏目有几种类型:内容节点、单页节点、链接节点
4、每个类型的节点路由生成规则
5、链接节点有几种情况:
1)以”{SiteUrl:****}”开头的站群内链接
2)以”/”开头的当前站点链接
3)以“http:”开头的外部链接
以上了解完后才能在制作标签的时候根据这些情况追加相应的条件判断得出正确的内容。
用户登录
还没有账号?
立即注册