【问题标题】:Piranha CMS Image Extenion in Custom Region自定义区域中的 Piranha CMS 图像扩展
【发布时间】:2013-09-26 05:49:49
【问题描述】:

我创建了一个自定义区域,现在我想向它添加一个图像。

如何在这个自定义区域中实现图像选择器?

我看到了一个示例 here,它向您展示了如何对核心扩展执行此操作,但我似乎无法让它与自定义区域一起使用。

public class AccordionItem
{
    public string Title { get; set; }
    public string Body { get; set; }
}

[Export(typeof(IExtension))]
[ExportMetadata("InternalId", "AccordionRegions")]
[ExportMetadata("Name", "Accordion")]
[ExportMetadata("ResourceType", typeof(Piranha.Resources.Extensions))]
[ExportMetadata("Type", ExtensionType.Region)]
[Serializable]
public class AccordionRegion : Extension
{
    [Display(Name = "Title")]
    public string Title { get; set; }

    public IList<AccordionItem> Items { get; set; }

    public AccordionRegion()
    {
        Items = new List<AccordionItem>();
    }
}

【问题讨论】:

    标签: c# asp.net-mvc piranha-cms


    【解决方案1】:

    我查看了您的代码并找到了一个关于如何将图像合并到您的 SlideItem 中的非常简单的解决方案。但首先是另一件事。

    [ExportMetadata("ResourceType", typeof(Piranha.Resources.Extensions))]
    

    此元数据字段在您想要获取在 Name 元字段中输入的键以启用基于文化的不同语言时才有效。由于核心中不存在 Accordion 键,因此它搞砸了,至少对我来说是这样。

    现在到图像上。为了让它工作,我只是将您的滑块项目修改为以下内容:

    public class AccordionItem
    {
        public string Title { get; set; }
        public string Body { get; set; }
        public ImageRegion Image { get ; set ; }
    
        public AccordionItem() {
            Image = new ImageRegion() ;
        }
    }
    

    这样我们可以重用核心项目中可用的 ImageRegion 的标准功能。由于您没有为您的视图提供源代码,因此我将它们模拟成这样。

    AccordionRegion.cshtml

    @model AccordionRegion
    
    <ul class="form">
        <li>@Html.LabelFor(m => m.Title)
            <div class="input">@Html.TextBoxFor(m => m.Title)</div>
        </li>
    </ul>
    @Html.EditorFor(m => m.Items)
    

    EditorTemplates/AccordionItem.cshtml

    @model AccordionItem
    
    <fieldset>
        <legend>An item</legend>
        <ul class="form">
            <li>@Html.LabelFor(m => m.Title)
                <div class="input">@Html.TextBoxFor(m => m.Title)</div>
            </li>
            <li>@Html.LabelFor(m => m.Body)
                <div class="input">@Html.TextAreaFor(m => m.Body)</div>
            </li>
        </ul>
        @Html.PartialFor("ImageRegion", m => m.Image)
    </fieldset>
    

    由于 ImageRegion 呈现大量 HTML,我将实现某种服务器端代码,该代码生成一个新的 AccordionItem 并使用 AJAX 将其发送回客户端,而不是在视图中硬编码大量 HTML/JS 内容。

    【讨论】:

      猜你喜欢
      • 2014-09-10
      • 2019-04-23
      • 2014-11-02
      • 1970-01-01
      • 2015-09-09
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 2021-07-16
      相关资源
      最近更新 更多