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

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

【问题讨论】:

    标签: piranha-cms


    【解决方案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 从以下位置加载布局页面:

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

    希望对您有所帮助!

    问候

    /哈坎

    【讨论】:

    • HttpContext 需要 .Current 如果它在视图中。此外,演员应该是 Piranha.Models.Page,而不是 Piranha.Models.PageModel。 PageModel 不包含 SiteTreeId 属性。 :)
    • 谢谢!我一定度过了糟糕的一天:)
    猜你喜欢
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 2013-09-26
    • 2015-07-19
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    相关资源
    最近更新 更多