TYPO3: Как получить категорию страниц SYS в списке тизеров? - PullRequest
0 голосов
/ 06 февраля 2019

Я создал библиотеку, чтобы выпустить все подстраницы страницы как тизеры.Это работает до сих пор.В этом тизере я хочу также выделить системную категорию подстраниц.Для этого я использовал (и изменил) опечатку, которую нашел здесь: Показать названия категорий текущей страницы в TYPO3 8

Но это не работает - кто-нибудь может дать мне подсказку?

Вот мой код:

lib.newsteaser {

    20 = CONTENT
    20 {
        table = tt_content
        select {
            # Seiten-ID des Parent
            pidInList = 17
            recursive = 1
            orderBy = tx_mask_cnt_news_item_date
            where = hidden=0 AND CType='mask_cnt_news_item'
            limit = 4
        }

        wrap = <section><div class="container-fluid"><div class="row no-gutters news-teaserbox">|</div></div></section>

        renderObj = COA
        renderObj {

            wrap = |</div>

            10 = FILES
            10 {
                if.isTrue.field = tx_mask_cnt_news_item_teaser_bg

                references {
                    table = tt_content
                    # Seiten-ID
                    uid.dataWrap = {field:uid}
                    fieldName = tx_mask_cnt_news_item_teaser_bg
                }

                renderObj = TEXT
                renderObj.data = file:current:publicUrl
                renderObj.wrap = <div class="col-xl-6 col-lg-6 col-md-12 col-sm-12 col-xs-12 news-tb-item" style="background-image: url('/|');">
            }

            15 = TEXT
            15 {
                if.isFalse.field = tx_mask_cnt_news_item_teaser_bg
                value = <div class="col-xl-6 col-lg-6 col-md-12 col-sm-12 col-xs-12 news-tb-item">
            }

            20 = TEXT
            20 {
               wrap = <div class="news-tb-item-head">|</div>
                field = header
            }

            25 = CONTENT
            25 {
                wrap = <div class="categories">|</div>

                table = sys_category
                select {
                    # ID der Seite, auf der die Kategorien angelegt sind
                    pidInList = 0
                    join = sys_category_record_mm ON (sys_category_record_mm.uid_local=sys_category.uid)
                    where = sys_category_record_mm.tablenames='tt_content' AND sys_category_record_mm.uid_foreign = ###recorduid###
                    markers {
                        recorduid.field = uid
                    }
                }

                renderObj = TEXT
                renderObj.field = title
                renderObj.wrap = <li class="category {field:title}">|</li>
                renderObj.insertData = 1
            }

            30 = TEXT
            30 {
                wrap = <div class="news-tb-item-sub">|</div>
                field = subheader
            }

            40 = FILES
            40 {

                references {
                    table = tt_content
                    # Seiten-ID
                    uid.dataWrap= {field:uid}
                    fieldName = image
                }
                renderObj = IMAGE
                renderObj {
                    file.import.data = file:current:uid
                    file.crop.data = file:current:crop
                    file.treatIdAsReference = 1
                    altText.data = file:current:title
                    params =
                    wrap = |
                }

            }

            50 = TEXT
            50 {
                field = bodytext
            }

            60 = TEXT
            60 {
                value = Weiter
                lang.en = Read
                wrap = <div class="morelink-wrapper">|</div>

                typolink {
                    parameter.field =  pid
                    ATagParams =  class="morelink"
                }
            }

        }

    }

}

1 Ответ

0 голосов
/ 06 февраля 2019

Подстраниц?
Вы строите выделение на tt_content, поэтому у вас есть все CE на странице 17.
возможно, вы имеете в виду

lib.newsteaser.20.table = pages

Если вы выберетеpages:

Ваше определение маркера обращается к записи страниц текущей страницы (TSFE), но вам нужен UID записи страниц, которая является вашим текущим контекстом (renderObj).

Таким образом, правильное определение маркера должно быть:

pageuid.field = uid

в противном случае (выберите tt_content) :

вам необходимо использовать связи с текущей записьюtt_content:

   where = sys_category_record_mm.tablenames='tt_content' AND sys_category_record_mm.uid_foreign = ###recorduid###
   markers.recorduid.field = uid

или вы выбираете tt_content из подстраниц (я не знаю, как вы получаете записи из подстраниц, поскольку вы нигде не выбрали подстраницы) и категориисохраняются на страницах)

   where = sys_category_record_mm.tablenames='pages' AND sys_category_record_mm.uid_foreign = ###pageuid###
   markers.pageuid.field = pid

страница записи tt_content хранится в поле pid


Как TYPO3 хранит свои данные?

TYPO3 хранит свои данные в разных таблицах.Основная таблица pages для страниц, которые создают сайт.Эти страницы структурированы в виде дерева.не все страницы представляют отдельные веб-страницы.каждая запись в TYPO3 сохраняется на одной странице (назначается записи pages).Существует одна специальная «страница», которая не является реальной страницей и не имеет записи pages.Это корень дерева страниц, и его можно идентифицировать с помощью страницы с идентификатором 0. uid означает «уникальный идентификатор» и является полем в каждой записи данных.для идентификации страницы, назначенной записи, каждая запись данных имеет поле pid (идентификатор страницы).
Так как pages записи имеют поле pid, оно дает древовидную структуру.каждая страница имеет родителя, а корневая страница имеет (псевдо) страницу 0 в качестве родителя.В записи pages хранится много информации, но обычно нет содержимого.(Вы можете хранить фоновые изображения, визуальные изображения или специальные изображения для предварительного просмотра, а также информацию SEO, такую ​​как описание или реферат, в записи pages)
Для контента существует таблица tt_content.Здесь вы храните тексты, (ссылки на) изображения или конфигурацию плагина, которые контролируют, например, отображение других записей.

Для тизеров страниц вы можете быть реализованы в двух видах:
1. Вся информация для тизера хранится в записи pages
2. Вы используете содержимое страницы, то есть: получить информацию о tt_content записях на этой странице

типичным сценарием, в котором вы используете тизеры, является список новостей: показать заголовок и реферат или вступление с изображением, которое ссылается на подробный вид с полнымtext.


Ваш код напоминает этот сценарий и не имеет ничего общего с меню страниц, представленных тизерами.

Это я бы построил с помощью Typoscript следующим образом:
построить объект меню (возможно special = directory)
для каждого элемента меню замените ссылку по умолчанию на объект before, где вы используете другие поля записи current pages для создания ссылкисостоящий из изображения предварительного просмотра, заголовка страницы, аннотации страницы.

lib.teaserMenu = HMENU
lib.teasermenu {
    special = directory
    special.value = 123

    1 = TMENU
    1 {
      // remove normal link
      doNotShowLink = 1

      // build it by myself:
      before.cObject = COA
      before.cObject {
        stdWrap.wrap = <div class="teaser">|</div>
        stdWrap.typolink.field = uid

        10 = FILES
        10 {
          :
        }

        20 = TEXT
        20.field = title
        20.wrap = <h3>|</h3>

        30 = TEXT
        30.field = abstract
        30.wrap = <p>|</p>

        :
      }
   }
...