2013-07-25 1 views
0

Моя папка документ структура, как показано нижеКак создать элемент подменю в Docpad?

index.html 
post/ 
    post1.html 
    post2.html 
pages/ 
    about.html 
    interior.html 
    exterior.html 
    gallery.html 
    post.html //listing blog post 
    contact.html 
    interior/ 
    in1.html 
    in2.html 
    ... 
    in5.html 
    exterior/ 
    ex1.html 
    ex2.html 
    ... 
    ex7.html 
    gallery/ 
    img1,2,3,4 

Моя структура меню, как этот

Главная | О нас | Интерьер | Внешний вид | Галерея | Сообщения | Контакт

Я создаю меню, перечисляя коллекцию страниц, это нормально!

.navigation 
nav 
    ul.nav.topnav 
    li.dropdown.active 
     a(href='/') 
     | Home 
    each doc in getCollection('pages').toJSON() 
     - clazz = (document.url === doc.url) ? 'active' : null 
     li.dropdown(typeof="sioc:Page", about=doc.url, class=clazz) 
     a(href=doc.url, property="dc:title")= doc.title 

как я могу добавить элемент подменит для внутреннего и наружного перечислив страницы из внутренней/внешней папки

благодарственных заранее!

ответ

1

Возможно, вы используете docpad-menu ..?

+3

Хотя эта ссылка может ответить на этот вопрос, то лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. –

+0

hi npofopr, я использую шаблон нефрита, как конвертировать из eco в jade – billyduc

+0

Плагин меню, похоже, делает это для меня. Спасибо npofopr. И я согласен с точкой @ Sim в более строгом ответе. Ура! – Mikeumus

0

Это может быть неэффективным способом справиться с этим, но это то, что я понял, до сих пор что-то вроде этого (CoffeeKup + Bootstrap):

li class: "dropdown", -> 
    a href: "#", class: "dropdown-toggle", "data-toggle": "dropdown", -> 
     text "API" 
     b class: "caret" 
    ul class: "dropdown-menu", -> 
     for file in @getFilesAtPath("api").toJSON() 
     li -> 
      if @document.relativeOutDirPath == "." 
      a href: file.relativeOutPath, file.title 
      else 
      a href: "../" + file.relativeOutPath, file.title 

Обратите внимание на @getFilesAtPath("api").toJSON() часть. У меня есть папка с именем «/ api», и она содержит файлы. Используя этот тип структуры, соответствующие теги <li> для каждого файла внутри этой папки.

Конечно, используя это, вам нужно создать еще одну из этих вещей для каждой создаваемой вами папки (я не мог найти способ перебора имен каталогов).

Настоящий мусор начинает летать (и, возможно, у вас есть лучшая атака на этом), это сам тег <li>. Обратите внимание на инструкцию if, которую нужно проверить, чтобы узнать, находимся ли мы на странице index.html или в какой-либо дополнительной папке. Затем мне нужно наложить на файл "../" путь к файлу. Я искал, но еще не нашел простой атрибут стиля @document.pathToRoot.

0

Вы можете пометить соответствующие документы в соответствующем YAML, например.

--- 
submenu: interior 
title: in1 
--- 
<ul> 
<% for entry in @getCollection("html").findAllLive({submenu: interior}).toJSON(): %>  
    <li><%= entry.title %></li> 
<% end %> 
</ul> 

Чтобы использовать папку сопоставления вместо YAML вы бы изменить запрос от submenu: interior к relativeOutDirPath: /interior/

0

Вы могли бы дать вашим главные страницы уровне тегов locationOfChildren мета-данные, которые бы путь к папке где находятся дочерние страницы. Если на странице верхнего уровня (например, index.html) нет дочерних элементов, просто не указывайте тег или не дайте ему значение.

Затем вы можете добавить оператор if, который будет запускать цикл для списка дочерних документов, если определено значение locationOfChildren.

.navigation 
    nav 
    ul.nav.topnav 
     li.dropdown.active 
     a(href='/') 
      | Home 
     each doc in getCollection('pages').toJSON() 
     - clazz = (document.url === doc.url) ? 'active' : null 
     li.dropdown(typeof="sioc:Page", about=doc.url, class=clazz) 
      a(href=doc.url)= doc.title 
      if doc.locationOfChildren 
      ul.dropdown 
       each childDoc in getFilesAtPath(doc.locationOfChildren).toJSON() 
       - clazz = (document.url === childDoc.url) ? 'active' : null 
       li.dropdown(typeof="sioc:Page", about=childDoc.url, class=clazz) 
        a(href=childDoc.url)= childDoc.title 

Вы, вероятно, не хотите, чтобы ваши страницы должны быть отсортированы в алфавитном порядке, так что вы можете добавить navOrder тег метаданных каждой страницы, и присвоить целые значения к нему. В обеих строках запроса (getCollection и getFilesAtPath) добавьте .findAllLive({isPage:true},[{navigationOrder:1}]) до метода .toJSON(), и вам должно быть хорошо идти.

Ex: getFilesAtPath(doc.locationOfChildren).findAllLive({isPage:true},[{navOrder:1}]).toJSON()