2015-09-17 57 views
1

我想從tt_content中生成一個頁面,得到如下所示的示例。僞代碼如下:Typo3:if typoscript中檢查是否有多個字段爲空的條件

if (header_link != "" && image != "") { 
    // build content with header_link and image 
    html = <div><a href="{header_link}"><img src="{img}" /></a></div> 
} else { 
    // build content without those fields 
    html = <div><h1>{header}</h1></div> 
} 

我有Typo腳本結構如下:

temp.myContent = CONTENT 
temp.myContent { 
    table = tt_content 
    select { 
     begin = 1 
     orderBy = sorting 
     where = (colPos = 2) 
    } 
    renderObj = COA 
    renderObj { 

     # PLANNING TO PLACE THE CONDITIONS SOMEWHERE HERE 

     # 10 = TEXT 
     # 10 { 
      ... 
     # } 
    } 
} 

我不知道爲什麼會出現在Typo3的官方網站沒有工作示例代碼,曾經擁有是說明。因此我再次依靠stackoverflow-ies。 :)

回答

1

請記住,TypoScript只是一個配置表而不是編程語言。更重要的是,你不能在任何物品中放置條件,因爲它要求所有條件必須在頂層解決。幸運的是,您至少有兩種解決方法,您可以創建自己的ContentElements讓我們將它命名爲MySepcialHeaderMySpecialHeaderWithImg,所以您可以在條件允許的情況下將其中的一個放在文本CE之前。如何實現這一目標?

GridElements extension

是相當有用的工具,你可以創建自己的CE-狀結構不接觸PHP中的任何一條線,全部是DB的記錄組內完成(CE後端佈局)和相應的Typo腳本。它可以與TemplaVoilà的FCEs比較,更多文檔herehere

自己真正 CTYPE

你也可以創建自己的ctypes即使用Extension Builder它多一點樂趣,但是當你用PHP對流體的意見操作它爲您提供了無限的可能,這就足夠了如果你要創建一個擴展,那麼你可以在其中添加無限數量的插件/ CType。

您將在other answer中找到關於此技術的更多信息。

0

這個TypoScript模板適用於TYPO3 CMS 6.2.17服務器。

page.30 = CONTENT 
page.30 { 
    table = tt_content 
    select { 
     orderBy = sorting 
     where = colPos = 0 
    } 
    renderObj = COA 
    renderObj { 
     wrap = <div>|</div> 
     10 = COA 
     10.10 = TEXT 
     10.10.if.isTrue.field = header_link 
     10.10.if.isFalse.field = image 
     10.10 { 
      stdWrap.data = header_link 
      stdWrap.typolink { 
       parameter.field = header_link 
       wrap = <img src="|" /> 
       ATagBeforeWrap = 1 
      } 
     } 
     10.20 = TEXT 
     10.20.if.isFalse.field = header_link 
     10.20.stdWrap.field = header 
     10.20.stdWrap.wrap = <h1>|</h1> 
    } 
} 

結果顯示tt_contentheader字段除非兩者header_linkimage字段測試爲陽性。以下是我在測試中使用的tt_content記錄的相關字段。 (該||表示空字段值。)

uid|hidden|Sorting|CType|header|image|deleted|colPos|header_link| 
29|0|256|text|Regular text element|NULL|0|0|| 
30|0|512|image|Image element|0|0|0|file:37| 
31|0|384|image|Image element with no image|0|0|0|| 
32|0|768|div|Divider|NULL|0|0|| 

我包括hiddendeleted列作爲一個提醒,因爲如果任一設定爲1,內容select功能不會返回記錄renderObj使用。還有對開始日期和結束日期的檢查,以及當前用戶是否具有對內容元素的訪問權限。見"select" in the TypoScript Reference manual

對象上的多個TypoScript if語句使用隱式邏輯AND連接在一起。請參閱"if" page in the TypoScript Reference及其具有"Explanation"兩個條件的「更復雜」示例。

這是涉及此測試的if邏輯。

Object page.30.renderObj.10.10. 
uid|header_link|if.isTrue.field = header_link|image|if.isFalse.field = image|Result 
29||no|NULL|no|not rendered 
30|file:37|yes|0|yes|rendered 
31||no|0|yes|not rendered 
32||no|NULL|no|not rendered 

Object page.30.renderObj.10.20. 
uid|header_link|if.isFalse.field = header_link|Result 
29||yes|rendered 
30|file:37|no|not rendered 
31||yes|rendered 
32||yes|rendered 

輸出顯示產生同樣的結果,如果我們只使用上爲page.30.renderObj.10.10對象if.isTrue.field = header_link測試,並留下關閉if.isFalse.field = image測試。但是,保持if.isFalse.field = image測試更接近應答請求,並說明檢查多個字段。