IMG_RESOURCE 的绝对路径
Absolute path with IMG_RESOURCE
我正在寻找一种方法来获取 TypoScript 中 IMG_RESOURCE 对象的绝对路径。由于 baseUrl 对我来说不是真正的解决方案,所以简单地添加 config.baseUrl = example.com
不是我接受的东西。
那么,我该如何解决这样的问题:
ogimage = FILES
ogimage{
references {
table = pages
uid.data = page:uid
fieldName = tx_csseo_og_image
}
renderObj = IMG_RESOURCE
renderObj {
file.import.data = file:current:publicUrl
file.height < plugin.tx_csseo.social.openGraph.image.height
file.width < plugin.tx_csseo.social.openGraph.image.width
# this needs to be generated with an absolute URL
stdWrap.dataWrap = <meta property="og:image" content="|" />
}
}
我不明白你的问题。你想达到什么目的?
你在寻找类似 config.absRefPrefix
的东西吗?
无论如何你不应该使用
file.import.data = file:current:publicUrl
尝试使用
file {
import.data = file:current:uid
treatIdAsReference = 1
:
您可能需要这样的东西:
ogimage = FILES
ogimage {
//get the image url from the seo field
references {
table = pages
uid.data = page:uid
fieldName = tx_csseo_og_image
}
renderObj = COA
renderObj {
10 = TEXT
10.data = DB:sys_domain:1:domainName
10.wrap = |
20 = TEXT
20.data = file:current:publicUrl
20.wrap = /|
}
}
我自己找到了解决办法。问题的关键是根本不要在任何时候设置域。并从文件和 IMG_RESOURCE 对象中渲染绝对 URL,以便能够调整图像大小。
ogimage = FILES
ogimage{
references {
table = pages
uid.data = page:uid
fieldName = tx_csseo_og_image
}
renderObj = TEXT
renderObj {
typolink{
parameter.stdWrap{
cObject = IMG_RESOURCE
cObject{
file.import.data = file:current:uid
file.treatIdAsReference = 1
file.height < plugin.tx_csseo.social.openGraph.image.height
file.width < plugin.tx_csseo.social.openGraph.image.width
}
}
returnLast = url
forceAbsoluteUrl = 1
}
wrap = <meta property="og:image" content="|" />
}
}
这将通过 IMG_RESOURCE 生成调整大小的图像,然后通过拼写链接为该生成的图像生成绝对 url,然后将其包装在元标记中。
一个更完整的 TypoScript-Only 示例可以是我的以下示例片段
它在 page.meta
内呈现以下元标记,无需使用 page.headerData.
:
og:image
og:image:width
og:image:height
og:image:type
TypoScript 设置:
page {
meta {
og:image {
attribute = property
stdWrap.cObject = FILES
stdWrap.cObject {
references {
table = pages
uid.data = uid
fieldName = tx_theme_facebook_image
}
begin = 0
maxItems = 1
renderObj = TEXT
renderObj {
stdWrap.typolink {
parameter.stdWrap {
cObject = IMG_RESOURCE
cObject {
file {
crop.data = file:current:crop
cropVariant = facebook_variant1
import.data = file:current:uid
treatIdAsReference = 1
}
}
}
returnLast = url
forceAbsoluteUrl = 1
}
required = 1
}
}
}
og:image:width {
attribute = property
stdWrap.cObject = TEXT
stdWrap.cObject {
data = TSFE:lastImgResourceInfo|0
}
stdWrap.if.isTrue.field = tx_theme_facebook_image
}
og:image:height {
attribute = property
stdWrap.cObject = TEXT
stdWrap.cObject {
data = TSFE:lastImgResourceInfo|1
}
stdWrap.if.isTrue.field = tx_theme_facebook_image
}
og:image:type {
attribute = property
stdWrap.cObject = TEXT
stdWrap.cObject {
data = TSFE:lastImgResourceInfo|2
stdWrap.wrap = image/|
required = 1
}
stdWrap.if.isTrue.field = tx_theme_facebook_image
}
}
}
一些旁注
此代码段仅限于图像 FAL 关系 (IRRE)。文件扩展名限制必须在您的 field/column(在本例中为 pages.tx_theme_facebook_image
)的 TCA 配置中正确配置。即使是最大项目的数量也必须限制在 TCA 配置中。
多个 og:/twitter:image 标签
如果您想允许多个 og:image 标签,最好不要使用这种仅 TypoScript 的解决方案。原因是 og:image:width
/og:image:height
元标记必须跟在 og:image 元标记之后。如果您仍想完成多个 og:image
标记,最好将 page.headerData
与 FLUIDTEMPLATE
结合使用(只要您想使用 TypoScript)。
PS: 我听说计划在 TYPO3 CMS v9 LTS 中实施基本 SEO 字段
对我来说,og:image 继承的解决方案很重要。 "tx_myext_ogimage" 是 table 页中的一个字段。
10 = IMG_RESOURCE
10 {
stdWrap.wrap = <meta property="og:image" content="{getIndpEnv:TYPO3_SITE_URL}|" />
stdWrap.insertData = 1
stdWrap.required = 1
file {
import.data = levelfield:-1, tx_myext_ogimage, slide
treatIdAsReference = 1
import.listNum = 0
}
}
针对 TYPO3 9.5 或更高版本的 levelmedia:-1, slide
解决方案。
Doc TYPO3 SEO 核心扩展
page.meta {
og:image.stdWrap.cObject = TEXT
og:image.stdWrap.cObject {
if.isFalse.field = og_image
stdWrap.typolink {
parameter.stdWrap.cObject = FILES
parameter.stdWrap.cObject {
references {
data = levelmedia:-1, slide
}
renderObj = IMG_RESOURCE
renderObj {
file {
import.data = file:current:publicUrl
crop.data = file:current:crop
width = 1200c
height = 630c
}
}
}
returnLast = url
forceAbsoluteUrl = 1
}
}
}
我正在寻找一种方法来获取 TypoScript 中 IMG_RESOURCE 对象的绝对路径。由于 baseUrl 对我来说不是真正的解决方案,所以简单地添加 config.baseUrl = example.com
不是我接受的东西。
那么,我该如何解决这样的问题:
ogimage = FILES
ogimage{
references {
table = pages
uid.data = page:uid
fieldName = tx_csseo_og_image
}
renderObj = IMG_RESOURCE
renderObj {
file.import.data = file:current:publicUrl
file.height < plugin.tx_csseo.social.openGraph.image.height
file.width < plugin.tx_csseo.social.openGraph.image.width
# this needs to be generated with an absolute URL
stdWrap.dataWrap = <meta property="og:image" content="|" />
}
}
我不明白你的问题。你想达到什么目的?
你在寻找类似 config.absRefPrefix
的东西吗?
无论如何你不应该使用
file.import.data = file:current:publicUrl
尝试使用
file {
import.data = file:current:uid
treatIdAsReference = 1
:
您可能需要这样的东西:
ogimage = FILES
ogimage {
//get the image url from the seo field
references {
table = pages
uid.data = page:uid
fieldName = tx_csseo_og_image
}
renderObj = COA
renderObj {
10 = TEXT
10.data = DB:sys_domain:1:domainName
10.wrap = |
20 = TEXT
20.data = file:current:publicUrl
20.wrap = /|
}
}
我自己找到了解决办法。问题的关键是根本不要在任何时候设置域。并从文件和 IMG_RESOURCE 对象中渲染绝对 URL,以便能够调整图像大小。
ogimage = FILES
ogimage{
references {
table = pages
uid.data = page:uid
fieldName = tx_csseo_og_image
}
renderObj = TEXT
renderObj {
typolink{
parameter.stdWrap{
cObject = IMG_RESOURCE
cObject{
file.import.data = file:current:uid
file.treatIdAsReference = 1
file.height < plugin.tx_csseo.social.openGraph.image.height
file.width < plugin.tx_csseo.social.openGraph.image.width
}
}
returnLast = url
forceAbsoluteUrl = 1
}
wrap = <meta property="og:image" content="|" />
}
}
这将通过 IMG_RESOURCE 生成调整大小的图像,然后通过拼写链接为该生成的图像生成绝对 url,然后将其包装在元标记中。
一个更完整的 TypoScript-Only 示例可以是我的以下示例片段
它在 page.meta
内呈现以下元标记,无需使用 page.headerData.
:
og:image
og:image:width
og:image:height
og:image:type
TypoScript 设置:
page {
meta {
og:image {
attribute = property
stdWrap.cObject = FILES
stdWrap.cObject {
references {
table = pages
uid.data = uid
fieldName = tx_theme_facebook_image
}
begin = 0
maxItems = 1
renderObj = TEXT
renderObj {
stdWrap.typolink {
parameter.stdWrap {
cObject = IMG_RESOURCE
cObject {
file {
crop.data = file:current:crop
cropVariant = facebook_variant1
import.data = file:current:uid
treatIdAsReference = 1
}
}
}
returnLast = url
forceAbsoluteUrl = 1
}
required = 1
}
}
}
og:image:width {
attribute = property
stdWrap.cObject = TEXT
stdWrap.cObject {
data = TSFE:lastImgResourceInfo|0
}
stdWrap.if.isTrue.field = tx_theme_facebook_image
}
og:image:height {
attribute = property
stdWrap.cObject = TEXT
stdWrap.cObject {
data = TSFE:lastImgResourceInfo|1
}
stdWrap.if.isTrue.field = tx_theme_facebook_image
}
og:image:type {
attribute = property
stdWrap.cObject = TEXT
stdWrap.cObject {
data = TSFE:lastImgResourceInfo|2
stdWrap.wrap = image/|
required = 1
}
stdWrap.if.isTrue.field = tx_theme_facebook_image
}
}
}
一些旁注
此代码段仅限于图像 FAL 关系 (IRRE)。文件扩展名限制必须在您的 field/column(在本例中为 pages.tx_theme_facebook_image
)的 TCA 配置中正确配置。即使是最大项目的数量也必须限制在 TCA 配置中。
多个 og:/twitter:image 标签
如果您想允许多个 og:image 标签,最好不要使用这种仅 TypoScript 的解决方案。原因是 og:image:width
/og:image:height
元标记必须跟在 og:image 元标记之后。如果您仍想完成多个 og:image
标记,最好将 page.headerData
与 FLUIDTEMPLATE
结合使用(只要您想使用 TypoScript)。
PS: 我听说计划在 TYPO3 CMS v9 LTS 中实施基本 SEO 字段
对我来说,og:image 继承的解决方案很重要。 "tx_myext_ogimage" 是 table 页中的一个字段。
10 = IMG_RESOURCE
10 {
stdWrap.wrap = <meta property="og:image" content="{getIndpEnv:TYPO3_SITE_URL}|" />
stdWrap.insertData = 1
stdWrap.required = 1
file {
import.data = levelfield:-1, tx_myext_ogimage, slide
treatIdAsReference = 1
import.listNum = 0
}
}
针对 TYPO3 9.5 或更高版本的 levelmedia:-1, slide
解决方案。
Doc TYPO3 SEO 核心扩展
page.meta {
og:image.stdWrap.cObject = TEXT
og:image.stdWrap.cObject {
if.isFalse.field = og_image
stdWrap.typolink {
parameter.stdWrap.cObject = FILES
parameter.stdWrap.cObject {
references {
data = levelmedia:-1, slide
}
renderObj = IMG_RESOURCE
renderObj {
file {
import.data = file:current:publicUrl
crop.data = file:current:crop
width = 1200c
height = 630c
}
}
}
returnLast = url
forceAbsoluteUrl = 1
}
}
}