如何使用 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
}