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

14

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

我只想修改模板,以便自动显示当前页面的标题(我正在使用HTML模板,所以我只需要一小段Typoscript代码从数据库中获取页面标题)。

希望这是可能的。

8个回答

28

可以。这很简单。我假设你正在使用TemplaVoilà,因为如果你不是,那么你应该使用它 :-D

首先,在模板中添加一些带有虚拟页面标题的HTML代码。给它一个ID属性,以便易于映射。如下所示:

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

接下来,进入TemplaVoilà,将<h1>元素映射到内容类型"TypoScript对象路径"。当它提示您输入对象路径时,您可以输入任何内容——约定是动态内容添加到“lib”命名空间中,因此我们称其为lib.pagetitle。当它询问您是否要将此映射到“INNER”还是“OUTER”时,请选择“INNER”——这意味着您只是在映射<h1>...</h1>标记之间的空格。 (“OUTER”表示您替换整个元素,包括标记,但我们不希望这里发生,因为我们希望这仍然是一个H1。)保存您的模板映射。

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

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

这段话的意思是:"它告诉你,“取出我在模板中映射到lib.pagetitle的空间。创建一个类型为TEXT的内容对象并将页面标题填充到该内容对象中。”"

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

这一开始可能听起来很复杂,确实如此,但这个系统的好处是它非常灵活。动态插入文本只是个开始。 TypoScript参考文档(也称为“TSRef”)包含了所有细节 - 查找“getText”以获得一些味道,这个函数使得在TypoScript模板中调用“page:title”。

TSRef是你的朋友。 我在桌子上放着它的打印副本 - 如果你想让TYPO3唱歌,它就是你的歌谱。


谢谢你提供这么好的教程!我试图在TSRef中找到这样的函数,但是我没有找到(目前也找不到getText),所以我会继续搜索 :) - user155997
是的,在TSRef中找到特定的内容可能很困难。我曾试图包含一个直接链接到getText的链接,但由于我在这里是新手,SO不允许我这样做。它在这个页面上:http://typo3.org/documentation/document-library/references/doc_core_tsref/4.2.1/view/1/2/#id4252676 - Jason A. Lefkowitz
我会打印一份带有自己关键词和标记的副本。我知道这很老派,但它确实有效! - jensgram
这篇帖子的“保质期”不够长。 - Lukas

6

5
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

关于元数据:

对于移动兼容的网站,将元数据放置在头部标签后面非常重要。

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

您可以通过将disableAllHeaderCode = 1添加到您的typoscript来自己编写整个头部,或者您可以通过直接将您的元标记添加到head标记来进行黑客攻击:

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

将此代码放在您的TypoScript中。
 meta.X-UA-Compatible = IE=edge,chrome=1

httpEquivalent: (自TYPO3 4.7版本开始) 如果设置为1,则在meta标签中使用http-equiv属性而不是"name"属性。默认值:0。

了解更多有关TYPO3的信息,请访问我的博客

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


5
如果您想在流动页面模板中使用此功能,您也可以简单地使用以下代码:
{data.title}

访问页面标题。


3

您可以通过以下Typoscript获取当前页面标题:

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

然后使用这个对象以以下方式在您的页面中使用typoscriptObjectPath:

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

1
如果您想使用仅基于fluid的解决方案,请安装VHS扩展,您可以像这样输出页面标题而不使用任何TypoScript
标签示例:
<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)}


1
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>
        }
    }
}

在需要呈现typoscript的地方,调用lib.page_title来渲染页面标题。
<f:cObject typoscriptObjectPath='lib.page_title' />

我希望这能帮到你!!!

0

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

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 选项的最新文档链接(锚点为 pagetitle): https://docs.typo3.org/typo3cms/TyposcriptReference/Setup/Config/Index.html#pagetitle


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接