如何将当前页面标题自动插入到 TYPO3 模板中?

Posted

技术标签:

【中文标题】如何将当前页面标题自动插入到 TYPO3 模板中?【英文标题】:How can I insert the current page title automatically into a TYPO3 template? 【发布时间】:2010-11-19 09:50:52 【问题描述】:

实际上标题就是整个问题。

我只想修改模板,以便自动显示当前页面标题(我正在使用 html 模板,所以我只需要一些打字稿来从数据库中获取页面标题)

我希望这是可能的

【问题讨论】:

【参考方案1】:

如果你想在流畅的页面模板中使用这个,你也可以简单的使用:

data.title

访问页面标题。

【讨论】:

【参考方案2】:
lib.page_title = CONTENT
lib.page_title 

    table = pages

    select 
        where = uid = 2
    

    renderObj = COA
    renderObj 

        10 = TEXT
        10 
            field = title
            wrap = <h1 class="page_title">|</h1>
        

        20 = TEXT
        20 
            field = subtitle
            stdWrap.required = 1
            stdWrap.wrap = <h5>|</h5>
        
    

调用 lib.page_title 以使用此行来呈现打字稿

<f:cObject typoscriptObjectPath='lib.page_title' />

希望对你有帮助!!!

【讨论】:

【参考方案3】:

是的。这很简单。我假设你使用的是 TemplaVoilà,因为如果你不是,你应该是 :-D

首先在您的模板中添加一些带有虚拟页面标题的 HTML。给它一个 ID 属性,以便于映射。喜欢:

<h1 id="page-title">Page Title Here</h1>

接下来,进入 TemplaVoilà 并将 &lt;h1&gt; 元素映射到内容类型“TypoScript 对象路径”。当它提示你输入对象路径时,你可以输入任何你想要的东西——约定是动态内容被添加到“lib”命名空间中,所以我们称之为lib.pagetitle。当它询问您是否要将其映射到“INNER”或“OUTER”时,请选择“INNER”——这意味着您只是映射&lt;h1&gt;...&lt;/h1&gt; 标签之间的空间。 (“OUTER”表示您要替换整个元素,包括标签,我们不希望在这里,因为我们希望它保持 H1。)保存您的模板映射。

现在进入您网站的 TypoScript 模板。在这里,您将插入填充我们刚刚用实际内容映射的空间的逻辑。插入页面标题只需几行 TypoScript:

lib.pagetitle = TEXT
lib.pagetitle.data = page : title

这就是说“在模板中占用我映射到lib.pagetitle 的空间。在该空间中创建一个TEXT 类型的内容对象。然后用页面标题填充该内容对象。”

保存您的 TypoScript 模板。现在你完成了!

乍一看这可能听起来很复杂,确实如此,但这个系统的好处是它非常灵活。动态插入文本只是开始。 TypoScript Reference(又名“TSRef”)包含所有详细信息——查找“getText”以获得风味,这就是使 TypoScript 模板中的“page : title”调用落在页面标题中的函数。

TSRef 是你的朋友。我在我的办公桌上放了一份印刷版——如果你想让 TYPO3 唱歌,那就是你的歌本。

【讨论】:

感谢您提供的精彩教程!我试图在 TSRef 中找到这样的函数 - 但我没有(我现在也找不到 getText)所以我会继续搜索 :) 是的,在 TSRef 中很难找到具体的内容。我曾尝试包含指向 getText 的直接链接,但 SO 不会让我 b/c 我是新来的。它在这个页面上:typo3.org/documentation/document-library/references/… 我保留了一份印有我自己的关键字和标记的副本。老派,我知道,但它有效!【参考方案4】:

如果您只想使用fluid 解决方案,请安装VHS 扩展,您可以在不使用任何TypoScript 的情况下使用output the page title,如下所示:

标签示例:

<v:page.header.title title="NULL" whitespaceString="' '" setIndexedDocTitle="1">
  <!-- tag content - may be ignored! -->
</v:page.header.title>

内联示例:

v:page.header.title(title: 'NULL', whitespaceString: '' '', setIndexedDocTitle: 1)

【讨论】:

【参考方案5】:

这个问题很老了,但我仍然想在这里添加一些我从未读过的东西。

TYPO3 提供了很多关于标题的东西,它也可以完全独立地呈现它是正确的。尽管如此,TYPO3 的所有不错的选项都或多或少地被单独的解决方案禁用了。

