访问流体模板中页面记录的MM关系
Access MM relation of page record in fluid template
我目前正在使用 TYPO3 构建一个扩展,它确实通过另一个字段扩展了 TYPO3 核心的 pages
table。
我的问题描述:
该字段是我自己记录的MM关系,包含描述,一些图片等等...
因为我的扩展不提供自己的插件(它是一个通用站点扩展,提供站点模板等),所以我必须通过流体模板访问 pages
记录的新字段。
但是,通过访问页面信息数组中的这个字段(使用 <v:page.info field="myfield" ... />
或 {data.myfield}
),我只能得到引用行的当前计数(页面记录中数据库列的值)。
所以,我的问题是:
如何在我的流动模板中访问该附加字段的内容,迫使 TYPO3 识别这个跳过 MM table 到我引用记录的跳转?通常的“TYPO3 方式”是什么?
或者我是否必须编写自己的 ViewHelper 来获取两条记录之间的引用?
是否有任何 TypoScript 解决方案?
我的 TCA(扩展页面)是什么样的:
$temporaryColumns = array(
'tx_user_myext_myfield' => array(
/* ... some smaller unimportant TCA settings here ... */
'config' => array(
'type' => 'group',
'internal_type' => 'db',
'allowed' => 'tx_user_myext_mycustomrow',
'foreign_table' => 'tx_user_myext_mycustomrow',
'MM' => 'tx_user_myext_mycustomrow_pages_MM',
'MM_hasUidField' => 1,
'multiple' => 1
)
)
);
(当然,我将 $temporaryColumns
传递给 addTCAcolumns
和 addToAllTCAtypes
。后端功能工作正常 - 这不是问题所在。)
编辑: 我无法为此构建插件,因为它是网站的通用部分。 (所以,会在模板中解决。)只有记录关系可以由用户更改。
希望你能帮助我;非常感谢您对这个问题的任何答复。
最好的方法是 extend/create 页面模型并创建一个插件来显示您的内容。
也可以用 TypoScript 做到这一点
myRecords = CONTENT
myRecords {
table = tx_user_myext_mycustomrow
select {
pidInList = root,-1
selectFields = tx_user_myext_mycustomrow.*
join = tx_user_myext_mycustomrow_pages_MM ON tx_user_myext_mycustomrow_pages_MM.uid_local = tx_user_myext_mycustomrow.uid
where.data = field:_ORIG_uid // field:uid
where.intval = 1
where.wrap = tx_user_myext_mycustomrow_pages_MM.uid_foreign=|
orderBy = tx_user_myext_mycustomrow_pages_MM.sorting_foreign
}
renderObj = COA
renderObj.10 = TEXT
renderObj.10.field = somefield
renderObj.10.wrap = <h1>|</h1>
}
# add myRecords to your fluid variables. I assume that the fluidtemplate is in page.10
page.10.variables.myRecords < myRecords
在流体中:
<f:render.raw>{myRecords}</f:render.raw>
如您所见,TS 解决方案与 Fluid 几乎没有关系,因为 html 是在 TS 中构建的。我建议使用自己的插件。将关系字段添加到页面模型并创建一个小插件花费的时间不多,是进一步开发的良好培训。
你不能用 DatabaseQueryProcessor
吗?
TypoScript 配置示例:
10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
10 {
table = tt_address
pidInList = 123
where = company="Acme" AND first_name="Ralph"
order = RAND()
as = addresses
dataProcessing {
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
10 {
references.fieldName = image
}
}
}
使用 DatabaseQueryProcessor(如@bschauer 所说),可以使用部分将您的 HTML 与 Typoscript 分开。
TypoScript 配置:
page.10.variables.myRecords = CONTENT
page.10.variables.myRecords {
table = tx_user_myext_mycustomrow
select {
pidInList = root,-1
selectFields = tx_user_myext_mycustomrow.*
join = tx_user_myext_mycustomrow_pages_MM ON tx_user_myext_mycustomrow_pages_MM.uid_local = tx_user_myext_mycustomrow.uid
where.data = field:uid
where.intval = 1
where.wrap = tx_user_myext_mycustomrow_pages_MM.uid_foreign=|
orderBy = tx_user_myext_mycustomrow_pages_MM.sorting_foreign
}
renderObj = FLUIDTEMPLATE
renderObj {
file = EXT:tx_user_myext/Resources/Private/Partials/MyTemplate.html
dataProcessing {
10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
10.references.fieldName = tx_user_myext_myfield
}
}
}
}
部分MyTemplate.html:
h1>{data.somefield}</h1>
在您的流体模板中:
<f:format.raw>{myRecords}</f:format.raw>
我目前正在使用 TYPO3 构建一个扩展,它确实通过另一个字段扩展了 TYPO3 核心的 pages
table。
我的问题描述:
该字段是我自己记录的MM关系,包含描述,一些图片等等...
因为我的扩展不提供自己的插件(它是一个通用站点扩展,提供站点模板等),所以我必须通过流体模板访问 pages
记录的新字段。
但是,通过访问页面信息数组中的这个字段(使用 <v:page.info field="myfield" ... />
或 {data.myfield}
),我只能得到引用行的当前计数(页面记录中数据库列的值)。
所以,我的问题是:
如何在我的流动模板中访问该附加字段的内容,迫使 TYPO3 识别这个跳过 MM table 到我引用记录的跳转?通常的“TYPO3 方式”是什么?
或者我是否必须编写自己的 ViewHelper 来获取两条记录之间的引用?
是否有任何 TypoScript 解决方案?
我的 TCA(扩展页面)是什么样的:
$temporaryColumns = array(
'tx_user_myext_myfield' => array(
/* ... some smaller unimportant TCA settings here ... */
'config' => array(
'type' => 'group',
'internal_type' => 'db',
'allowed' => 'tx_user_myext_mycustomrow',
'foreign_table' => 'tx_user_myext_mycustomrow',
'MM' => 'tx_user_myext_mycustomrow_pages_MM',
'MM_hasUidField' => 1,
'multiple' => 1
)
)
);
(当然,我将 $temporaryColumns
传递给 addTCAcolumns
和 addToAllTCAtypes
。后端功能工作正常 - 这不是问题所在。)
编辑: 我无法为此构建插件,因为它是网站的通用部分。 (所以,会在模板中解决。)只有记录关系可以由用户更改。
希望你能帮助我;非常感谢您对这个问题的任何答复。
最好的方法是 extend/create 页面模型并创建一个插件来显示您的内容。
也可以用 TypoScript 做到这一点
myRecords = CONTENT
myRecords {
table = tx_user_myext_mycustomrow
select {
pidInList = root,-1
selectFields = tx_user_myext_mycustomrow.*
join = tx_user_myext_mycustomrow_pages_MM ON tx_user_myext_mycustomrow_pages_MM.uid_local = tx_user_myext_mycustomrow.uid
where.data = field:_ORIG_uid // field:uid
where.intval = 1
where.wrap = tx_user_myext_mycustomrow_pages_MM.uid_foreign=|
orderBy = tx_user_myext_mycustomrow_pages_MM.sorting_foreign
}
renderObj = COA
renderObj.10 = TEXT
renderObj.10.field = somefield
renderObj.10.wrap = <h1>|</h1>
}
# add myRecords to your fluid variables. I assume that the fluidtemplate is in page.10
page.10.variables.myRecords < myRecords
在流体中:
<f:render.raw>{myRecords}</f:render.raw>
如您所见,TS 解决方案与 Fluid 几乎没有关系,因为 html 是在 TS 中构建的。我建议使用自己的插件。将关系字段添加到页面模型并创建一个小插件花费的时间不多,是进一步开发的良好培训。
你不能用 DatabaseQueryProcessor
吗?
TypoScript 配置示例:
10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
10 {
table = tt_address
pidInList = 123
where = company="Acme" AND first_name="Ralph"
order = RAND()
as = addresses
dataProcessing {
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
10 {
references.fieldName = image
}
}
}
使用 DatabaseQueryProcessor(如@bschauer 所说),可以使用部分将您的 HTML 与 Typoscript 分开。
TypoScript 配置:
page.10.variables.myRecords = CONTENT
page.10.variables.myRecords {
table = tx_user_myext_mycustomrow
select {
pidInList = root,-1
selectFields = tx_user_myext_mycustomrow.*
join = tx_user_myext_mycustomrow_pages_MM ON tx_user_myext_mycustomrow_pages_MM.uid_local = tx_user_myext_mycustomrow.uid
where.data = field:uid
where.intval = 1
where.wrap = tx_user_myext_mycustomrow_pages_MM.uid_foreign=|
orderBy = tx_user_myext_mycustomrow_pages_MM.sorting_foreign
}
renderObj = FLUIDTEMPLATE
renderObj {
file = EXT:tx_user_myext/Resources/Private/Partials/MyTemplate.html
dataProcessing {
10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
10.references.fieldName = tx_user_myext_myfield
}
}
}
}
部分MyTemplate.html:
h1>{data.somefield}</h1>
在您的流体模板中:
<f:format.raw>{myRecords}</f:format.raw>