WebFuture系统如何实现跨点读取数据
WebFuture站群管理系统的内容管理本身就已经提供了跨站点引用数据的功能,但有的用户希望只想在主站首页直接读取子站的数据,打开列表页、内容页直接使用子站的模板。
如果使用节点引用功能,需要使用主站的模板进行展示,这时候,我们可以利用文章列表标签的 Site 参数来指定需要读取的站点。但这个读取方法目前还有些问题,按照默认文章标题列表标签的链接地址读取方式,同学们会发现点击标题的链接后,页面会报错。仔细查看后会发现,文章的路由地址是正确的,只是域名地址却是主站的,不是对应子站的域名地址,下面我们看下如果解决文章链接地址的问题。
首先,我们需要获取当前数据所在的站点,这里需要获取节点和站点的实体,要用到 NodeService 和 SiteService 这两个服务,如果视图顶部没有这两个依赖注入的代码,需要添加上去
@inject NodeService NodeService @inject SiteService SiteService
添加依赖注入代码后,我们再来看看如何获取站点的实体,由于文章内容没有提供当前文章所在站点ID的数据的读取方法,所以,只能先通过获取节点ID,再通过节点ID读取对应的站点ID。当然,也可以直接读取上面提到标签站点ID参数 Site,但有可能采用多值传递的方式,这样就会报错,所以最保险的方式就是根据当前文章获取对应的站点ID。
var nodeService = NodeService; var contentNode = nodeService.GetEntity(Model.NodeId.Value); var contentSite = SiteService.GetEntity(contentNode.SiteId);
获取了当前文章对应的站点实体,接下来的地址问题就好办了,可以通过站点的子域名生成站点的地址,然后加入到文章的链接地址里面。
在添加域名地址前,我们还需要做个小小的判断,如果是外链信息,或本站信息就不需要加入站点地址了。如果是其他站点的数据,就把 站点域名 + 文章链接地址 这样就可以得出完整的跨站调用数据的链接地址
var contentUrl = string.Empty; if(string.IsNullOrEmpty(Model.LinkUrl) && contentNode != null && SiteContext.Current.SiteId != contentNode.SiteId) { contentUrl = @Power.Url.SiteUrl(contentSite.Subdomain) + ContentRouteUrlHelperExtend.ContentUrl(Model); } else { contentUrl = ContentRouteUrlHelperExtend.ContentUrl(Model); }
用户登录
还没有账号?
立即注册