C# Umbraco作业提要rss

C# Umbraco作业提要rss,c#,angularjs,razor,rss,umbraco,C#,Angularjs,Razor,Rss,Umbraco,好吧,这个问题已经让我发疯有一段时间了。我为一位客户工作,他在Umbraco上有一个网站,他们是一家招聘公司,他们使用的是来自First Choice(访问组)的数据库。我以前从未使用过C#,但我从对网站进行修复中学到了很多。我面临的一个主要问题是,他们希望自己的工作有一个RSS提要,这样他们就可以发布到社交媒体上。然而,这些工作都是通过一个宏从他们的数据库中发布的,从技术上讲,这个宏在查看时是“空的”,但由宏填充 我已经创建了几种风格的RSS(甚至使用了一个Umbraco插件,但没有任何帮助)

好吧,这个问题已经让我发疯有一段时间了。我为一位客户工作,他在Umbraco上有一个网站,他们是一家招聘公司,他们使用的是来自First Choice(访问组)的数据库。我以前从未使用过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("&hellip;", "...");
        @:<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>
@继承Umbraco.Web.Mvc.UmbracoTemplatePage
@{
布局=空;
AddHeader(“内容类型”、“文本/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 |全球各地令人兴奋的就业机会”;
常量字符串创建者\u NAME=“tPegler”;
const string CATEGORY=“招聘”;
const string UPDATE_PERIOD=“daily”;
const int UPDATE_FREQUENCY=1;
const string LANGUAGE=“en-US”;
常量字符串主页\页面\文档\类型\别名=“主页”;
常量字符串提要\父项\文档\类型\别名=“TextPage”;
const string ARTICLE\u DOC\u TYPE\u ALIAS=“TextPage”;
const string ARTICLE\u TITLE\u PROPERTY\u ALIAS=“vm.JobDetails.TITLE”;
const string ARTICLE\u DATE\u PROPERTY\u ALIAS=“vm.JobDetails.DATE”;
const string ARTICLE\u REFERENCE\u ALIAS=“vm.JobDetails.JobRefNo”;
const string ARTICLE\u TERM\u ALIAS=“vm.JobDetails.TERM”;
const string ARTICLE\u LOCATION\u ALIAS=“vm.JobDetails.LOCATION”;
const string ARTICLE\u DESCRIPTION\u ALIAS=“vm.JobDetails.DESCRIPTION”;
const int CONTENT\u PREVIEW\u LENGTH=500;
IPPublishedContent homePage=Model.Content.AncestorOrSelf(1.degenantsorself()。其中(x=>x.DocumentTypeAlias==主页\文档\类型\别名)。FirstOrDefault();
IPPublishedContent feedParentPage=主页.子体()。其中(x=>x.DocumentTypeAlias==提要\父项\文档\类型\别名)。FirstOrDefault();
IEnumerable feedItems=feedParentPage.Substands()。其中(x=>x.DocumentTypeAlias==ARTICLE\u DOC\u TYPE\u ALIAS&&x.IsVisible()).OrderByDescending(x=>(DateTime)x.GetPropertyValue(ARTICLE\u DATE\u PROPERTY\u ALIAS));
字符串siteUrl=homePage.UrlWithDomain();
字符串feedUrl=((IPPublishedContent)CurrentPage).UrlWithDomain();
}
@提要标题
http://www.millarcameron.com/jobs
@FEED_说明
@语言
@更新周期
@更新频率
@foreach(feedItems.OrderBy(ARTICLE_DATE_PROPERTY_ALIAS+“desc”)中的IPPublishedContent项)
{
string articleDescription=Umbraco.Truncate(Umbraco.library.StripHtml(item.GetGridHtml(“contentGrid”、“bootstrap3”).ToString()),CONTENT\u PREVIEW\u LENGTH.ToString()。替换(“&hellip;”,“…”);
@:
@(item.HasProperty(ARTICLE\u TITLE\u PROPERTY\u ALIAS)?item.GetPropertyValue(ARTICLE\u TITLE\u PROPERTY\u ALIAS):item.Name)
@:
@umbraco.library.NiceUrlWithDomain(item.Id)
@:
@item.UrlWithDomain()
@:
}                                                                 

除实际项目外,所有项目都显示良好。他们根本找不到

编辑//**

所以,我在这件事上还是一点运气都没有,我已经想尽了一切办法。以下是查看工作板源代码时获得的代码:

<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提要,因为它实际上并不存在,但肯定有某种方式。

主页下面有多个文本页面类型的页面吗?除非其中包含提要项的页面是列表中的第一个页面,否则您只能看到其他页面中的一个

测试这一点最简单的方法是将提要父页面的id放在RSS标题或其他内容中,然后查看它是否提取了正确的id(您可以在后台检查以获取所需父页面的id)。如果他们不是同一个ID,那就是问题所在


我注意到,父页面和文章页面都是TextPage类型,通常您会为这两个页面设置一个单独的DocType,以便更轻松地定位和查询它们。

那么,文章实际上是Umbraco中的内容节点,还是自定义数据库表中的条目?您上面的代码表示它们是内容节点,而您的描述表示后者。是的,您说作业项来自外部数据库,但上面的代码迭代第一个节点的所有数据项,该节点的文档类型为FEED\u PARENT\u doc\u type\u ALIAS。。。这将是Umbraco内容,而不是从外部数据库加载的内容项目是否已发布?检查“属性”选项卡,看它们是否实际被索引(在缓存中)。您是否可以在本地进行调试?哦,您是否可以检查TextPage documenttype上是否有名为“umbracanaviHide”的属性。如果设置为true,则
x.IsVisible()
方法调用将返回false。作业是JobDetails的内容类型,通过宏加载到站点上,但作业内容是通过Umbraco上的脚本动态填充的,该脚本是隐藏的,只能从服务器访问。我的代码很糟糕,因为我试图尽可能地拼凑起来,以获得某种响应。在它创建