2011-05-04 2 views
0

이의 내 구체적인 예와 함께 설명 보자다른 Sitecore 항목 유형에 다른 표시를 갖는

나는 3 가지 유형 (템플릿) 뉴스가 : 새로운, 외부 뉴스, 제품 출시를;

다른 방법으로 홈 페이지에 표시하고 싶습니다.

지금은 내 XSL에서 간단한 일을 해요 들어

:

<xsl:variable name="upcoming" select="./item[sc:formatdate(sc:fld('End Date',.),'yyyyMMdd') >= sc:formatdate($now,'yyyyMMdd')" /> 
<xsl:for-each select="$upcoming"> 
    <div> 
     <h2> 
      <sc:text field="Name" /> 
     </h2> 
     <p> 
      <sc:text field="Description" /> 
     </p> 
    </div> 
</xsl:for-each> 

주먹 솔루션은 그런 일 (분명 내가 진짜 구문을 모르는) 다음과 같습니다

<xsl:choose> 
    <xsl:when test="template = 'external news'"> 
     <!-- something --> 
    </xsl:when> 
</xsl:choose> 

그러나 더 나은 아직 객체 지향 접근 방식과 내 홈페이지 렌더링에서 호출 할 수있는 항목에 바인딩 된 make_body() 함수가있을 것입니다.

또는 Sitecore는 모든 페이지에 표시 할 수있는 항목의 렌더링을 수행하는 방법이 있습니다. 항목 자체가 처리하는 렌더링?

당신은 어떻게 생각하십니까? 내 홈 페이지에 마지막 뉴스 박스 원하는

:

<div class="last_news"> 
    <h2>Last News</h2> 
    <!-- Loop Goes here --> 
</div> 

내 다른 뉴스 유형 (신규, 외부


업데이트

난 내가 충분히 명확하지 않았다 생각 뉴스, 제품 출시)은 해당 상자에 표시 될 때 모양이 다릅니다.

new :

<div class="news"> 
    <h2><!-- title --></h2> 
    <p><!-- abridged text goes here --><p> 
    <a href="##news url##">read more</a> 
</div> 

외부 뉴스 :

<div class="news external"> 
    <img src="##website logo##"> 
    <h2><!-- title --></h2> 
    <p><!-- abridged text goes here --><p> 
    <a href="##external url##">read more on www.<!-- site name --></a> 
</div> 

제품 출시 :

<div class="news product_release"> 
    <div class="float_left"> 
     <img src="##product logo##"> 
     <a href="##product url##">Download now</a> 
     <a href="##product download url##">Download now</a> 
    </div> 
    <h2><!-- title --></h2> 
    <p><!-- abridged text goes here --><p> 
    <a href="##news url##">read more</a> 
</div> 

각 뉴스의 유형이있다는 다양한 분야

  • 새와 자신의 템플릿입니다 : 제목, 요약 된 텍스트, 전체 텍스트
  • 외부 뉴스 : 제목, 요약 된 텍스트, 외부 URL, 웹 사이트 선택 상자
  • 제품 출시 : 제목, 요약 된 텍스트, 전체 텍스트, 제품 선택 상자

나는 sublayouts (의 .ascx) 또는 렌더링을 할 수 있습니다 (.xslt) 각 유형에 대한하지만 이제는 내 루프에 표시하는 방법 알고 싶습니다.

루프 내에서 자리 표시자를 넣을 수 있으며 Sitecore는 자리 표시자가 현재 항목에서 사용해야 함을 알 수 있습니까?

+0

XSLT (yuck!)를 사용하거나 C#으로 전환하고 하위 레이아웃 (사용자 정의 컨트롤) 또는 컴파일 된 웹 컨트롤을 사용 하시겠습니까? –

+0

처리중인 XML 문서를 제공하지 않았습니다. 그렇게한다면 간단하고 우아한 XSLT 솔루션을 보여 드리겠습니다. –

+0

