You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Fluid模板中通过id和pid获取tx_news标签的标题

实现方案(基于TYPO3 + tx_news扩展环境)

两种最常用的实现方式,按适用场景选择即可:

方法1:使用DatabaseQueryProcessor预加载数据(性能最优,推荐)

适合固定id/pid的标签展示场景,在模板渲染前就把数据注入,不需要在模板层面做额外处理:

  • 先在对应页面/模板的Typoscript配置中添加数据处理逻辑:
page.10 = FLUIDTEMPLATE
page.10 {
  dataProcessing {
    # 可根据实际需求调整排序数值
    20 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
    20 {
      table = tx_news_domain_model_tag
      # 填入给定的标签pid
      pidInList = 123
      # 填入给定的标签id
      uidInList = 45
      as = targetNewsTag
    }
  }
}
  • 之后在任意关联该Typoscript的Fluid模板中直接调用即可:
<f:if condition="{targetNewsTag.0}">
  <span>标签名称:{targetNewsTag.0.title}</span>
</f:if>

取索引0是因为DatabaseQueryProcessor默认返回查询结果数组,单条数据固定取下标0的条目即可。

方法2:自定义ViewHelper实现灵活调用

适合需要在多个模板零散传入不同id/pid查询标签的场景:

  • 首先在自己的扩展中创建ViewHelper文件,路径为your_extension/Classes/ViewHelpers/News/GetTagTitleViewHelper.php,参考代码:
<?php
namespace YourVendor\YourExtension\ViewHelpers\News;

use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;

class GetTagTitleViewHelper extends AbstractViewHelper
{
    public function initializeArguments()
    {
        $this->registerArgument('tagUid', 'int', 'tx_news标签的uid', true);
        $this->registerArgument('tagPid', 'int', 'tx_news标签的存储pid', true);
    }

    public function render()
    {
        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
            ->getQueryBuilderForTable('tx_news_domain_model_tag');
        $title = $queryBuilder
            ->select('title')
            ->from('tx_news_domain_model_tag')
            ->where(
                $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($this->arguments['tagUid'], \PDO::PARAM_INT)),
                $queryBuilder->expr()->eq('pid', $queryBuilder->createNamedParameter($this->arguments['tagPid'], \PDO::PARAM_INT))
            )
            ->executeQuery()
            ->fetchOne();
        return $title ?: '';
    }
}
  • 在需要调用的Fluid模板顶部引入自己的ViewHelper命名空间,之后直接传参调用即可:
{namespace yourns = YourVendor\YourExtension\ViewHelpers}

<!-- 调用示例 -->
<span>标签名称:<yourns:news.getTagTitle tagUid="45" tagPid="123" /></span>
注意事项
  • 不要在Fluid模板中直接编写原生SQL查询,存在性能和SQL注入风险
  • 如果站点开启多语言,需要在查询条件中补充sys_language_uid的过滤逻辑,避免返回错误语言的标签标题
  • 生产环境建议给查询结果加缓存,降低重复查询的数据库压力

内容的提问来源于stack exchange,提问作者chicky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:15:03