实际上标题就是整个问题。
我只想修改模板,以便自动显示当前页面的标题(我正在使用HTML模板,所以我只需要一小段Typoscript代码从数据库中获取页面标题)。
希望这是可能的。
实际上标题就是整个问题。
我只想修改模板,以便自动显示当前页面的标题(我正在使用HTML模板,所以我只需要一小段Typoscript代码从数据库中获取页面标题)。
希望这是可能的。
可以。这很简单。我假设你正在使用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唱歌,它就是你的歌谱。
{v:page.info(field:'title')}
https://fluidtypo3.org/viewhelpers/vhs/master/Page/InfoViewHelper.html
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" />
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/
{data.title}
访问页面标题。
您可以通过以下Typoscript获取当前页面标题:
lib.pagetitle = TEXT
lib.pagetitle.data = page : title
然后使用这个对象以以下方式在您的页面中使用typoscriptObjectPath:
<f:cObject typoscriptObjectPath="lib.pagetitle"/>
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)}
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>
}
}
}
<f:cObject typoscriptObjectPath='lib.page_title' />
这个问题很旧了,但我仍然想添加一些我从未在这里读到的东西。
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
}
}
}
现在我来解释一下我为什么认为单独的页头不是最佳解决方案的背景:
在自己的模板中再次手动实现这整个逻辑,在我看来是没有用的。我认为页头应该仅在特殊的页面类型(如AJAX或动态PDF文件)中禁用。这是我认为该选项有用的主要原因。
以下是关于 TypoScript 中 config
选项的最新文档链接(锚点为 pagetitle):
https://docs.typo3.org/typo3cms/TyposcriptReference/Setup/Config/Index.html#pagetitle