所以首先直接回答这个问题: 默认页面标题可以这样覆盖

config.pageTitle.stdWrap.override.cObject < lib.pagetitle

如果定义了多种页面类型,并且需要为每种类型单独设置标题,则可以在页面定义中注明配置:

page = PAGE
page 
    typeNum = 0
    config.pageTitle.stdWrap.override.cObject < lib.pagetitle_1
    ...


anotherPage = PAGE
anotherPage 
    typeNum = 1
    config.pageTitle.stdWrap.override.cObject < lib.pagetitle_2
    ...

下面还有一个lib.pagetitle,它不仅仅是使用标题或副标题——如果在页面上使用扩展名,它使用新闻标题:

lib.pagetitle = COA
lib.pagetitle 

  10 = TEXT
  10 
    // subtitle: used as field for title tag
    value.field = subtitle // title
    if.isFalse.data = GP:tx_news_pi1|news
  

  20 = RECORDS
  20 
        if.isTrue.data = GP:tx_news_pi1|news
        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
        
    
 

现在还有一些背景,为什么我认为某些单独的标题可能不是最好的解决方案:

TYPO3 通常会在标题中添加一些有用的细节,并且不需要将这些内容单独组合起来。 脚本和样式表是有组织的,甚至可以通过 TypoScript 压缩和合并。如果遵循某些语法,它甚至会注意像 jquery 这样的库只包含一次。 TYPO3 在 TypoScript 中有许多功能,可以定义与标题相关的所有内容,还可以决定是否可能根本不将脚本包含在标题中,而是包含在页面源代码的底部。李> 可以定义元标记(并被扩展或子模板覆盖)

在我看来,在自己的模板中再次手动实现整个逻辑是没有用的,我认为应该只禁用特殊页面类型(如 AJAX 或动态 PDF 文件)的标题。这是我认为该选项有用的主要原因。

她仍然是关于 TypoScript 中 config-options 的最新文档的当前链接(锚页面标题): https://docs.typo3.org/typo3cms/TyposcriptReference/Setup/Config/Index.html#pagetitle

【讨论】:

【参考方案6】:

我更喜欢 vhs 解决方案:

v:page.info(field:'title')

https://fluidtypo3.org/viewhelpers/vhs/master/Page/InfoViewHelper.html

【讨论】:

【参考方案7】:
lib.pagetitle = RECORDS
lib.pagetitle 
    source.data = page:uid
    tables = pages
    conf.pages = TEXT
    conf.pages.field = nav_title

获取当前页面标题:

lib.pagetitle = TEXT
lib.pagetitle.field=title

对于元数据:

当我们浏览移动兼容网站时,在标题标签之后放置meta非常重要

为了防止 IE9 出现怪异模式,我需要在每个 HTML 页面的最顶部添加以下行:

您可以自己编写整个标题,将 disableAllHeaderCode = 1 添加到您的打字稿中,或者您可以通过将元标记直接添加到 head 标签来破解它:

 page.headTag = <head><meta http-equiv="X-UA-Compatible" content="IE=edge" />

把它放在你的打字稿上

 meta.X-UA-Compatible = IE=edge,chrome=1

httpEquivalent:(从 TYPO3 4.7 开始)如果设置为 1,则在元标记中使用 http-equiv 属性而不是“name”属性。默认值:0。

有关 TYPO3 的更多信息,您可以访问我的博客

https://jainishsenjaliya.wordpress.com/2013/10/10/put-meta-tag-on-top-of-header-section-in-typo3/

【讨论】:

【参考方案8】:

您可以通过以下排版当前页面标题:

lib.pagetitle = TEXT
lib.pagetitle.data = page : title

然后使用typoscriptObjectPath 将此对象用于您的页面,如下所示:

<f:cObject typoscriptObjectPath="lib.pagetitle"/>

【讨论】:

以上是关于如何将当前页面标题自动插入到 TYPO3 模板中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TYPO3 中获取当前页面的 ID

将字段添加到 TYPO3 模板以获取全球站点信息?

TYPO3:页面+子页面上的登录表单

如何在django创建模板中创建对象时自动插入当前用户?

如何在typo3 V10的extbase控制器中重定向到404页面

TYPO3 电子邮件垃圾邮件防护