TYPO3 9.5.3 Архив новостей и средства улучшения маршрутов - PullRequest
0 голосов
/ 21 декабря 2018

Я включил RouteEnhancers для модуля новостей и там работал, как ожидается, для списка новостей и страниц сведений о новостях.Теперь я пытаюсь реализовать архив DateMenu, и там у меня есть некоторые проблемы.

Мой config.yaml выглядит так.

routeEnhancers:
  PageTypeSuffix:
    type: ForceAppendingSlash
  NewsPlugin:
    type: Extbase
    extension: News
    plugin: Pi1
    routes:
      - routePath: '/news/{page}'
        _controller: 'News::list'
        _arguments:
          page: '@widget_0/currentPage'
      - routePath: '/{news_title}'
        _controller: 'News::detail'
        _arguments:
          news_title: news
      - routePath: '/archiv/{year}/{month}'
        _controller: 'News::archive'
    defaultController: 'News::list'
    defaults:
      page: '0'
    requirements:
      page: \d+
    aspects:
      news_title:
        type: PersistedAliasMapper
        tableName: tx_news_domain_model_news
        routeFieldName: path_segment

Мой DateMenu.html выглядит так:

<ul>
 <f:for each="{data.single}" key="year" as="months">
   <li>
      <ul>
        <f:for each="{months}" key="month" as="count">
          <li>
            <f:link.action pageUid="{listPid}" arguments="{overwriteDemand:{year: year, month: month}}">{year} {month}</f:link.action>
          </li>
        </f:for>
      </ul>
    </li>
  </f:for>
</ul>

Списки выглядят хорошо, но я не знаю, есть ли URL-адреса в кеше или что-то еще не так.Будет ли обзор снова, как в RealUrl, чтобы вы могли видеть все кэшированные URL-адреса?

1 Ответ

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

да, URL-адреса, похоже, кешируются.мне нужно было очистить кэш Typo3 и PHP в модуле «Обслуживание» (в разделе «Инструменты администратора»):

enter image description here

НО Я думаю, что есть ошибки в вашей конфигурации routeEnhancers.они плохо документированы в CoreApiReference, но в журнале изменений есть хорошее описание: https://docs.typo3.org/typo3cms/extensions/core/latest/Changelog/9.5/Feature-86365-RoutingEnhancersAndAspects.html

взгляните на сгенерированные URL-адреса DateMenu - вероятно, что-то вроде:

 http://yoursite.com
 /path/to/newspage/
 ?tx_news_pi1[controller]=News
     &tx_news_pi1[overwriteDemand][year]=2018
     &tx_news_pi1[overwriteDemand][month]=10
     &cHash=361b6057014505217b6186a508418f6f

поэтому контроллер - это не «архив», а «список».вам нужно изменить это в вашем config.yaml.также я думаю, что вам нужно настроить аргументы для этого маршрута:

 routePath: '/archive/{year}/{month}'
 _controller: 'News::list'
 _arguments:
   year: overwriteDemand/year
   month: overwriteDemand/month

это должно преобразовать / избавиться от двух & tx_news_pi1 [overwriteDemand] параметров.

nextЧтобы удалить cHash , взгляните на "аспекты:" часть в конце файла config.yaml.Вы уже определили один для "news_title" - и вам нужно добавить еще два для новых "year" и "month" .в журнале изменений https://docs.typo3.org/typo3cms/extensions/core/latest/Changelog/9.5/Feature-86365-RoutingEnhancersAndAspects.html#staticvaluemapper

ниже приведен многоязычный / локализованный пример всех моих файлов config.yaml и DateMenu.html.мои настройки:

  • список и подробный вид на двух разных страницах - 14 и 39
  • я не использую нумерацию страниц в просмотре списка
  • я нев архиве месяцы - только годы

rootPageId: 1
base: /
baseVariants: {  }
languages:
  -
    title: Deutsch
    enabled: true
    languageId: '0'
    base: /
    typo3Language: de
    locale: de_CH
    iso-639-1: de
    navigationTitle: De
    hreflang: de
    direction: ''
    flag: global
  -
    title: English
    enabled: true
    languageId: '1'
    base: /en/
    typo3Language: default
    locale: en_US
    iso-639-1: en
    navigationTitle: En
    hreflang: en-US
    direction: ''
    fallbackType: strict
    flag: gb
errorHandling: {  }
routes: {  }

routeEnhancers:
 NewsPlugin:
  type: Extbase
  limitToPages:
    - 14
    - 39 
  extension: News
  plugin: Pi1
  routes:
    -
     routePath: '/{news_title}'
     _controller: 'News::detail'
     _arguments:
       news_title: news
    -
     routePath: '/{year}'
     _controller: 'News::list'
     _arguments:
       year: overwriteDemand/year
  defaultController: 'News::list'
  defaults:
   page: '0'
  aspects:
   news_title:
    type: PersistedAliasMapper
    tableName: tx_news_domain_model_news
    routeFieldName: path_segment
   year:
    type: StaticRangeMapper
    start: '2000'
    end: '2200'

<div class="news-menu-view">
    <ul>
        <f:for each="{data.single}" key="year">
            <li>
                <f:link.action pageUid="{listPid}" arguments="{overwriteDemand:{year: year}}">{year}</f:link.action>
            </li>
        </f:for>
    </ul>
</div>
...