C#을 사용하고 하위 레이아웃을 사용하는 것이 좋습니다. xsl은 간단한 솔루션에 적합하지만 상황이 더욱 복잡해지면 하위 레이아웃/사용자 컨트롤로 전환 할 수 있습니다. – Younes

답변

0

이 답변은 전적으로 어떤 종류의 콘텐츠를 표시할지에 달려 있다고 생각합니다. 서식있는 텍스트 필드에 원하는 것을 넣고 항목에 고유하게 지정할 수 있습니다.이것은 지금까지 가장 쉬운 해결책이고 나에게 가장 이해하기 쉽습니다 ...하지만 어쩌면 나는 당신이하려고하는 것을 오해하고 있습니다. 그러나 저는 XSLT에서 이것을 원하지 않는다고 확신합니다. (물론 편향되어 있습니다 ... XSLT에서는 아무 것도하지 않습니다.)

템플릿에 따라 렌더링 동작을 다르게해야한다면, 코드 숨김으로 하위 레이아웃을 만들 것입니다. 비즈니스 로직을 XSL에 넣는 것은 의미가 없습니다.

자리 표시 자에 하위 레이아웃을 동적으로 추가 할 수도 있습니다. 결국 Sitecore가 백 엔드에서 수행하는 작업입니다. 따라서 표시 할 항목 (임의 항목)에 따라 특정 하위 레이아웃을 지정하고 데이터 소스를 항목에 설정할 수 있습니다.

3

어쩌면 내가 누락되었지만 템플릿 당 프레젠테이션에 바인딩 된 템플릿 당 렌더링 (xslt) og 하위 레이아웃 (asp.net 컨트롤)을 가질 수 없습니까?

다른 템플릿을 처리하기 위해 "복잡한"if 또는 switch를 만드는 대신 템플릿 하나를 간단하게 만드시겠습니까?

예 : 이러한 asp.net 컨트롤 거라고 :

  • 을 new.ascx
  • external_news.ascx
  • 그렇지 않으면 product_release.ascx

들이 많이 있기 때문에 당신이 1 XSLT를 사용하여 선호하는 경우 의 공유 필드를 사용하려면

<xsl:template match="*"> 

기능을 사용할 수 있습니다. 다음과 같이 작성하십시오 :

<xsl:template match="@template='external news'"> 
    //do something specific for the 'external news' template 
</xsl:template> 

그런 다음 각 템플릿에 대해 하나만 만들면됩니다. 경고 @ template = 'x'가 올바른 구문인지 100 % 확신 할 수 없습니다.

이 정보가 도움이되기를 바랍니다.

+0

당신의 주먹 솔루션 내가 무엇을 찾고 있어요,하지만 난 내 각각에 바인딩 된 sublayont 출력하는 방법을 찾을 것. – Kevthunder

+0

하지만 각 유형마다 다른 템플릿이 있습니까? 즉 템플릿 "외부 뉴스", "제품 출시"등 또는 다른 마스터/지점 만 있습니까? 다른 템플릿이있는 경우 표준 템플릿 하위 항목에 해당 템플릿의 레이아웃을 설정하기 만하면됩니다. 예. 레이아웃 (.aspx 페이지)에 하위 레이아웃 (.ascx) 또는 렌더링 (.xslt)을 추가하는 자리 표시자가 있습니다. 이것은 단지 표준 Sitecore 물건입니다. 다른 마스터/브랜치 (즉, 동일한 템플리트) 인 경우이를 상속하는 템플리트로 사용하는 것이 좋습니다. 예. 다른 템플릿이 상속 된 "마스터"뉴스 템플릿을 만듭니다. – Holger

+0

예, 각 템플릿에 대해 하위 레이아웃 (.ascx) 또는 렌더링 (.xslt)을 만들 수 있습니다. 그러나 나는 ** 하나 ** 아이템을 보여주고 싶지는 않지만 ** ** ** ** ** 아이템을 추가하고 싶지 않습니다. 나는 많은 항목의 목록 안에 그 하위 레이아웃을 어떻게 표시할지 모르겠다. – Kevthunder

관련 문제