2013-12-12 18 views
2

在TYPO3 CMS中,您可以使用定義的頁面輕鬆創建菜單。這在Neos和Typoscript2中如何工作?如何使用定義的頁面建立菜單

Typoscript1代碼爲:

Menu1 = HMENU 
Menu1 { 
    special = directory 
    special.value = 1,6,7 
    wrap = <div class="somemenu">|</div> 
} 

例如我有這個頁面結構:

  • 站點1
  • 站點2
  • Site3
    • Site4
    • Site5
    • Site6
  • Site7

,我想只包含站點1,Site6,Site7菜單。

我需要在頁腳菜單。

+0

我不確定「定義頁面」的含義。你能詳細說明你想達到什麼嗎? –

+0

我們想創建一個選定頁面的菜單。所以他想選擇幾個節點並創建一個菜單 - 沒有魔法。 – pgampe

回答

0

我找到了一種方法來創建一個帶有已定義頁面的菜單,方法是在每個頁面中添加一個複選框,以便我可以選擇要在菜單中顯示哪些頁面。

開始通過編輯NodeTypes.yaml,延長Page NODETYPE有這個額外的屬性

ui: 
    inspector: 
    groups: 
     'footernav': 
     label: 'Footer Menu' 
properties: 
    'footermenu': 
    type: boolean 
    defaultValue: FALSE 
    ui: 
     label: 'Show in footer?' 
     inspector: 
     group: 'footernav' 

之後,創建在同一文件中的FooterMenu NODETYPE。

'Vendor.Site:FooterMenu': 
    superTypes: ['TYPO3.Neos.NodeTypes:Menu'] 
    ui: 
    label: 'Footer Menu' 
    group: 'structure' 

創建它的typoscript文件。

prototype(Vendor.Site:FooterMenu) < prototype(TYPO3.Neos.NodeTypes:Menu) { 
    entryLevel = 1 
    templatePath = 'resource://Neos.Bootsite/Private/Templates/TypoScriptObjects/FooterMenu.html' 
} 

編輯Root.ts2文件,添加在Page對象

footermenu = ${q(node).property('footermenu')} 

最後但並非最不重要的,創建FooterMenu.html

{namespace neos=TYPO3\Neos\ViewHelpers} 
<ul> 
    <f:render section="itemsList" arguments="{items: items}" /> 
</ul> 

<f:section name="itemsList"> 
    <f:for each="{items}" as="item"> 
     <f:if condition="{item.node.properties.footermenu}"> 
      <neos:link.node node="{item.node}">{item.label}</neos:link.node> 
     </f:if> 
     <f:if condition="{item.subItems}"> 
      <f:render section="itemsList" arguments="{items: item.subItems}" /> 
     </f:if> 
    </f:for> 
</f:section> 
+0

對於缺失的功能,這是一個很好的解決方法! –

+0

一個很好的解決方案。我只有2個補充。我結合Jürgen的答案,所以我有一個指定的頁腳節點,所以定義我的頁腳導航。 (這部分:startingPoint = $ {q(站點).children('footermenu')。get(0)}) 除此之外,我添加頁腳導航一般頁面NodeType,這種方式我不必與內容元素混亂。 :) – Panade

+0

@barcasal如果您將模板文件放在'NodeTypes'而不是'TypoScriptObjects'文件夾中,那麼您不必在TS中提供路徑,因爲它是默認位置,Neos會自動查找。 – Reinis

0

感謝您對本不錯的主意。我甚至不會稱之爲解決方法。有了新手,我們必須以不同的方式思考......這個解決方案非常棒,直觀!

我有一些撞頭時刻,因爲我不明白的近地天體的工作方式......

我通常要添加像導航定位到佈局/模板基本元件。 我不明白,這個頁腳菜單會顯示爲一個元素,您可以在登錄時動態添加元素。

如果有人想知道他如何將此修補程序添加到模板,那麼用戶無法刪除它:

加入您的路線。ts2

page = Page { 
    head{ ... } 
    body{ 
    //... 

     parts.footermenu = Vendorname.Sitename:FooterMenu 

    //... 
    } 
} 

在您的模板文件中,例如(Vendorname.Sitename /個人/模板/頁/ default.html中):

{parts.footermenu -> f:format.raw()} 

在那裏的菜單應該會出現

旁註的位置:在這個例子中它必須是內以工作

0

我認爲最好的解決方案已經在Demo Package中。您可以創建一個頁面FooterMenu,您不想在頁面菜單上顯示爲普通頁面。將菜單頁面添加爲頁面/節點樹的子快捷方式節點。

然後在你的root.ts2

metaMenu = Menu { 
    entryLevel = 2 
    templatePath = 'resource://Vendor.PackageName/Private/Templates/TypoScriptObjects/FooterMenu.html' 
    maximumLevels = 1 
    startingPoint = ${q(site).children('footermenu').get(0)} 
} 

添加此Typo腳本創建菜單模板:

{namespace neos=TYPO3\Neos\ViewHelpers} 
<f:render section="itemList" arguments="{items: items}" /> 

<f:section name="itemList"> 
<nav class="nav" role="navigation"> 
    <ul class="nav nav-pills"> 
     <f:for each="{items}" as="item" iteration="menuItemIterator"> 
      <li class="{item.state}"> 
       <neos:link.node node="{item.node}">{item.label}</neos:link.node> 
      </li> 
     </f:for> 
    </ul> 
</nav> 
</f:section> 

最後認爲你需要做的IST放置footerMenu在你的頁面模板:

<div class="footer"> 
    {parts.footerMenu -> f:format.raw()} 
</div> 

此解決方案的唯一缺點是您必須使用快捷鍵和這不是我認爲SEO的最佳解決方案。由於重定向,頁面加載時間將會增加。但是,您無需擴展某些代碼,並可以在準備就緒時使用其他解決方案。

相關問題