在 Piranha CMS 中访问全球站点区域

Posted

技术标签:

【中文标题】在 Piranha CMS 中访问全球站点区域【英文标题】:Accessing global site regions in Piranha CMS 【发布时间】:2014-09-23 03:39:27 【问题描述】:

我已向我的站点添加了一个全局站点区域,并在其中填充了一些内容。如何从页面视图和/或布局中读取此内容?

【问题讨论】:

【参考方案1】:

此功能在 WebPages 和 MVC 之间略有不同,原因是在 WebPages(如 WebForms)中,布局页面的模型与正在执行的实际页面不同。如果您使用网页,您只需在布局页面中首先添加以下行:

@inherits Piranha.WebPages.LayoutPage

这将自动加载布局页面模型和所有全局区域。

如果您使用的是 MVC,则无法自动完成,因为 Layout 没有模型。您可以在布局页面中简单地添加以下内容:

@
  Piranha.Models.PageModel global;

  if (HttpContext.Current.Items["Piranha_CurrentPage"] != null) 
    var current = 
      (Piranha.Models.Page)HttpContext.Current.Items["Piranha_CurrentPage"];

    global = Piranha.Models.PageModel.GetBySite(current.SiteTreeId);
   else 
    global = Piranha.Models.PageModel.GetBySite(Piranha.Config.SiteTreeId);
  

这个 sn-p 从以下位置加载布局页面:

    如果显示的是页面,则会加载该页面所在的站点树 如果是帖子,它会从当前站点加载站点树。

希望对您有所帮助!

问候

/哈坎

【讨论】:

HttpContext 需要 .Current 如果它在视图中。此外,演员应该是 Piranha.Models.Page,而不是 Piranha.Models.PageModel。 PageModel 不包含 SiteTreeId 属性。 :) 谢谢!我一定度过了糟糕的一天:)

以上是关于在 Piranha CMS 中访问全球站点区域的主要内容,如果未能解决你的问题,请参考以下文章

自定义区域中的 Piranha CMS 图像扩展

Piranha CMS 创建区域扩展

现有 MVC 5 站点上的 Piranha CMS

Piranha CMS:如何查找页面的子页面

自定义区域内的 Piranha CMS HtmlRegion 不保存内容

Piranha CMS 自定义实体