Russian TYPO3 community Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community  

Вернуться   Russian TYPO3 community > Тематические форумы > Разработка расширений / TYPO3 extension development

Ответ
 
Опции темы Опции просмотра
Старый 11.07.2013, 18:31   #11
Ивано++
Senior Member
 
Аватар для Ивано++
 
Регистрация: 18.01.2013
Адрес: Russia , Moscow
Сообщений: 796
По умолчанию

Вот еще интересная штука из 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.");
__________________
Иван Литовченко
http://iv-litovchenko.ru/
Ивано++ вне форума   Ответить с цитированием
Старый 11.07.2013, 18:41   #12
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

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

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

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

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

Мы используем кэширование внутри плагина только в случае USER_INT. И в данном случае cHash вообще не интересен. Используем для cache_id md5() от всего, что может повлиять на контент. Это pid, type, FE группы, ряд переменных из GET, а иногда и $this->conf целиком добавляется.
dmartynenko вне форума   Ответить с цитированием
Старый 11.07.2013, 19:51   #13
Ивано++
Senior Member
 
Аватар для Ивано++
 
Регистрация: 18.01.2013
Адрес: Russia , Moscow
Сообщений: 796
По умолчанию

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

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 - не нашел такого решения...
__________________
Иван Литовченко
http://iv-litovchenko.ru/
Ивано++ вне форума   Ответить с цитированием
Старый 11.07.2013, 20:02   #14
Ивано++
Senior Member
 
Аватар для Ивано++
 
Регистрация: 18.01.2013
Адрес: Russia , Moscow
Сообщений: 796
По умолчанию

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

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] 
__________________
Иван Литовченко
http://iv-litovchenko.ru/
Ивано++ вне форума   Ответить с цитированием
Старый 11.07.2013, 20:17   #15
Ивано++
Senior Member
 
Аватар для Ивано++
 
Регистрация: 18.01.2013
Адрес: Russia , Moscow
Сообщений: 796
По умолчанию

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

Ни как не пойму - есть ли простой способ?
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 
__________________
Иван Литовченко
http://iv-litovchenko.ru/
Ивано++ вне форума   Ответить с цитированием
Старый 11.07.2013, 20:40   #16
Ивано++
Senior Member
 
Аватар для Ивано++
 
Регистрация: 18.01.2013
Адрес: Russia , Moscow
Сообщений: 796
По умолчанию

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

Проверяю в 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]
__________________
Иван Литовченко
http://iv-litovchenko.ru/
Ивано++ вне форума   Ответить с цитированием
Старый 11.07.2013, 21:22   #17
Ивано++
Senior Member
 
Аватар для Ивано++
 
Регистрация: 18.01.2013
Адрес: Russia , Moscow
Сообщений: 796
По умолчанию

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

Сделал просто LOAD_REGISTER - отдельно для breadcurmb...
__________________
Иван Литовченко
http://iv-litovchenko.ru/
Ивано++ вне форума   Ответить с цитированием
Старый 11.07.2013, 21:57   #18
Ивано++
Senior Member
 
Аватар для Ивано++
 
Регистрация: 18.01.2013
Адрес: Russia , Moscow
Сообщений: 796
По умолчанию

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

В чем раздница между этими двумя функциями (методами)?
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
__________________
Иван Литовченко
http://iv-litovchenko.ru/

Последний раз редактировалось Ивано++; 12.07.2013 в 11:20
Ивано++ вне форума   Ответить с цитированием
Старый 12.07.2013, 23:17   #19
Ивано++
Senior Member
 
Аватар для Ивано++
 
Регистрация: 18.01.2013
Адрес: Russia , Moscow
Сообщений: 796
По умолчанию

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

установил расширение 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 - должен создаваться только при переходе по ссылкам???
__________________
Иван Литовченко
http://iv-litovchenko.ru/
Ивано++ вне форума   Ответить с цитированием
Старый 13.07.2013, 00:06   #20
Ивано++
Senior Member
 
Аватар для Ивано++
 
Регистрация: 18.01.2013
Адрес: Russia , Moscow
Сообщений: 796
По умолчанию

Что - то наверное я ошибся...
__________________
Иван Литовченко
http://iv-litovchenko.ru/
Ивано++ вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


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


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

Хостинг и техническая поддержка: TYPO3 Лаборатория