gpt4 book ai didi

mysql - 为什么子页面无法加载?

转载 作者:行者123 更新时间:2023-11-29 06:37:41 24 4
gpt4 key购买 nike

我正在学习 TYPO3 并创建了一个包含多个子页面的网站,但是每次我单击子页面时都会收到此错误。

An exception occurred while executing 'SELECT * FROM `tt_content` WHERE 
(`tt_content`.`pid` IN (19)) AND (`colPos`=Array) AND
(`tt_content`.`sys_language_uid` = 0) AND ((`tt_content`.`deleted` = 0) AND
(`tt_content`.`t3ver_state` <= 0) AND (`tt_content`.`pid` <> -1) AND
(`tt_content`.`hidden` = 0) AND (`tt_content`.`starttime` <= 1540989540) AND
((`tt_content`.`endtime` = 0) OR (`tt_content`.`endtime` > 1540989540)) AND
(((`tt_content`.`fe_group` = '') OR (`tt_content`.`fe_group` IS NULL) OR
(`tt_content`.`fe_group` = '0') OR (FIND_IN_SET('0',
`tt_content`.`fe_group`)) OR (FIND_IN_SET('-1', `tt_content`.`fe_group`)))))
ORDER BY `sorting` ASC': Unknown column 'Array' in 'where clause'

为什么是 colPos = Array ?它不应该是一个数字而不是一个数组吗?

这位于我的 DynamicContent.typoscript 文件中。

lib.dynamicContent = COA
lib.dynamicContent {
5 = LOAD_REGISTER
5 {
colPos.cObject = TEXT
colPos.cObject {
field = colPos
ifEmpty.cObject = TEXT
ifEmpty.cObject {
value.current = 1
ifEmpty = 0
}
}
pageUid.cObject = TEXT
pageUid.cObject {
field = pageUid
ifEmpty.data = TSFE:id
}
contentFromPid.cObject = TEXT
contentFromPid.cObject {
data = DB:pages:{register:pageUid}:content_from_pid
data.insertData = 1
}
wrap.cObject = TEXT
wrap.cObject {
field = wrap
}
}
20 = CONTENT
20 {
table = tt_content
select {
includeRecordsWithoutDefaultTranslation = 1
orderBy = sorting
where = {#colPos}={register:colPos}
where.insertData = 1
pidInList.data = register:pageUid
pidInList.override.data = register:contentFromPid
}
stdWrap {
dataWrap = {register:wrap}
required = 1
}
}
90 = RESTORE_REGISTER
}

例如,如果我将 {register:colPos} 更改为 0,则网站会加载,但布局会出错。你能解释一下为什么我会遇到这个异常吗?

最佳答案

在 TYPO3 中呈现内容

以一种或另一种方式,您必须将后端列映射到 Fluid(变量或 viewhelper)。为此,需要 TypoScript。

以前,您必须在 TypoScript 中编写类似的内容(注意注释):

page = PAGE
page {
10 = FLUIDTEMPLATE
10 {
// [...]

variables {
// Add new variable of type CONTENT.
// 'colPos=0' selects all content in backend column with number '0':
leftColumn = CONTENT
leftColumn {
table = tt_content
select {
orderBy = sorting
where = colPos=0
where.insertData = 1
}
}

// Copy configuration of the first variable,
// but change the column number to '1':
rightColumn < .leftColumn
rightColumn.select.where = colPos=1
}
}
}

在 Fluid 模板中,您可以使用此变量在需要的地方呈现内容(简化):

<div class="row">
<div class="col-sm-6">{leftColumn}</div>
<div class="col-sm-6">{rightColumn}</div>
</div>

对于您需要的每个新列,都需要在 TypoScript 中添加一个新变量。想象一下总共有 15 列的页面布局:将所有这些映射到 Fluid 是很麻烦的。


新方式:lib.dynamicContent

为了防止这种情况,发明了这个TypoScript Helper。它是相当新的 TYPO3 Site Package Tutorial 的一部分。我假设您已经阅读了本教程,因为您的 lib.dynamicContent 版本是相同的。

扩展版本也可以在 bootstrap_package extension 中找到。 ,这也是 TYPO3 官方入门包的一部分。我不会在这里解释它的所有选项。

因此,我认为这个解决方案是 TYPO3 中渲染列的当前状态。

它有什么作用?

简而言之,它基本上会将内容映射到您的 Fluid 模板,就像上面显示的 leftColumn = CONTENT 部分一样。但它会节省您使用一些 TypoScript 函数手动映射所有列的工作。

在 Fluid 模板中,您将使用 Fluid viewhelper f:cObject。此 View 帮助程序提供与 TypoScript 的连接。使用 data 属性,您可以将值传递给此 TypoScript。对于 lib.dynamicContent 的基本版本,您可以传递所需的 colPos 编号。您也可以选择分配与当前页面 ID 不同的页面 ID。然后,此 TypoScript 将使用它来动态构建 select 语句:

<div class="row">
<div class="col-sm-6">
<f:cObject typoscriptObjectPath="lib.dynamicContent" data="{colPos: '0'}"/>
</div>
<div class="col-sm-6">
<f:cObject typoscriptObjectPath="lib.dynamicContent" data="{colPos: '1'}"/>
</div>
</div>

您的具体案例

为了回答您最初的问题,我们需要更多信息:

  • 您使用哪个 TYPO3 版本?
  • 您是如何尝试在 Fluid 模板中渲染内容的?您是否只在数据属性中传递了 colPos 数字?

我尝试在 TYPO3 v8 和 v9 中重现您的错误消息,但没有成功。在所有出现异常的情况下,colPos 部分始终包含数据属性的确切内容,而不是 Array

关于mysql - 为什么子页面无法加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53083722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com