orchardcms - Orchard Projection Page Default View -
i using orchard 1.8 , have created new content type (called pressrelease), query results , projection view query custom template (using url alternates in format list-projectionpage-url-pressrelease.cshtml
) , of working fine.
the 1 part has me stumped is, if use theme machine theme (untouched), projection view show in unordered list corresponding autoroute links individual contentitem entities, metadata , on. i'm trying figure out how access things such autoroute url specific item, metadata (create/publish dates) , on use things facebook share button. i'm trying recreate default view, albeit customizations.
here code 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 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) 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"> <!-- ** need autoroute url can fb share link **--> <div class="fb-share-button" data-href="" data-type="button_count"></div> </div> if (item != releases.last()) { <hr /> } } }
thoughts?
utilizing shape tracer (in conjunction @bertrand's assistance in comments above) helped me need. here final layout code went (which has super hacky stuff in it):
@using orchard.utility.extensions; @using system.linq @functions { public class pressrelease { public pressrelease() { this.attachments = new list<attachment>(); } private string _navigateurl = string.empty; 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 string navigateurl { { return string.format("{0}://{1}/{2}", httpcontext.current.request.url.scheme, httpcontext.current.request.url.authority, _navigateurl); } set { this._navigateurl = value; } } } public class attachment { public string filename { get; set; } public string path { get; set; } } } @{ //add list of dynamic objects 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, //this super hacky chopped version of html submitted summary body = item.contentitem.bodypart.text, navigateurl = item.contentitem.autoroutepart.path }; //load attachment(s) 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"><a href="@item.navigateurl">@item.title</a></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) { <a href="@attachment.path" target="_blank">@attachment.filename</a> if (attachment != item.attachments.last()) { <span>, </span> } } </div> } <div class="press-release-body"> @{ var body = new htmlstring(html.excerpt(item.body, 200).tostring().replace(environment.newline, "</p>" + environment.newline + "<p>")); <p>@body <a href="@item.navigateurl">(read more)</a></p> } </div> </div> <div class="social"> <div class="fb-share-button" data-href="@item.navigateurl" data-type="button_count"></div> </div> if (item != releases.last()) { <hr /> } } }
Comments
Post a Comment