食人鱼CMS创建区域扩展
本文关键字:区域 扩展 创建 CMS 人鱼 食人 | 更新日期: 2023-09-27 18:13:51
我试图在食人鱼CMS中创建一个新的区域扩展。
长期来看,它会更复杂,但最初让它工作,我想tabcontainer是HTML区域的列表,这样我就可以用它来填充一个标签容器。这是我的TabContainer类和视图
TabContainer.cs
[Export(typeof(IExtension))]
[ExportMetadata("InternalId", "TabContainer")]
[ExportMetadata("Name", "Tab Region")]
[ExportMetadata("Type", ExtensionType.Region)]
[Serializable]
public class TabContainer : IExtension
{
public IList<HtmlRegion> Items { get; set; }
public TabContainer()
{
Items = new List<HtmlRegion>();
}
public virtual void Ensure(DataContext db) { }
public virtual void Init(object model) { }
public virtual void OnManagerSave(object model) { }
public virtual void OnManagerDelete(object model) { }
public void Ensure(object model) {}
public virtual void InitManager(object model)
{
}
public virtual object GetContent(object model)
{
return this;
}
TabContainer.cshtml
@model MatchtechGroup.PiranhaExtensions.Regions.TabContainer
<ul class="form">
</ul>
@Html.EditorFor(m => m.Items)
管理器识别我的新区域,我已经能够将其添加到我的起始页,我不确定如何初始化管理器,以便我可以在列表中添加和删除HTMLRegions,以及如何在已经保存时从DB检索它们。
我如何包含一个添加按钮(类似于附件选项卡),以便我可以通过管理器界面添加项目?
如果有一个更好的方法有一个基于列表的页面与内置组件,我是开放的建议,但我有点卡住了。
谢谢
在核心框架中没有很好的支持管理具有多个值的区域,例如可排序的附件列表。我已经在不同的项目中做了一些快速实现,但他们都依赖于大量的客户端javascript来创建新的区域,这是一个相当差的解决方案,因为它需要重复的逻辑。
然而,这是我尝试实现的一个功能,并且希望在即将到来的版本中实现。如果你感兴趣的话,我可以建立一个GitHub仓库来进行协作,我们可以把它作为一个附加模块来实现,直到它被包含在核心中。你对这个感兴趣吗?
对
哈坎
就像hap_kan说的
在核心框架中没有很好的支持管理具有多个值的区域,例如可排序的附件列表。
所以这不是最佳实践,但它确实奏效了:
TabRegion.cs:
using System;
using System.ComponentModel.Composition;
using System.ComponentModel.DataAnnotations;
using System.Web;
namespace Piranha.Extend.Regions
{
/// <summary>
/// Simple Tab region.
/// </summary>
[Export(typeof(IExtension))]
[ExportMetadata("InternalId", "TabRegion")]
[ExportMetadata("Name", "TabRegionName")]
[ExportMetadata("ResourceType", typeof(Resources.Extensions))]
[ExportMetadata("Type", ExtensionType.Region)]
[Serializable]
public class TabRegion : Extension
{
#region Properties
/// <summary>
/// Gets/sets the Tab title.
/// </summary>
[Display(ResourceType = typeof(Piranha.Resources.Extensions), Name = "TabRegionTitle")]
public string Title { get; set; }
/// <summary>
/// Gets/sets the Tab body.
/// </summary>
[Display(ResourceType = typeof(Piranha.Resources.Extensions), Name = "TabRegionBody")]
public string Body { get; set; }
#endregion
}
}
TabRegion.cshtml
@model Piranha.Extend.Regions.TabRegion
@{
}
<ul class="form">
<li>@Html.LabelFor(m => m.Title)
<div class="input">@Html.TextBoxFor(m => m.Title)</div>
@Html.ValidationMessageFor(m => m.Title)</li>
<li>@Html.LabelFor(m => m.Body)
<div class="input">@Html.TextAreaFor(m => m.Body, new { @class = "editor", @rows = 10 })</div>
@Html.ValidationMessageFor(m => m.Body)</li>
</ul>
最后添加到您的视图(index.cshtml):
<link rel="stylesheet" href="http://code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
<link rel="stylesheet" href="http://jqueryui.com/resources/demos/style.css">
<script>
$(function () {
$("#tabs").tabs();
});
</script>
<div id="tabs">
<ul>
@foreach (KeyValuePair<string, object> regions in Model.Regions)
{
if (regions.Value.ToString() == "Piranha.Extend.Regions.TabRegion")
{
dynamic tab = regions.Value;
if (tab.Title !=null)
{
<li> <a href="#tabs-@regions.Key">@tab.Title</a></li>
}
}
}
</ul>
@foreach (KeyValuePair<string, object> regions in Model.Regions)
{
if (regions.Value.ToString() == "Piranha.Extend.Regions.TabRegion")
{
dynamic tab = regions.Value;
if (tab.Title != null)
{
<div id="tabs-@regions.Key">
@Html.Raw(@tab.Body)
</div>}
}
}
</div>