【问题标题】:TYPO3 Extbase - Change browser page title in single viewTYPO3 Extbase - 在单个视图中更改浏览器页面标题
【发布时间】:2017-07-22 10:14:15
【问题描述】:

我试图在我的 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>');
}

我将该操作注册为不可缓存(但不确定我是否真的必须这样做)

【问题讨论】:

    标签: typo3 extbase typo3-7.6.x


    【解决方案1】:

    如果 TYPO3 >= 9 LTS 跟随:

    https://stackoverflow.com/a/63745294/4533462

    对于 TYPO3

    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 中为您的页面标题进行特殊配置,否则其他扩展会覆盖标题。

    【讨论】:

    • 太棒了。像魅力一样工作。非常感谢!
    • 无法让它工作。调用 setTitle() 后,我可以检查已使用 getTitle() 设置的标题。然而,实际的标题标签仍然包含页面标题。我创建了一个空的 TypoScript,其中只包含最基本的设置 page.10 =
    • 糟糕,我的错。结果扩展名“metaseo”覆盖了我正在处理的安装中的页面标题。
    【解决方案2】:

    在 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 Vendor\Ext\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.myext {
          provider = Vendor\Ext\PageTitle\MyRecordTitleProvider
          before = altPageTitle,record,seo
       }
    }
    

    解释。首先,检查正常的页面标题和所有正常的设置,如

    config{
        pageTitleFirst = 1
        pageTitleSeparator = |
        pageTitleSeparator.noTrimWrap = | | |
    }
    

    将使所有页面标题都像“页面标题 | 网站标题”

    “网站标题”将取自站点 -> websiteTitle 然后在优先我们的下一个Provider,将覆盖正常的页面标题。喜欢“Ext title | 网站标题”

    在我们的设置中最后一个 seo_title 覆盖。

    现在一切准备就绪,可以在 ExtBase 控制器中设置标题。我们只需要添加 showAction

        $GLOBALS['TSFE']->indexedDocTitle = $title;
        $titleProvider = GeneralUtility::makeInstance(MyRecordTitleProvider::class);
        $titleProvider->setTitle($title);
    

    【讨论】:

      【解决方案3】:

      尝试使用 TS(示例来自 Georg Ringers 出色的 ext:news):

      [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]
      

      您只需要根据您的扩​​展程序进行一些更改

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-14
        • 1970-01-01
        • 1970-01-01
        • 2014-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多