如何使用 Typoscript 使用 GPvar 从相关 Table 获取数据库字段
How to get DB field from related Table with GPvar using Typoscript
我正在使用 TYPO3 9.5 并希望使用 Typoscript 从相关的 table 中获取一个字段。我尝试了不同的变体,但都没有用。
这是我最后一次也是从我的角度来看最有前途但行不通的方法。我希望它至少有助于阐明我的目标:
1 = LOAD_REGISTER
1.param = TEXT
1.param.dataWrap = DB : tx_hproducts_domain_model_product:{GP:tx_hproducts_hproduct|id}:relation
1.param.wrap3 = {|}
1.param.insertData = 1
2 = CONTENT
2.table = tx_hproducts_domain_model_related
2.select {
pidInList = 43
orderBy = sorting
where = uid = {REGISTER:param}
where.insertData = 1
}
2.renderObj = COA
2.renderObj {
10 = TEXT
10.stdWrap.field = name
}
所以实际上我得到的产品 ID 作为 GetVar,select 来自相关数据库的记录 ID。我的第二步我想 select 来自相关 table 的记录的名称。
希望不要造成混淆,并且有解决方案。
使用PHP,生活会更美好;)
假设你的供应商名称是 LUFI
并且扩展密钥是 extkey
它可以是这样的(当然我不会尝试使用你的表,而是得到一些 tt_content
硬编码的行 uid
):
typo3conf/ext/extkey/Classes/AdditionalHeaders.php
<?php
namespace LUFI\Extkey;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Utility\DebuggerUtility;
class AdditionalHeaders
{
public function addHeaders()
{
/** @var \TYPO3\CMS\Core\Database\Query\QueryBuilder $queryBuilder */
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
$queryBuilder
->getRestrictions()
->removeAll();
$res = $queryBuilder
->select('uid', 'pid', 'header')
->from('tt_content')
->where($queryBuilder
->expr()
->orX(
$queryBuilder->expr()->eq(
'pid',
$queryBuilder->createNamedParameter('12', \PDO::PARAM_INT)
),
$queryBuilder->expr()->eq(
'pid',
$queryBuilder->createNamedParameter('13', \PDO::PARAM_INT)
),
)
)
->orderBy('sorting', 'ASC');
// DebuggerUtility::var_dump($res->getSQL(), 'SQL', 8, false);
// DebuggerUtility::var_dump($res->getParameters(), 'parameters');
$statement = $res->execute();
/** @var \TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController $tsfe */
$tsfe = $GLOBALS['TSFE'];
while ($row = $statement->fetch()) {
// make sure the index for additionalHeaderData is unique ie by adding UID of record
$tsfe->additionalHeaderData['tt_content_meta' . $row['uid']] = '<meta name="some-header" content="' . $row['header'] . '"/>';
}
return null;
}
}
在您的 TypoScript 模板设置中:
page.9999 = USER
page.9999 {
userFunc = LUFI\Extkey\AdditionalHeaders->addHeaders
}
我正在使用 TYPO3 9.5 并希望使用 Typoscript 从相关的 table 中获取一个字段。我尝试了不同的变体,但都没有用。
这是我最后一次也是从我的角度来看最有前途但行不通的方法。我希望它至少有助于阐明我的目标:
1 = LOAD_REGISTER
1.param = TEXT
1.param.dataWrap = DB : tx_hproducts_domain_model_product:{GP:tx_hproducts_hproduct|id}:relation
1.param.wrap3 = {|}
1.param.insertData = 1
2 = CONTENT
2.table = tx_hproducts_domain_model_related
2.select {
pidInList = 43
orderBy = sorting
where = uid = {REGISTER:param}
where.insertData = 1
}
2.renderObj = COA
2.renderObj {
10 = TEXT
10.stdWrap.field = name
}
所以实际上我得到的产品 ID 作为 GetVar,select 来自相关数据库的记录 ID。我的第二步我想 select 来自相关 table 的记录的名称。
希望不要造成混淆,并且有解决方案。
使用PHP,生活会更美好;)
假设你的供应商名称是 LUFI
并且扩展密钥是 extkey
它可以是这样的(当然我不会尝试使用你的表,而是得到一些 tt_content
硬编码的行 uid
):
typo3conf/ext/extkey/Classes/AdditionalHeaders.php
<?php
namespace LUFI\Extkey;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Utility\DebuggerUtility;
class AdditionalHeaders
{
public function addHeaders()
{
/** @var \TYPO3\CMS\Core\Database\Query\QueryBuilder $queryBuilder */
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tt_content');
$queryBuilder
->getRestrictions()
->removeAll();
$res = $queryBuilder
->select('uid', 'pid', 'header')
->from('tt_content')
->where($queryBuilder
->expr()
->orX(
$queryBuilder->expr()->eq(
'pid',
$queryBuilder->createNamedParameter('12', \PDO::PARAM_INT)
),
$queryBuilder->expr()->eq(
'pid',
$queryBuilder->createNamedParameter('13', \PDO::PARAM_INT)
),
)
)
->orderBy('sorting', 'ASC');
// DebuggerUtility::var_dump($res->getSQL(), 'SQL', 8, false);
// DebuggerUtility::var_dump($res->getParameters(), 'parameters');
$statement = $res->execute();
/** @var \TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController $tsfe */
$tsfe = $GLOBALS['TSFE'];
while ($row = $statement->fetch()) {
// make sure the index for additionalHeaderData is unique ie by adding UID of record
$tsfe->additionalHeaderData['tt_content_meta' . $row['uid']] = '<meta name="some-header" content="' . $row['header'] . '"/>';
}
return null;
}
}
在您的 TypoScript 模板设置中:
page.9999 = USER
page.9999 {
userFunc = LUFI\Extkey\AdditionalHeaders->addHeaders
}