Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Разработка расширений / TYPO3 extension development (http://forum.typo3.ru/forumdisplay.php?f=38)
-   -   Что происходит в ядре, когда идет запрос битых адресов... (http://forum.typo3.ru/showthread.php?t=10816)

Ивано++ 11.07.2013 18:31

Вот еще интересная штука из API

tslib_fe :: pageNotFoundHandler("/home/", "HTTP/1.1 404 Not Found", "Segment "error-404" was not a keyword for a postVarSet as expected on page with id=2.");

dmartynenko 11.07.2013 18:41

У вас есть какая-то принципиальная нестыковка, на мой взгляд.

cHash нужен ядру что бы *закэшировать* контент страницы и он появляется только в момент формирования typolink.

То есть ваш контент будет кэширован ядром в составе страницы с привязкой к этому самому cHash.

Зачем спрашивается внутри вашей логики что-то еще в таком случае кэшировать (и с привязкой к cHash в частности) ?

Мы используем кэширование внутри плагина только в случае USER_INT. И в данном случае cHash вообще не интересен. Используем для cache_id md5() от всего, что может повлиять на контент. Это pid, type, FE группы, ряд переменных из GET, а иногда и $this->conf целиком добавляется.

Ивано++ 11.07.2013 19:51

Цитата:

Сообщение от dmartynenko (Сообщение 36849)
У вас есть какая-то принципиальная нестыковка, на мой взгляд.

cHash нужен ядру что бы *закэшировать* контент страницы и он появляется только в момент формирования typolink.

То есть ваш контент будет кэширован ядром в составе страницы с привязкой к этому самому cHash.

Зачем спрашивается внутри вашей логики что-то еще в таком случае кэшировать (и с привязкой к cHash в частности) ?

Мы используем кэширование внутри плагина только в случае USER_INT. И в данном случае cHash вообще не интересен. Используем для cache_id md5() от всего, что может повлиять на контент. Это pid, type, FE группы, ряд переменных из GET, а иногда и $this->conf целиком добавляется.

Да - Вы правы - ничего не пропадает...
Проблему нашел:

Есть у меня на странице LOAD_REGISTER
Суть его в том, что он выбирает ключевые слова для новости...
PHP код:


        page.1 
LOAD_REGISTER
    
        
# Ключевые слова
        
page.1.new_keywords.cObject  TEXT
        page.1
.new_keywords.cObject.dataWrap DB:tt_content_news:{GP:tt_content_news|view_detail_record}:seo_keywords
        page.1
.new_keywords.cObject.insertData 1
        page.1
.new_keywords.cObject.wrap3 = {|} 

На странице установлен:

PHP код:

$GLOBALS['TSFE']->no_cache 1// запрет кэширования (1)
$GLOBALS['TSFE']->set_no_cache(); // запрещяем кэширование (2) 

И проблема в том - что при заходе первый раз на страницу я получаю значения из LOAD_REGISTER - все работает верно... Но вот как - только я обновляю страницу... То LOAD_REGISTER - как бы становиться пустым...

PHP код:


        
# Переопределяем заголовок
    
page.headerData.100.value (
        
        <
meta name="keywords" content="{register:new_keywords //  DB:tx_web_settings:1:seo_meta_def_keywords}"
        <
meta name="description" content="{register:new_description //  DB:tx_web_settings:1:seo_meta_def_description}"
        <
title>{register:new_title //field:subtitle // field:title} :: {DB:tx_web_settings:1:site_name}</title>
            
    



С удовольствием бы решил проблему следующим образом (т.к. мне не нравиться LOAD_REGISTER в принципе)...

PHP код:

{DB:tt_content_news:[{GP:tt_content_news|view_detail_record}]:title

Т.е. через вставку ID-записи из _GET - но как такое сделать для DB-не нашел... В DB-можно передать просто ID-записи , а вот подставить из _GET - не нашел такого решения...

Ивано++ 11.07.2013 20:02

Вот полный код:

PHP код:

#*******************************************************************
#    Данный файл содержит описание настроек seo-материала для виртуальных страниц
#*******************************************************************

# Определяем мета-данные для новостей (раздел 95)
[globalVar GP:tt_content_news|view_detail_record 0]
    
    
# Создаем новое значение
    
page.1 LOAD_REGISTER
    
        
# Ключевые слова
        
page.1.new_keywords.cObject  TEXT
        page.1
.new_keywords.cObject.dataWrap DB:tt_content_news:{GP:tt_content_news|view_detail_record}:seo_keywords
        page.1
.new_keywords.cObject.insertData 1
        page.1
.new_keywords.cObject.wrap3 = {|}

        
# Описание страницы
        
page.1.new_description.cObject  TEXT
        page.1
.new_description.cObject.dataWrap DB:tt_content_news:{GP:tt_content_news|view_detail_record}:seo_description
        page.1
.new_description.cObject.insertData 1
        page.1
.new_description.cObject.wrap3 = {|}

        
# Заголовок
        
page.1.new_title.cObject  TEXT
        page.1
.new_title.cObject.dataWrap DB:tt_content_news:{GP:tt_content_news|view_detail_record}:title
        page.1
.new_title.cObject.insertData 1
        page.1
.new_title.cObject.wrap3 = {|}
        
    
# Переопределяем заголовок
    
page.headerData.100.value (
        
        <
meta name="keywords" content="{register:new_keywords //  DB:tx_web_settings:1:seo_meta_def_keywords}"
        <
meta name="description" content="{register:new_description //  DB:tx_web_settings:1:seo_meta_def_description}"
        <
title>{register:new_title //field:subtitle // field:title} :: {DB:tx_web_settings:1:site_name}</title>
            
    

        
[global]

# Определяем мета-данные для статей (раздел 94)
[globalVar GP:tt_content_article|view_detail_record 0]
    
    
# Создаем новое значение
    
page.1 LOAD_REGISTER
    
        
# Ключевые слова
        
page.1.new_keywords.cObject  TEXT
        page.1
.new_keywords.cObject.dataWrap DB:tt_content_article:{GP:tt_content_article|view_detail_record}:seo_keywords
        page.1
.new_keywords.cObject.insertData 1
        page.1
.new_keywords.cObject.wrap3 = {|}

        
# Описание страницы
        
page.1.new_description.cObject  TEXT
        page.1
.new_description.cObject.dataWrap DB:tt_content_article:{GP:tt_content_article|view_detail_record}:seo_description
        page.1
.new_description.cObject.insertData 1
        page.1
.new_description.cObject.wrap3 = {|}

        
# Заголовок
        
page.1.new_title.cObject  TEXT
        page.1
.new_title.cObject.dataWrap DB:tt_content_article:{GP:tt_content_article|view_detail_record}:title
        page.1
.new_title.cObject.insertData 1
        page.1
.new_title.cObject.wrap3 = {|}
        
    
# Переопределяем заголовок
    
page.headerData.100.value (
        
        <
meta name="keywords" content="{register:new_keywords //  DB:tx_web_settings:1:seo_meta_def_keywords}"
        <
meta name="description" content="{register:new_description //  DB:tx_web_settings:1:seo_meta_def_description}"
        <
title>{register:new_title //field:subtitle // field:title} :: {DB:tx_web_settings:1:site_name}</title>
            
    

        
[global]

# Определяем мета-данные для фотогаллереи (раздел 97)
[globalVar GP:tt_content_gallery|directory_uid 0]
    
    
# Создаем новое значение
    
page.1 LOAD_REGISTER
    
        
# Ключевые слова
        
page.1.new_keywords.cObject  TEXT
        page.1
.new_keywords.cObject.dataWrap DB:tt_content_gallery:{GP:tt_content_gallery|directory_uid}:seo_keywords
        page.1
.new_keywords.cObject.insertData 1
        page.1
.new_keywords.cObject.wrap3 = {|}

        
# Описание страницы
        
page.1.new_description.cObject  TEXT
        page.1
.new_description.cObject.dataWrap DB:tt_content_gallery:{GP:tt_content_gallery|directory_uid}:seo_description
        page.1
.new_description.cObject.insertData 1
        page.1
.new_description.cObject.wrap3 = {|}

        
# Заголовок
        
page.1.new_title.cObject  TEXT
        page.1
.new_title.cObject.dataWrap DB:tt_content_gallery:{GP:tt_content_gallery|directory_uid}:title
        page.1
.new_title.cObject.insertData 1
        page.1
.new_title.cObject.wrap3 = {|}
        
    
# Переопределяем заголовок
    
page.headerData.100.value (
        
        <
meta name="keywords" content="{register:new_keywords //  DB:tx_web_settings:1:seo_meta_def_keywords}"
        <
meta name="description" content="{register:new_description //  DB:tx_web_settings:1:seo_meta_def_description}"
        <
title>{register:new_title //field:subtitle // field:title} :: {DB:tx_web_settings:1:site_name}</title>
            
    

        
[global]

    
# Значения по умолчанию (если все выше описанное оказалось пыстым)
    #page.meta.keywords.ifEmpty.data = DB:tx_web_settings:1:seo_meta_def_keywords
    #page.meta.description.ifEmpty.data = DB:tx_web_settings:1:seo_meta_def_description 

И почему-то при обновлении станицы которая не кэшуреутся этот самый LOAD_REGISTER - становится пустым...

Извиняюсь за не точность - в данном примере ничего не пропадает...
Пропадает в навигационной цепочке - при повторном посещении некэшируемой страницы...
Где идет вставка значения через {register:new_title}

Видимо {register} - имеет область видимости переменных...


PHP код:

# Определяем нав.цепочку для новостей, детальный просмотр (раздел 95)
            
[globalVar GP:tt_content_news|view_detail_record 0]
                
                
lib.menuBreadcrumb.10.1.CUR >
                
lib.menuBreadcrumb.30 TEXT
                lib
.menuBreadcrumb.30.value = {register:new_title}
                
lib.menuBreadcrumb.30.insertData 1
                lib
.menuBreadcrumb.30.typolink 
                
                    
parameter 95
                    additionalParams
=&tt_content_news[page]={GP:tt_content_news|page}&tt_content_news[view_detail_record]={GP:tt_content_news|view_detail_record}
                    
additionalParams.insertData 1
                    useCacheHash 
1
                
                
}
                
            [global] 


Ивано++ 11.07.2013 20:17

Одним словом уже запутался крепко...

Ни как не пойму - есть ли простой способ?
PHP код:

page.meta.keywords.data DB:ttable:[Вставить id из _GET]:seo_meta_def_keywords 


Одним словом есть ли что по проще чем:
PHP код:

temp.newsTitle RECORDS
temp
.newsTitle {
  
dontCheckPid 1
        tables 
tx_news_domain_model_news
        source
.data GP:tx_news_pi1|news
        source
.intval 1
        conf
.tx_news_domain_model_news TEXT
        conf
.tx_news_domain_model_news {
            
field title
            htmlSpecialChars 
1
        
}
        
wrap = <title>|</title>
}
page.headerData.1 >
page.headerData.1 temp.newsTitle 


Ивано++ 11.07.2013 20:40

Вот что получается:

Проверяю в index.php (вставляю в самый конец)...

Если на странице через php-ставить no_cahe = 1 и no_set_cache()

PHP код:

print "<pre>";
print_r($GLOBALS['TSFE']->register); 

То при обновлении страницы часть значений из данного массива пропадает


Если поставить в настройках TS-к странице
page.config.no_cache = 1

То все значения на месте

PHP код:

[php]print "<pre>";
print_r($GLOBALS['TSFE']->register); 

[/php]

Ивано++ 11.07.2013 21:22

В общемь... (нет слов)...
Разобрался...

Сделал просто LOAD_REGISTER - отдельно для breadcurmb...

Ивано++ 11.07.2013 21:57

Осталось несколько маленьких вопросиков:

В чем раздница между этими двумя функциями (методами)?
PHP код:

$GLOBALS['TSFE']->no_cache 1// запрет кэширования (1)
$GLOBALS['TSFE']->set_no_cache(); // запрещяем кэширование (2) 

А также правильно ли понимаю, что вот у нас есть ссылка typolink c useCacheHash ... = true

PHP код:

                lib.menuBreadcrumb.20.typolink 
                
                    
parameter 94
                    additionalParams
=&tt_content_article[page]={GP:tt_content_article|page}
                    
additionalParams.insertData 1
                    useCacheHash 
1
                
                


И если мы вызываем эти два метода:
PHP код:

$GLOBALS['TSFE']->no_cache 1// запрет кэширования (1)
$GLOBALS['TSFE']->set_no_cache(); // запрещяем кэширование (2) 

то useCacheHash - не генерируется?
Думаю что теперь окончательно разобрался что из чего растет.



И все равно не могу понять...
Вот есть страница:
эти у меня реально существуют
Код HTML:

novosti/page-news/1/
novosti/page-news/2/
novosti/page-news/3/

и почему при запросе скажем
novosti/page-news/4/

- все равно генриться cHash

Я его даже получить могу для каждой страницы - новый уникальный...
PHP код:

$GLOBALS['TSFE']->cHash


Ивано++ 12.07.2013 23:17

Эээ.... может быть чего то не понимаю...
Но вот заметил:

установил расширение realur...
вот для него есть такая настройка:
PHP код:

'postVarSets' => array(
          
'_DEFAULT' => array (
          
            
// Для раздела новостей
            
'page-news' => array(  array ( 'GETvar' => 'tt_content_news[page]'),  ),
            
'record-news' => array(  array ( 'GETvar' => 'tt_content_news[view_detail_record]'),  ),
            
            
// Для раздела статей
            
'page-article' => array(  array ( 'GETvar' => 'tt_content_article[page]'),  ),
            
'record-article' => array(  array ( 'GETvar' => 'tt_content_article[view_detail_record]'),  ),
          
         ),
        ), 

Суть проблемы в:

Делаем запрос:
stati/record-article/14/ (запись реально есть)
stati/record-article/15/ (запись реально есть)
stati/record-article/16/ (запись реально есть)
stati/record-article/1222/ (ЗАПИСИ НЕТ... просто нет в БД)

если сделать запрос-прямой в окне браузера:
stati/record-article/1222/ - и обновить страницу...
то ,будет создан:

PHP код:

$GLOBALS['TSFE']->cHash при обновлении страницы???? 

Ведь по идее же так не должно быть?
А $GLOBALS['TSFE']->cHash - должен создаваться только при переходе по ссылкам???

Ивано++ 13.07.2013 00:06

Что - то наверное я ошибся...:)


Часовой пояс GMT +4, время: 21:44.

Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot