我在我的extbase扩展程序的单个视图中尝试更改浏览器页面标题。我所有的尝试都失败了:
/**
* action show
*
* @param \Vendor\Abc\Domain\Model\Abc $record
* @return void
*/
public function showAction(\Vendor\Abc\Domain\Model\Abc $record) {
$this->view->assign('record', $record);
//$GLOBALS['TSFE']->page['title'] = $record->getAbc();
//$GLOBALS['TSFE']->indexedDocTitle = $record->getAbc();
//$GLOBALS['TSFE']->page['title'] = $record;
//$GLOBALS['TSFE']->indexedDocTitle = $record;
//$GLOBALS['TSFE']->additionalHeaderData['CustomUserIntTitle']
//= '<title>' . $this->getAbc($record) . '</title>';
//$myNewTitle = 'Title';
//$title = '<title>' . $myNewTitle . '</title>';
//$this->response->addAdditionalHeaderData($title);
//$GLOBALS['TSFE']->content = preg_replace('#<title>.*<\/title>#', '<title>' . $record->getTitle() . '</title>', $GLOBALS['TSFE']->content);
//$this->response->addAdditionalHeaderData('<title>Mein eigener Title</title>');
}
我将该操作注册为不可缓存(不确定我是否真的必须这样做)
答案 0 :(得分:4)
Jan的解决方案是更改依赖于GET参数或页面ID的常规方法。
当您尝试更改控制器内的标题时,取决于Typoscript中页面标题的设置方式。但是,使用PageRenderer:
可以更改控制器内的标题$this->objectManager->get(\TYPO3\CMS\Core\Page\PageRenderer::class)->setTitle('My title');
// For the search
$GLOBALS['TSFE']->indexedDocTitle = 'My title';
如果它不能与PageRenderer一起使用,则必须在Typoscript中对页面标题进行特殊配置,否则其他扩展名将覆盖标题。
答案 1 :(得分:3)
尝试使用TS(样本来自Georg Ringers优秀的分机:新闻):
[globalVar = TSFE:id = NEWS-DETAIL-PAGE-ID]
config.noPageTitle = 2
temp.newsTitle = RECORDS
temp.newsTitle {
dontCheckPid = 1
tables = tx_news_domain_model_news
source.data = GP:tx_news_pi1|news
source.intval = 1
conf.tx_news_domain_model_news = TEXT
conf.tx_news_domain_model_news {
field = title
htmlSpecialChars = 1
}
wrap = <title>|</title>
}
page.headerData.1 >
page.headerData.1 < temp.newsTitle
[global]
您只需根据扩展程序进行一些更改
答案 2 :(得分:0)
在TYPO3 9-10中添加了新逻辑。最后一个答案对我不起作用,所以我用了这个 https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/PageTitleApi/Index.html
首先。创建自己的标题提供者。路径'ext / Classes / PageTitle / MyRecordTitleProvider.php'
<?php
namespace LFW\Lloyd\PageTitle;
use TYPO3\CMS\Core\PageTitle\AbstractPageTitleProvider;
class MyRecordTitleProvider extends AbstractPageTitleProvider
{
/**
* @param string $title
*/
public function setTitle(string $title)
{
$this->title = $title;
}
}
第二。在您的TypoScript设置页面中,TitleProviders。类相互覆盖的主要思想是,您可以设置顺序(优先级)。这样
config.pageTitleProviders {
record {
provider = TYPO3\CMS\Core\PageTitle\RecordPageTitleProvider
}
myext {
provider = Vendor\Ext\PageTitle\MyRecordTitleProvider
before = record
}
seo {
provider = TYPO3\CMS\Seo\PageTitle\SeoTitlePageTitleProvider
before = lloydfund
}
}
说明。首先,检查常规页面标题和所有常规设置,例如
config{
pageTitleFirst = 1
pageTitleSeparator = |
pageTitleSeparator.noTrimWrap = | | |
}
将使所有页面标题都变为“页面标题|网站标题”
“网站标题”将从网站TS模板中获取
然后优先考虑我们的下一个提供者,它将覆盖普通页面的标题。像“外部标题|网站标题”
最后,我们的设置是seo_title覆盖。
现在,所有这些都可以在ExtBase控制器中进行标题设置。我们只需要添加showAction
$titleProvider = GeneralUtility::makeInstance(\Vendor\Ext\PageTitle\MyRecordTitleProvider::class);
$titleProvider->setTitle('Entity title');