2017-04-19 91 views
2

好吧,所以這個問題一直在推動我瘋了一陣子。我正在爲在Umbraco上有一個網站的客戶工作,他們是一家招聘公司,他們正在使用First Choice(訪問組)的數據庫。我以前從未使用過C#,但是我從修正網站中學到了很多東西。我遇到的一個主要問題是他們需要一個RSS Feed作爲他們的工作,所以他們可以發佈到社交媒體上,然而,Jobs是通過一個從技術上看是'空'的宏從他們的數據庫發佈的,由宏填充。Umbraco工作飼料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> 

一切都顯示,除了實際的項目罰款。他們根本找不到。

編輯// **

所以,我仍然有在所有與此沒有運氣,我已經試過所有我能想到的。這裏的收視源時,工作板,你得到的代碼:

<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提要中,因爲它實際上並不是「存在」,但必須有某種方式。

+0

那麼,這些文章實際上是Umbraco中的內容節點,還是它們在某處的自定義數據庫表中輸入?上面的代碼表示它們是內容節點,而您的描述表示後者。 –

+0

是的,你說工作項目來自外部數據庫,但上面的代碼迭代了第一個節點的所有發件人,它具有FEED_PARENT_DOC_TYPE_ALIAS的文檔類型...這將是Umbraco內容,而不是從外部數據庫加載的內容 – wingyip

+0

項目已發佈?檢查屬性選項卡是否實際編制索引(在緩存中)。你也可以在本地調試,或者這不可能嗎? – Mark

回答

0

在主頁下方是否有多個TextPage類型頁面?除非列表中第一個包含Feed項目的項目,否則您只需獲取其他頁面中的一個。

最簡單的方法來測試這是將飼料父頁的ID在RSS標題或什麼,看看它是否拉出正確的ID(你可以檢查在後臺獲得家長的ID你想要的頁面)。如果他們不是同一個ID,那就是問題所在。

我注意到,父頁面和文章頁面都是TextPage類型,通常你會有一個單獨的DocType來使定位和查詢變得更容易。

+0

有是的。不幸的是,我沒有製作網站,因此很多東西都已經設置好了,我可以找到解決辦法並修復,但這有點混亂。我從一家外包了公司的公司那裏繼承了它,把它外包給了一家公司,所以這只是混亂。 如果作業本身是動態加載的,RSS會不會從網頁上抓取信息?因爲源代碼在技術上是空的,而頁面本身是由腳本填充的。 –