我正在使用 Orchard 1.8 并创建了一个新的内容类型(称为 PressRelease)、查询结果和投影以使用自定义模板查看查询(使用格式中的 URL Alternates List-ProjectionPage-url-PressRelease.cshtml
),所有这些都工作正常。
让我难过的一个部分是,如果我使用 The Theme Machine 作为我的主题(未触及),这个投影视图将显示在一个无序列表中,其中包含指向各个 ContentItem 实体、它们的元数据等的相应 AutoRoute 链接。我试图弄清楚我如何访问诸如特定项目的自动路由 URL、元数据(创建/发布日期)等内容,以便与 Facebook 共享按钮等内容一起使用。本质上,我正在尝试重新创建该默认视图,尽管进行了自定义。
这是代码List-ProjectionPage-url-PressRelease.cshtml
:
@using Orchard.Utility.Extensions;
@using System.Linq
@functions
{
public class PressRelease
{
public PressRelease()
{
this.Attachments = new List<Attachment>();
}
public string Title { get; set; }
public string Source { get; set; }
public DateTime PublishDate { get; set; }
public string Body { get; set; }
public List<Attachment> Attachments { get; set; }
}
public class Attachment
{
public string Filename { get; set; }
public string Path { get; set; }
}
}
@{
//add list of dynamic objects to strongly typed class
var releases = new List<PressRelease>();
foreach (var item in @Model.Items)
{
var release = new PressRelease
{
Title = item.ContentItem.TitlePart.Title,
Source = item.ContentItem.PressRelease.Source.Value,
PublishDate = item.ContentItem.PressRelease.Date.DateTime,
Body = item.ContentItem.BodyPart.Text
};
//load attachment(s) to class
var attachments = (Orchard.MediaLibrary.Fields.MediaLibraryPickerField)item.ContentItem.PressRelease.Attachment;
if (attachments.MediaParts.Count() > 0)
{
foreach (var part in attachments.MediaParts)
{
release.Attachments.Add(new Attachment { Filename = part.FileName, Path = part.MediaUrl });
}
}
releases.Add(release);
}
}
@{
foreach (var item in releases)
{
<div class="press-release">
<div class="press-release-title">@item.Title</div>
<div class="press-release-meta">
<span class="press-release-source">Source: @item.Source</span>
@if (item.PublishDate != DateTime.MinValue)
{
<span class="press-release-date">@item.PublishDate.ToShortDateString()</span>
}
</div>
@if (item.Attachments.Count() > 0)
{
<div class="press-release-attachments">
<span class="press-release-attachments-title">Attached: </span>
@foreach (var attachment in item.Attachments)
{
var linkText = attachment.Filename;
var url = attachment.Path;
@Html.Link(linkText, url);
if (attachment != item.Attachments.Last())
{
<span>, </span>
}
}
</div>
}
<div class="press-release-body">
<p>@Html.Raw(item.Body.Replace("\r\n", "<br />"))</p>
</div>
</div>
<div class="social">
<!-- ** This is where I need AutoRoute URL so I can do FB share link **-->
<div class="fb-share-button" data-href="" data-type="button_count"></div>
</div>
if (item != releases.Last())
{
<hr />
}
}
}
想法?