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

TYPO3 tx_news生成指向隐藏默认语言页面的无效链接如何阻止?

TYPO3 tx_news 内部链接指向隐藏默认页面的问题解决方案

我最近碰到了和你一模一样的场景:一篇标记为internal link的新闻文章,在默认语言创建后完成了本地化,文章里的内部链接指向了一个开启了Hide default translation of page标记的页面。编辑用tx_news插件的list of selected items功能在默认语言选中这篇新闻后,TYPO3居然生成了指向那个已隐藏默认页面的无效链接,实在头疼。

你的核心需求很明确:想让TYPO3/tx_news只在目标页面可用时才渲染链接,对吧?结合你给出的配置(TYPO3 8.7.13、tx_news 6.3.0),我整理了几个可行的解决思路:

1. 修改Fluid模板直接控制链接渲染

tx_news的前端输出全靠Fluid模板,我们可以在模板里加个判断,只有当目标页面状态正常时才渲染链接。

比如找到你正在使用的新闻列表/详情模板(通常在typo3conf/ext/your_template/Resources/Private/Templates/News/下的List.html或Detail.html),找到处理内部链接的代码块,改成这样:

<f:if condition="{newsItem.internalLink}">
    <f:then>
        <!-- 检查页面是否未隐藏且未开启隐藏默认翻译标记 -->
        <f:if condition="{newsItem.internalLink.hidden} != 1 && {newsItem.internalLink.hideDefaultTranslation} != 1">
            <a href="{f:uri.page(pageUid: newsItem.internalLink.uid)}">{newsItem.title}</a>
        </f:if>
    </f:then>
    <f:else>
        <!-- 没有有效链接时直接显示标题 -->
        {newsItem.title}
    </f:else>
</f:if>

这个方法最直接,不需要复杂的配置,改完模板就能生效。

2. 用Typoscript过滤无效新闻条目

如果想从根源上避免无效新闻出现在列表里,可以在Typoscript里配置查询条件,让tx_news只加载内部链接指向有效页面的新闻:

plugin.tx_news.settings.persistence.classes {
    GeorgRinger\News\Domain\Model\News {
        querySettings {
            # 关联pages表,通过internal_link字段关联
            join = pages ON tx_news_domain_model_news.internal_link = pages.uid
            # 过滤掉隐藏或开启了隐藏默认翻译的页面对应的新闻
            where = pages.hidden = 0 AND pages.hide_default_translation = 0
        }
    }
}

这样编辑选中的新闻如果指向无效页面,会直接被排除在列表之外,自然不会生成无效链接。

3. 扩展tx_news模型(进阶方案)

如果需要更灵活的判断逻辑,可以自定义一个新闻模型的扩展,添加方法来判断链接有效性:

namespace YourVendor\YourExtension\Domain\Model;

class News extends \GeorgRinger\News\Domain\Model\News {

    /**
     * 判断内部链接是否有效
     * @return bool
     */
    public function hasValidInternalLink(): bool {
        $internalLink = $this->getInternalLink();
        if (!$internalLink) {
            return false;
        }
        // 检查页面是否未隐藏且未开启隐藏默认翻译
        return !$internalLink->isHidden() && !$internalLink->getHideDefaultTranslation();
    }
}

之后在模板里就可以用{newsItem.hasValidInternalLink()}来做条件判断,渲染逻辑会更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:28:33