2017-04-19 8 views
2

좋아요,이 문제로 인해 지금 당황하고 있습니다. 나는 Umbraco에 사이트를 가지고있는 고객을 위해 일하고 있습니다. 그들은 채용 회사이며 First Choice (액세스 그룹)의 데이터베이스를 사용하고 있습니다. 이전에는 C#을 사용하지 않았지만 사이트를 수정하는 것만으로 많은 것을 배웠습니다. 내가 가지고있는 한 가지 주요한 문제는 그들이 소셜 미디어에 게시 할 수 있도록 RSS 피드를 자신의 작업에 맞게 만들려고하지만, 잡스는 모두 데이터베이스에서 볼 때 기술적으로 '비어있는'매크로를 통해 게시되지만 매크로로 채워집니다.Umbraco 작업 피드 rss

나는 (Umbraco 플러그인에 도움이되지 않은) 여러 가지 RSS를 만들었습니다. 서버에 가서 올바른 구문, 이름 지정 규칙 및 제목을 사용하고 있는지 확인했습니다. 일하지만 여전히 효과가 없습니다.

이제 저는 거의 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의 doc 유형을 가진 첫 번째 노드의 모든 항목을 반복합니다. 이는 Umbraco 콘텐츠가되고 외부 데이터베이스에서로드 된 콘텐츠가 아닙니다. – wingyip

+0

항목이 게시 되었습니까? 캐시에 실제로 색인이 생성 된 경우 속성 탭을 확인하십시오. 또한 로컬에서 디버그 할 수 있습니까 아니면 불가능합니까? – Mark

답변

0

홈 페이지 아래에 두 개 이상의 텍스트 페이지 유형 페이지가 있습니까? 피드 항목이있는 항목이 목록의 첫 번째 항목이 아니라면 다른 페이지 중 하나를 가져옵니다.

가장 쉬운 방법은 피드 상위 페이지의 ID를 RSS 제목 또는 다른 ID에 넣고 올바른 ID를 꺼내는 지 확인하는 것입니다 (백 오피스에서 부모의 ID를 확인할 수 있음) 원하는 페이지). ID가 같지 않으면 문제가 될 수 있습니다.

부모 페이지와 기사 페이지 모두 TextPage 유형이며, 일반적으로 두 가지 모두에 대해 별도의 DocType을 사용하므로 쉽게 타겟팅하고 쿼리 할 수 ​​있습니다.

+0

예 있습니다. 불행하게도 나는 사이트를 만들지 않았기 때문에 거기에있는 많은 것들이 설정되었고, 나는 work arounds와 fixes를 찾을 수있다. 그러나 그것은 다소 엉망이다. 나는 그것을 아웃소싱 한 회사에서 그것을 아웃소싱 한 회사에게 물려 받았다. 그래서 그것은 단지 혼란이다. 작업 자체가 동적으로로드되는 경우 RSS에서 페이지의 정보를 스크랩하는 데 문제가 있습니까? 왜냐하면 작업은 기술적으로 비어 있지만 페이지 자체는 스크립트에서 채워지기 때문입니다. –