Umbraco 工作提要 rss
Umbraco job feed rss
好吧,这个问题已经让我抓狂了一段时间了。我正在为一个在 Umbraco 上有网站的客户工作,他们是一家招聘公司,他们使用的是来自 First Choice (The Access Group) 的数据库。我以前从未使用过 C#,但我从修复站点中学到了很多东西。我遇到的一个主要问题是他们想要一个 RSS Feed 用于他们的工作,这样他们就可以发布到社交媒体上,但是,工作都是通过一个宏从他们的数据库中发布的,技术上 'empty' 当查看但被宏填充。
我已经创建了几种 RSS 风格(甚至求助于 Umbraco 插件,但没有帮助),我已经进入服务器并确保我使用了正确的语法、命名约定和标题工作,但仍然没有任何效果。
现在,我几乎 100% 确定我只是在犯傻,但我被难住了。任何帮助将不胜感激。
这是我目前获得的提要代码:
@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@{
Layout = null;
Response.AddHeader("Content-Type", "text/xml");
const string DATE_FORMAT = "ddd, dd MMM yyyy hh:mm:ss zzz";
const string FEED_TITLE = "Millar Cameron Jobs";
const string FEED_DESCRIPTION = "Millar Cameron Jobs | Exciting job opportunites across the globe";
const string CREATOR_NAME = "tPegler";
const string CATEGORY = "Recruitment";
const string UPDATE_PERIOD = "daily";
const int UPDATE_FREQUENCY = 1;
const string LANGUAGE = "en-US";
const string HOME_PAGE_DOC_TYPE_ALIAS = "Home";
const string FEED_PARENT_DOC_TYPE_ALIAS = "TextPage";
const string ARTICLE_DOC_TYPE_ALIAS = "TextPage";
const string ARTICLE_TITLE_PROPERTY_ALIAS = "vm.JobDetails.Title";
const string ARTICLE_DATE_PROPERTY_ALIAS = "vm.JobDetails.Date";
const string ARTICLE_REFERENCE_ALIAS = "vm.JobDetails.JobRefNo";
const string ARTICLE_TERM_ALIAS = "vm.JobDetails.Term";
const string ARTICLE_LOCATION_ALIAS = "vm.JobDetails.Location";
const string ARTICLE_DESCRIPTION_ALIAS = "vm.JobDetails.Description";
const int CONTENT_PREVIEW_LENGTH = 500;
IPublishedContent homePage = Model.Content.AncestorOrSelf(1).DescendantsOrSelf().Where(x => x.DocumentTypeAlias == HOME_PAGE_DOC_TYPE_ALIAS).FirstOrDefault();
IPublishedContent feedParentPage = homePage.Descendants().Where(x => x.DocumentTypeAlias == FEED_PARENT_DOC_TYPE_ALIAS).FirstOrDefault();
IEnumerable<IPublishedContent> feedItems = feedParentPage.Descendants().Where(x => x.DocumentTypeAlias == ARTICLE_DOC_TYPE_ALIAS && x.IsVisible()).OrderByDescending(x => (DateTime)x.GetPropertyValue(ARTICLE_DATE_PROPERTY_ALIAS));
string siteUrl = homePage.UrlWithDomain();
string feedUrl = ((IPublishedContent)CurrentPage).UrlWithDomain();
}
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
<channel>
<title>@FEED_TITLE</title>
<atom:link href="http://www.millarcameron.com/jobs" rel="self" type="application/rss+xml" />
<link>http://www.millarcameron.com/jobs</link>
<description>@FEED_DESCRIPTION</description>
<language>@LANGUAGE</language>
<sy:updatePeriod>@UPDATE_PERIOD</sy:updatePeriod>
<sy:updateFrequency>@UPDATE_FREQUENCY</sy:updateFrequency>
@foreach (IPublishedContent item in feedItems.OrderBy(ARTICLE_DATE_PROPERTY_ALIAS + " desc"))
{
string articleDescription = Umbraco.Truncate(umbraco.library.StripHtml(item.GetGridHtml("contentGrid", "bootstrap3").ToString()), CONTENT_PREVIEW_LENGTH).ToString().Replace("…", "...");
@:<item>
<title>@(item.HasProperty(ARTICLE_TITLE_PROPERTY_ALIAS) ? item.GetPropertyValue<string>(ARTICLE_TITLE_PROPERTY_ALIAS) : item.Name)</title>
@:<link>
@umbraco.library.NiceUrlWithDomain(item.Id)
@:</link>
<dc:creator><![CDATA[@CREATOR_NAME]]></dc:creator>
<category><![CDATA[@CATEGORY]]></category>
<guid isPermaLink="false">@item.UrlWithDomain()</guid>
<description><![CDATA[@ARTICLE_LOCATION_ALIAS]]><![CDATA[@ARTICLE_TERM_ALIAS]]><![CDATA[@ARTICLE_DESCRIPTION_ALIAS]]></description>
@:</item>
}
</channel>
除实际项目外,一切都显示正常。根本找不到。
编辑//**
所以,我仍然完全没有运气,我已经尝试了我能想到的一切。这是您在查看工作板的源代码时获得的代码:
<div class='jobpage'>
<div ng-include="'/scripts/websuite/views/SearchResultsCtrl.html'"></div>
<div ng-controller="latestJobsSettingsCtrl" ng-init="vm.setProperties('','10')">
<div ng-include="'/scripts/websuite/views/LatestJobsCtrl.html'"></div>
</div>
这里是每个职位发布的代码。:
<div class='container'>
<div class="row clearfix">
<div class="col-lg-4 column">
<div class='jobpage'>
<div ng-include="'/scripts/websuite/views/SearchFiltersCtrl.html'"></div>
</div>
</div> <div class="col-lg-8 column">
<div class='jobpage'>
<div ng-include="'/scripts/websuite/views/JobDetailsCtrl.html'"></div>
<div ng-include="'/scripts/websuite/views/ApplyForJobCtrl.html'"></div>
就是这样。如果我检查页面,一切都在那里,但在源代码中却没有。我知道很难将动态创建的内容拉到 RSS 提要,因为它实际上不是 'there' 但必须有某种方式。
你的主页下面有多个TextPage类型的页面吗?除非包含 Feed 项的页面是列表中的第一个页面,否则您只会看到其他页面之一。
最简单的测试方法是将 feed parent 页面的 ID 放在 RSS 标题或其他内容中,看看它是否提取了正确的 ID(您可以在后台查看以获取parent 页面的 ID)。如果他们的 ID 不同,那就是问题所在。
我注意到 parent 页面和文章页面都是 TextPage 类型,通常您会有一个单独的 DocType 来使定位和查询更容易。
好吧,这个问题已经让我抓狂了一段时间了。我正在为一个在 Umbraco 上有网站的客户工作,他们是一家招聘公司,他们使用的是来自 First Choice (The Access Group) 的数据库。我以前从未使用过 C#,但我从修复站点中学到了很多东西。我遇到的一个主要问题是他们想要一个 RSS Feed 用于他们的工作,这样他们就可以发布到社交媒体上,但是,工作都是通过一个宏从他们的数据库中发布的,技术上 'empty' 当查看但被宏填充。
我已经创建了几种 RSS 风格(甚至求助于 Umbraco 插件,但没有帮助),我已经进入服务器并确保我使用了正确的语法、命名约定和标题工作,但仍然没有任何效果。
现在,我几乎 100% 确定我只是在犯傻,但我被难住了。任何帮助将不胜感激。
这是我目前获得的提要代码:
@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@{
Layout = null;
Response.AddHeader("Content-Type", "text/xml");
const string DATE_FORMAT = "ddd, dd MMM yyyy hh:mm:ss zzz";
const string FEED_TITLE = "Millar Cameron Jobs";
const string FEED_DESCRIPTION = "Millar Cameron Jobs | Exciting job opportunites across the globe";
const string CREATOR_NAME = "tPegler";
const string CATEGORY = "Recruitment";
const string UPDATE_PERIOD = "daily";
const int UPDATE_FREQUENCY = 1;
const string LANGUAGE = "en-US";
const string HOME_PAGE_DOC_TYPE_ALIAS = "Home";
const string FEED_PARENT_DOC_TYPE_ALIAS = "TextPage";
const string ARTICLE_DOC_TYPE_ALIAS = "TextPage";
const string ARTICLE_TITLE_PROPERTY_ALIAS = "vm.JobDetails.Title";
const string ARTICLE_DATE_PROPERTY_ALIAS = "vm.JobDetails.Date";
const string ARTICLE_REFERENCE_ALIAS = "vm.JobDetails.JobRefNo";
const string ARTICLE_TERM_ALIAS = "vm.JobDetails.Term";
const string ARTICLE_LOCATION_ALIAS = "vm.JobDetails.Location";
const string ARTICLE_DESCRIPTION_ALIAS = "vm.JobDetails.Description";
const int CONTENT_PREVIEW_LENGTH = 500;
IPublishedContent homePage = Model.Content.AncestorOrSelf(1).DescendantsOrSelf().Where(x => x.DocumentTypeAlias == HOME_PAGE_DOC_TYPE_ALIAS).FirstOrDefault();
IPublishedContent feedParentPage = homePage.Descendants().Where(x => x.DocumentTypeAlias == FEED_PARENT_DOC_TYPE_ALIAS).FirstOrDefault();
IEnumerable<IPublishedContent> feedItems = feedParentPage.Descendants().Where(x => x.DocumentTypeAlias == ARTICLE_DOC_TYPE_ALIAS && x.IsVisible()).OrderByDescending(x => (DateTime)x.GetPropertyValue(ARTICLE_DATE_PROPERTY_ALIAS));
string siteUrl = homePage.UrlWithDomain();
string feedUrl = ((IPublishedContent)CurrentPage).UrlWithDomain();
}
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
<channel>
<title>@FEED_TITLE</title>
<atom:link href="http://www.millarcameron.com/jobs" rel="self" type="application/rss+xml" />
<link>http://www.millarcameron.com/jobs</link>
<description>@FEED_DESCRIPTION</description>
<language>@LANGUAGE</language>
<sy:updatePeriod>@UPDATE_PERIOD</sy:updatePeriod>
<sy:updateFrequency>@UPDATE_FREQUENCY</sy:updateFrequency>
@foreach (IPublishedContent item in feedItems.OrderBy(ARTICLE_DATE_PROPERTY_ALIAS + " desc"))
{
string articleDescription = Umbraco.Truncate(umbraco.library.StripHtml(item.GetGridHtml("contentGrid", "bootstrap3").ToString()), CONTENT_PREVIEW_LENGTH).ToString().Replace("…", "...");
@:<item>
<title>@(item.HasProperty(ARTICLE_TITLE_PROPERTY_ALIAS) ? item.GetPropertyValue<string>(ARTICLE_TITLE_PROPERTY_ALIAS) : item.Name)</title>
@:<link>
@umbraco.library.NiceUrlWithDomain(item.Id)
@:</link>
<dc:creator><![CDATA[@CREATOR_NAME]]></dc:creator>
<category><![CDATA[@CATEGORY]]></category>
<guid isPermaLink="false">@item.UrlWithDomain()</guid>
<description><![CDATA[@ARTICLE_LOCATION_ALIAS]]><![CDATA[@ARTICLE_TERM_ALIAS]]><![CDATA[@ARTICLE_DESCRIPTION_ALIAS]]></description>
@:</item>
}
</channel>
除实际项目外,一切都显示正常。根本找不到。
编辑//**
所以,我仍然完全没有运气,我已经尝试了我能想到的一切。这是您在查看工作板的源代码时获得的代码:
<div class='jobpage'>
<div ng-include="'/scripts/websuite/views/SearchResultsCtrl.html'"></div>
<div ng-controller="latestJobsSettingsCtrl" ng-init="vm.setProperties('','10')">
<div ng-include="'/scripts/websuite/views/LatestJobsCtrl.html'"></div>
</div>
这里是每个职位发布的代码。:
<div class='container'>
<div class="row clearfix">
<div class="col-lg-4 column">
<div class='jobpage'>
<div ng-include="'/scripts/websuite/views/SearchFiltersCtrl.html'"></div>
</div>
</div> <div class="col-lg-8 column">
<div class='jobpage'>
<div ng-include="'/scripts/websuite/views/JobDetailsCtrl.html'"></div>
<div ng-include="'/scripts/websuite/views/ApplyForJobCtrl.html'"></div>
就是这样。如果我检查页面,一切都在那里,但在源代码中却没有。我知道很难将动态创建的内容拉到 RSS 提要,因为它实际上不是 'there' 但必须有某种方式。
你的主页下面有多个TextPage类型的页面吗?除非包含 Feed 项的页面是列表中的第一个页面,否则您只会看到其他页面之一。
最简单的测试方法是将 feed parent 页面的 ID 放在 RSS 标题或其他内容中,看看它是否提取了正确的 ID(您可以在后台查看以获取parent 页面的 ID)。如果他们的 ID 不同,那就是问题所在。
我注意到 parent 页面和文章页面都是 TextPage 类型,通常您会有一个单独的 DocType 来使定位和查询更容易。