Мы использовали хук tt_content_drawFooter
, чтобы добавить дополнительную информацию в представление макета страницы в Backend для некоторых элементов контента.
Некоторая информация будет отображаться всегда, например, информация об элементе контента 18n_parent. Некоторая информация относится к элементам контента, таким как текстовые медиа.
Теперь при обновлении до v12 хук пропадает. Существуют некоторые события замены (но не для нижнего колонтитула), и можно переопределить предварительный просмотр Renderer, например. для всех типов или для определенных типов контента.
Реализация выглядит простой, но я столкнулся с проблемой:
PageContentPreviewRenderingEvent->setPreviewContent()
, чтобы переопределить содержимое (но не нижний колонтитул).Например, это значение по умолчанию:
общий:
$GLOBALS['TCA']['tt_content']['ctrl']['previewRenderer'] = \TYPO3\CMS\Backend\Preview\StandardContentPreviewRenderer::class;
текстовые медиа:
$GLOBALS['TCA']['tt_content']['types'][$ctype]['previewRenderer'] = \TYPO3\CMS\Frontend\Preview\TextmediaPreviewRenderer;
типы содержимого контейнера:
$GLOBALS['TCA']['tt_content']['types'][$ctype]['previewRenderer'] = B13\Container\Backend\Preview\ContainerPreviewRenderer;
новости_pi1:
$GLOBALS['TCA']['tt_content']['types']['news_pi1']['previewRenderer'] = GeorgRinger\News\Hooks\PluginPreviewRenderer;
Поэтому, если я установлю свой PreviewRenderer, это должен быть другой класс, унаследованный от другого PreviewRender для каждого из них, который я хочу переопределить.
Что мне не хватает? Это невозможно или что было бы хорошим решением?
Пример:
Документация
Для контекста, это патч, в котором был удален предыдущий крючок нижнего колонтитула:
Должно ли решение быть связано с backend_layout/colPos, элементом-контейнером или одним элементом контента? Я думаю, что это может быть важно знать или принять важное решение.
Дэвид, у меня есть два случая: есть некоторая информация, которая должна отображаться независимо от элемента контента (например, информация о языке). И есть некоторая информация, которая зависит от элемента контента.
Я бы сказал, что у вас есть несколько вариантов:
Вариант 1:
Вы можете XClass StandardContentPreviewRenderer. Но это будет работать только для ctypes, которые напрямую используют StandardContentPreviewRenderer. Тогда вам также потребуется XClass для всех конкретных PreviewRenderers. Так что, возможно, это нехорошее решение.
https://docs.typo3.org/m/typo3/reference-coreapi/12.4/en-us/ApiOverview/Xclasses/Index.html
Вариант 2:
Реализуйте собственный PreviewRenderer для всех типов ctypes, которыми вы хотите манипулировать. Затем вы можете использовать черту для реализации своей модификации. Тогда вам все равно понадобится несколько PreviewRenderer, но вы можете реализовать свой собственный код один раз в типаже.
https://www.php.net/manual/de/language.oop5.traits.php
https://docs.typo3.org/m/typo3/reference-coreapi/12.4/en-us/CodingGuidelines/PhpArchitecture/Traits.html
Вариант 3:
Вы можете исправить StandardContentPreviewRenderer для своих версий TYPO3 и либо реализовать свой код непосредственно в патче, либо отправить собственное событие PSR-14.
https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Events/EventDispatcher/Index.html
https://typo3worx.eu/2017/08/patch-typo3-using-composer/
Я думаю, что все три решения имеют некоторые (недостатки) преимущества. Я бы склонялся ко второму варианту, так как считаю его наиболее стабильным решением.
Обновлено:
Я только что протестировал упомянутый выше вариант Джулиана Хофмана. Да, вы можете переопределить часть нижнего колонтитула, но тогда вам потребуется реализовать собственный ViewHelper для управления нижним колонтитулом.
Это сработало бы, но я бы не предпочел. Но это всего лишь личное предпочтение.
Представляю еще один вариант на основе комментария Джулиана Хоффмана:
Это работает для TYPO3 v12 и выше.
Используйте TSconfig, чтобы переопределить частичный Fluid.
# Pattern: templates."composer-name"."something-unique" = "overriding-extension-composer-name":"entry-path"
templates.typo3/cms-backend.9999999999 = myvendor/myextension:Resources/Private/Backend/TemplateOverrides/typo3/cms-backend
Добавьте файл Fluid в свое расширение:
Resources/Private/Backend/TemplateOverrides/typo3/cms-backend/Partials/Page-Layout/RecordDefault/Footer.html:
Оригинал выглядит так:
<f:if condition = "{item.footerInfo}">
<div class = "t3-page-ce-footer">
<div class = "t3-page-ce-info">
{item.footerInfo -> f:format.raw()}
</div>
</div>
</f:if>
Мы можем добавить еще:
<f:if condition = "{item.record.layout}">
<strong>Layout:</strong>
<f:translate key = "LLL:EXT:myextension/Resources/Private/Language/locallang_backend.xlf:tt_content.layout.{item.record.layout}">{item.record.layout}</f:translate>
<br/>
</f:if>
Документация:
Просто вечерняя мысль без глубоких исследований: в частичном ../PageLayout/RecordDefault/Footer.html отображается только item.footerInfo. Тем временем партиал можно легко перезаписать (docs.typo3.org/c/typo3/cms-core/main/en-us/Changelog/12.0/…). Тогда только {item} нужно будет соответствующим образом обогатить желаемым footerContent...