【问题标题】:TYPO3: RealURL + tt_news + 404 doesnt workTYPO3:RealURL + tt_news + 404 不起作用
【发布时间】:2012-07-20 13:56:21
【问题描述】:

我想给 tt_news 的 SINGLE 视图所在的页面 (id=57) 提供一个特殊的 URL,所以我用它来配置 RealURL:

    'fixedPostVars' => array(
        '57' => array(
            array(
                'GETvar' => 'tx_ttnews[tt_news]',
                'lookUpTable' => array(
                    'table' => 'tt_news',
                    'id_field' => 'uid',
                    'alias_field' => 'title',
                    'addWhereClause' => ' AND NOT deleted',
                    'useUniqueCache' => 1,
                    'useUniqueCache_conf' => array(
                        'strtolower' => 1,
                        'spaceCharacter' => '-',
                    ),
                ),
            ),
        ),
    ),

问题是 404 中的重定向不起作用:

http://www.mypage.com/blog/artikel/asdasd ---> 工作正常。转到第 404 页。

http://www.mypage.com/blog/artikel/whatever/whateveragain ---> 工作正常。转到第 404 页。

http://www.mypage.com/blog/artikel/whatever ---> 不会重定向到 404。我得到“没有给出 news_id。”

【问题讨论】:

    标签: http-status-code-404 typo3 tt-news realurl


    【解决方案1】:

    这对于TYPO3 来说是正常的,该页面存在并包含一个插件,因此不能认为它不存在它并不关心扩展程序没有获得所有必需的参数。

    有两个解决方案,我推荐的一个是编写将在页面渲染过程开始时运行的小扩展,将检查参数是否存在以及它是否指向现有且未禁用的 tt_news 记录,在其他情况下它应该返回完全限定的 404 状态并重定向到您的 404 页面 - 这将有利于 目的。

    function main($content, $conf) {
    
        $newsParams = t3lib_div::_GET('tx_ttnews');
        if (is_array($newsParams) && intval($newsParams['tt_news']) > 0) {
            $foundItems = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('uid', 'tt_news', 'deleted=0 AND hidden=0 AND uid=' . intval($newsParams['tt_news']));
    
            if (count($foundItems) == 1) {
                return null; // if news exists and is available - return null
            }
        }
    
        // If above condition aren't met, set redirect header
        // return null after that to avoid futher code processing
    
        header('Location: http://yourdomain.tld/404.html');
        return null;
    
    }
    

    在 TypoScript 中仅在 page=57 上添加这一行:

    page.1 < plugin.tx_yourext_pi1
    

    其他解决方案

    更简单,它只是检查 SINGLE 视图所需的 URL 中的参数是否存在:&tx_ttnews[tt_news]=123 是否存在并且大于 0,如果不只是将重定向标签添加到页面的 &lt;head&gt; 部分(只写从我的头顶上,所以自己调试它,请)

    在您的页面57 添加extension teamplateTemplate 模块并在设置中使用condition 检查参数是否存在:

    [globalVar = GP:tx_ttnews|tt_news < 1]
      page.headerData.1 = TEXT
      page.headerData.1.value = <meta http-equiv="refresh" content="0;url=http://www.mypage.com/404">
    [global]
    

    【讨论】:

    • 呵呵,当然我写了坏样本条件应该是相反的! (检查编辑条件)
    • 第二种解决方案可以正常工作,但它非常不雅,因为您会看到“没有给出新闻 ID”的闪现。我不知道如何构建您在第一种情况下提到的扩展。
    • 最快的方法是使用typo3.org/extensions/repository/view/kickstarter - 创建一个新的ext并在其中添加一个FE插件。唯一的工作是检查是否有参数&amp;tx_ttnews[tt_news] 并且您还可以选择检查其中给出的消息是否存在于数据库中。否则,您只需要重定向到另一个页面。稍后您可以通过 TS 将其添加到第 57 页:page.1 &lt; plugin.tx_yourext_pi1
    • 对不起,我表达得很糟糕。我确实知道如何使用 kickstarter 进行扩展,但我不知道如何检查您提到的条件。到目前为止,我只使用 Typoscript 而不是 PHP 构建了扩展。
    • kickstarter 是 click-clicktool,所以你必须安装它并玩一会儿,很快你就会创建一个只有一个 fe 插件的小扩展。会有一个类似class.tx_yourext_pi1.php 的类 - 所以如果你要安装扩展并将它与 TS 一起放置,正如我在之前的评论中显示的那样,TYPO3 将在每个页面加载时调用 main() 方法......使用t3lib_div::_GP获取 url 的参数 - typo3.org/api/typo3/…(不要使用常见的 $_GET !)并执行常见的 PHP if 比较
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多