Orchard CMS - 使用字段扩展用户 - 在Blog Post中公开值

时间:2015-09-23 18:50:51

标签: orchardcms contenttypes

我想扩展用户内容定义,以包含可在现有博客的每篇博文上查看的简短生物和图片。我不确定最好的方法是什么。

我尝试使用这些字段扩展用户内容类型,但我似乎无法使用前端的形状跟踪工具在模型中看到它们。

有没有办法在博文中传递用户形状上的字段?如果是这样,最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

我也做了很多,并且总是包含一些自定义功能来实现这一目标。

有一种方法可以做到这一点OOTB,但它不是最好的IMO。您在任何内容项的CommonPart上始终拥有“所有者”属性,因此在您的博客帖子视图中,您可以执行以下操作:

@{
    var owner = Model.ContentItem.CommonPart.Owner;
}

<!-- This automatically builds anything that is attached to the user, except for what's in the UserPart (email, username, ..) -->
<h4>@owner.UserName</h4>
@Display(BuildDisplay((IUser) owner))

<!-- Or, with specific properties: -->
<h1>@T("Author:")</h1>
<h4>@owner.UserName</h4>
<label>@T("Biography")</label>
<p>
    @Html.Raw(owner.BodyPart.Text)
</p>
<!-- <owner content item>.<Part with the image field>.<Name of the image field>.FirstMediaUrl (assuming you use MediaLibraryPickerField) -->
<img src="@owner.User.Image.FirstMediaUrl" />

我经常做的是为此创建自定义驱动程序,因此您可以使用placement.info并遵循果园的最佳实践:

CommonPartDriver:

public class CommonPartDriver : ContentPartDriver<CommonPart> {

    protected override DriverResult Display(CommonPart part, string displayType, dynamic shapeHelper) {
        return ContentShape("Parts_Common_Owner", () => {
            if (part.Owner == null)
                return null;

            var ownerShape = _contentManager.BuildDisplay(part.Owner);
            return shapeHelper.Parts_Common_Owner(Owner: part.Owner, OwnerShape: ownerShape);
        });
    }
}

查看/ Parts.Common.Owner.cshtml:

<h1>@T("Author")</h1>
<h3>@Model.Owner.UserName</h3>

@Display(Model.OwnerShape)

Placement.info:

<Placement>
  <!-- Place in aside second zone -->
  <Place Parts_Common_Owner="/AsideSecond:before" />
</Placement>

答案 1 :(得分:1)

恕我直言,在Orchard用户上进行简单扩展的最佳方法是创建一个ContentPart,例如: &#34; UserExtensions&#34;,并将其附加到Orchard用户。 然后,此UserExtensions部分可以保存您的字段等。 这样,您的扩展程序与核心用户明确分开。

enter image description here

要在前端访问此部分及其字段,只需为要覆盖的特定视图添加备用字段。

  

有没有办法在博文中传递用户形状上的字段?

你想要展示一个漂亮的图片/ vita /博客文章作者的什么?如果是这样: 这可能是您的 Content-BlogPost.Detail.cshtml - 替代

$('#btnid').click( function() {
 var table = $('#tableid').tableToJSON();  
});

希望这有帮助,这是证据:

enter image description here