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

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

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

В общем суть проблемы...
Значение я сгенерировал из трех параметров:

ID.страницы | Тип страницы | и cHash

Но проблема с realurl вот в следующем:

PHP код:
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'] = array (
  
        
'init' => array (
      
            
'enableCHashCache' => true

При первом заходе мы имеем cHash...
А при повторном заходе - cHash - уже прячится....
Соответственно имеем уже другое значение.
__________________
Иван Литовченко
http://iv-litovchenko.ru/
Ивано++ вне форума   Ответить с цитированием
Старый 11.07.2013, 13:58   #2
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Что-то я не пойму о чем вы толкуете - проверять cHash вручную... Зачем?
Может опишите задачу которую хотите решить более обще?
dmartynenko вне форума   Ответить с цитированием
Старый 11.07.2013, 17:08   #3
Ивано++
Senior Member
 
Аватар для Ивано++
 
Регистрация: 18.01.2013
Адрес: Russia , Moscow
Сообщений: 796
По умолчанию

В общем тогда суть задачи опишу...

Проблема №1.
И кстати - посмотрел (попробовал) сделать битые адреса на сайте который работает на typo3.

Беру от "туды не сюды":

http://site-name/weffwefwe/fwefwe/fwefwefwe/fwefwefwe-1
http://site-name/weffwefwe/fwefwe/fwefwefwe/fwefwefwe-2
http://site-name/weffwefwe/fwefwe/fwefwefwe/fwefwefwe-3
http://site-name/weffwefwe/fwefwe/fwefwefwe/fwefwefwe-4
http://site-name/weffwefwe/fwefwe/fwefwefwe/fwefwefwe-....
http://site-name/weffwefwe/fwefwe/fw...fwefwe-1000032

И так далее - и что интересно ... вся эта лабуда будет находить свое отражение в двух таблицах (хотя адреса битые - и по ним идет 404-ошибка!:

sys_log (если конечно не отключено ведение логов в localconf - хотя у меня не получалось на 100%-их ведение отключить - отключаешь - все равно что-то пишется...
tx_realurl_chashcache (если на сайте установлено расширение realurl)

Причем не важно - правильный или бытый адресе...
Все равно в tx_realurl_chashcache - будут писаться строки:
0185ffa2f1afa6f2ef1f22d1f4826305 468f8782df5c94cb79eb2dd5642490dc


А соответственно - значит что если сделать много битых адресов - то размеры этих таблиц будут постоянно расти - и "убивать" сайт.


Суть задачи в том, что нужно как-то сохранять кэш для smarty....
Но сейчас то, как есть - получается если запросить вариант битого адреса

http://site-name/weffwefwe/fwefwe/fw...fwefwe-1000032

то кэш будет сохраняться и по нему...
а это го не нужно....

Т.е. примерно так:
PHP код:
$cache_id $GLOBALS['TSFE']->id "." $GLOBALS['TSFE']->type "." $GLOBALS['SMARTY_COBJ_TEMPLATE_COUNTER'] . "." $GLOBALS['TSFE']->cHash// . "." . $parentObject -> currentRecord . "-" . $TypoScriptKey; 

Нашел как вариант - составлять список разрешенных к сохранению в кэш страниц...
А кэш будем ($cache_id) - сохранять по:

"имени сайта . запрошенного адреса . № элемента на странице..."

И при запросе страницы - второй раз - если она попала в список разрешенных будем разрешать сохранение элементов на ней в кэш... А если была 404-ошибка . то страница не попадает в список разрешенных страниц....

И тогда, что бы все верно работало - нужно что бы везде стояли 404-ошибки...
Т.к. по ним будет определяться - разрешено заносить страницу в кэш или нет (вернее объекты, которые на ней есть)...

Думаю - что вполне подойдет для проектов до 1 000 страниц.

Здесь вопрос в том, что 404- ошибку приходиться устанавливать, как для страницы (причем эти процессы автоматизированны) - а вот с плагинами - 404-ошибку приходиться устанавливать в ручную - в зависимости от логики, которая там применяться...
__________________
Иван Литовченко
http://iv-litovchenko.ru/

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

В общем 2-проблема в том, что у меня:

cHash - скрывается realurl...
Первый раз я получаю страницу с этим cHash...
А потом без - т.к. он прячется и не могу понять этот механизм.

Ведь URL-адрес один и тот же...
А вот внутренние переменные уже другие.
__________________
Иван Литовченко
http://iv-litovchenko.ru/
Ивано++ вне форума   Ответить с цитированием
Старый 11.07.2013, 18:31   #5
Ивано++
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   #6
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   #7
Ивано++
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   #8
Ивано++
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/
Ивано++ вне форума   Ответить с цитированием
Ответ

Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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


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


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

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