【发布时间】:2017-04-19 16:53:24
【问题描述】:
好的,所以这个问题已经让我发疯了一段时间了。我正在为一个在 Umbraco 上有网站的客户工作,他们是一家招聘公司,他们使用的是 First Choice(The Access Group)的数据库。我以前从未使用过 C#,但我从修复网站中学到了很多东西。我遇到的一个主要问题是他们想要一个 RSS 提要作为他们的工作,这样他们就可以发布到社交媒体上,但是,这些工作都是通过一个宏从他们的数据库中发布的,这个宏在查看时在技术上是“空的”,但是由宏填充。
我已经创建了几种风格的 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 提要中,因为它实际上并不“存在”,但必须有某种方式。
【问题讨论】:
-
那么,文章实际上是 Umbraco 中的内容节点,还是它们在某个自定义数据库表中的条目?您上面的代码表明它们是内容节点,而您的描述表明是后者。
-
是的,您说作业项来自外部数据库,但上面的代码遍历第一个节点的所有子节点,该节点的文档类型为 FEED_PARENT_DOC_TYPE_ALIAS ...这将是 Umbraco 内容,而不是加载的内容来自外部数据库
-
项目是否已发布?如果它们实际上被索引(在缓存中),请检查属性选项卡。也可以在本地调试还是不可以?
-
哦,您能检查一下您的 TextPage 文档类型上是否有一个名为“umbracoNaviHide”的属性。如果设置为 true,
x.IsVisible()方法调用将返回 false。 -
作业是 JobDetails 的内容类型,它通过宏加载到站点上,但作业的内容是从 Umbraco 上的脚本动态填充的,该脚本是隐藏的,只能从服务器访问。我的代码很糟糕,因为我试图拼凑我能得到的某种响应。在它创建提要的那一刻,就好像每个项目都是不可见的。我不知道它有多大可能会看到,因为内容本身不存在“现场”它只是从脚本生成的 html。实际的工作页面只是一个带有名为“JobDetailsCtrl.html”的脚本的 div。
标签: c# angularjs razor rss umbraco