TYPO3: RealURL + tt_news + 404 не работает

Я хотел указать специальный URL-адрес для страницы (id = 57), где находится ЕДИНОЕ представление tt_news, поэтому я использовал его для настройки 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».


person Enrique Moreno Tent    schedule 20.07.2012    source источник


Ответы (1)


Это нормально для TYPO3, что страница существует и содержит плагин, поэтому ее нельзя рассматривать как несуществующую, ее не волнует, что расширение не получило все необходимые параметры.

Есть два решения, одно из которых я бы порекомендовал - это написать небольшое расширение, которое будет запускаться в начале процесса рендеринга страницы, будет проверять, существует ли параметр И если он указывает на существующую и не отключенную запись tt_news, в другом случае он должен возвращать полностью квалифицированный 404 статус и перенаправление на вашу страницу 404 - это будет полезно для seo целей.

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 только на странице = 57 добавьте эту строку:

page.1 < plugin.tx_yourext_pi1

Другое решение

намного проще, просто проверить, требуется ли параметр в URL-адресе для ОДНОГО просмотра: & tx_ttnews [tt_news] = 123 существует и больше 0, и если не просто добавить тег перенаправления в раздел <head> страницы (пишу прямо из моей головы , так что отлаживайте сами, пожалуйста)

на своей странице 57 добавьте extension teamplate с Template модулем и при настройке используйте условие, чтобы проверить, существует ли параметр:

[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]
person biesior    schedule 20.07.2012
comment
Хех, конечно я написал плохой образец, условие должно быть обратным! (проверьте отредактированное состояние) - person biesior; 22.07.2012
comment
Второе решение работает нормально, но оно довольно неэлегантно, поскольку вы видите мигание сообщения No news ID. Я понятия не имею, как построить расширение, которое вы упомянули в первом случае. - person Enrique Moreno Tent; 24.07.2012
comment
Самый быстрый способ - использовать typo3.org/extensions/repository/view/kickstarter - создайте новый ext и добавьте в него плагин FE. Единственная задача - проверить, есть ли параметр &tx_ttnews[tt_news], и, при желании, вы также можете проверить, существуют ли новости, указанные в нем, в базе данных. В противном случае вам нужно будет просто перенаправить на другую страницу. позже вы можете просто добавить его на страницу 57 через TS: page.1 < plugin.tx_yourext_pi1 - person biesior; 24.07.2012
comment
Извините, что плохо выразился. Я знаю, как сделать расширение с помощью кикстартера, но я не знаю, как проверить условие, которое вы упомянули. До сих пор я создавал расширения только с использованием Typoscript, а не PHP. - person Enrique Moreno Tent; 24.07.2012
comment
kickstarter - это click-clicktool, поэтому вам нужно установить его и немного поиграть, скоро вы создадите небольшое расширение, в котором будет только один плагин fe. Будет класс вроде class.tx_yourext_pi1.php - поэтому, если вы установите расширение и поместите его вместе с TS, как я показал в предыдущем комментарии, TYPO3 будет вызывать метод main () при каждой загрузке страницы ... Используйте t3lib_div::_GP для получения параметров URL - typo3.org/api/typo3/ (не используйте общий $ _GET !) и выполните обычное сравнение PHP if - person biesior; 24.07.2012
comment
Как уже было сказано, я уже знаком с кикстартером. проблема в том, что я знаю НОЛЬ о t3lib. Я понятия не имею, как проверять параметры URL, делать перенаправления или сверяться с базой данных для сравнения результатов. - person Enrique Moreno Tent; 24.07.2012
comment
Давайте разберемся: создайте любой плагин и убедитесь, что он работает, позже я напишу тело методов для этой задачи - person biesior; 24.07.2012
comment
Плагин готов и работает. Буду ждать твоего метода. Спасибо. - person Enrique Moreno Tent; 24.07.2012
comment
Разве я не должен добавлять заголовок (HTTP / 1.0 404 Not Found); избежать индексации гуглом? кроме того, есть ли способ перенаправления с использованием идентификатора страницы (в случае, если я позже изменю свои говорящие URL-адреса)? - person Enrique Moreno Tent; 24.07.2012
comment
Хорошо, спасибо, что хорошо сработало. Я все еще не уверен, что способ обработки перенаправления лучший, но, по крайней мере, я получаю желаемое поведение. - person Enrique Moreno Tent; 24.07.2012
comment
@Dbugger, да, добавление заголовка 404 и динамическое построение ссылок - лучший вариант, я отправил вам простейшее (imho) решение, чтобы заставить его работать, однако всегда есть какое-то поле, чтобы сделать его лучше. - person biesior; 24.07.2012