Отображение содержимого вложенных папок в представлении папки Plone - PullRequest
6 голосов
/ 03 апреля 2011

На сайте Plone со структурой

root
   +-topic1
   |    +-page1
   |    +-page2
   |
   +-topic2
        +-page3
        +-page4

Я хочу иметь представление для папки root, которая перечисляет содержимое вложенных папок, например:

[http://host/plone/root/]

TOPIC1

- page1
- page2

TOPIC2

- page3
- page4

с«TOPIC1» и «TOPIC2» в качестве заголовков, а также «page1» и т. Д., Ссылающиеся на фактические страницы.

Недостаточно просто использовать коллекцию, объединяющую страницы в папках topic1 и topic2, поскольку она не генерируетподзаголовки.

Я искал в хранилище продуктов Plone, а также в Интернете расширение, обеспечивающее такой вид, но безуспешно.Есть источники, в которых говорится, что это можно сделать с помощью пользовательских представлений отображения, но, поскольку я новичок в Plone, я не решаюсь взломать их.

Существует ли продукт / расширение Plone, который может обеспечить такое представление вложенной папки?содержимое?
Или есть даже встроенное решение, о котором я не знаю?

Ответы [ 3 ]

3 голосов
/ 03 апреля 2011

Я понял это.

По сути, вы хотите расширить шаблон folder_summary_view, включив в него список содержимого для папок и элементов коллекции.

  1. Создание копии. В ZMI перейдите на portal_skins/plone_content/folder_summary_view и нажмите Настройка . Перейдите к копии на portal_skins/custom/folder_summary_view и переименуйте ее (например) в list_contents.

  2. Активируйте его как представление папки. Перейдите на portal_types/Folder и вручную добавьте list_contents в список в Доступные методы просмотра .

  3. Убедитесь, что в представлении отображаются только папки и коллекции. Оберните код, генерирующий сведения о записи, в <tal:general_check condition="python: item_type in ('Folder', 'Topic')"> GENERATE ENTRY </tal:general_check>

  4. Добавьте код для перечисления содержимого предмета. Вы можете украсть его у portal_skins/plone_content/folder_listing, так как это уже делает то, что нужно. Скопируйте часть <metal:listingmacro> ... <metal:listingmacro>, но замените определение folderContents в <tal:foldercontents> этой строкой, чтобы получить содержимое:

folderContents folderContents|nothing;
folderContents python:item_object.queryCatalog(**contentFilter) or
item_object.getFolderContents(contentFilter, batch=True, b_size=limit_display or 100);

(все в одной строке)

Примечание: item_object - это имя, данное предмету во внешнем листинге.

Если вы активируете list_contents как вид папки сейчас, он работает точно так, как требуется в вопросе.

Предупреждение: Это копирование-вставка взлома новичком Plone, который работает для меня ™. Используйте на свой страх и риск.

2 голосов
/ 28 ноября 2012

Этого также можно добиться только с помощью пользовательского интерфейса Plone: ​​

Установите Products.ContentWellPortlets и назначьте два коллекционных портлета ниже содержимого для элемента представления по умолчанию для вашего портала (например, "front-page" какпо умолчанию).

0 голосов
/ 03 апреля 2011

Вы можете использовать коллекцию здесь с двумя путями, настроенными как критерии.И если вы хотите, вы можете использовать эту коллекцию в качестве представления по умолчанию для «корня».Посмотрите на стандартные папки «news» и «events», расположенные в нем.

http://plone.org/documentation/manual/plone-4-user-manual/using-collections/adding-collections

...