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

Вернуться   Russian TYPO3 community > Обсуждение общих технических вопросов > Общие вопросы

Ответ
 
Опции темы Опции просмотра
Старый 22.11.2007, 16:50   #1
razawa
Senior Member
 
Регистрация: 02.03.2007
Адрес: Украина, Дружковка
Сообщений: 128
Отправить сообщение для razawa с помощью ICQ
По умолчанию

Второй день бьюсь:

Вставил PHP_CONTENT на страницу.
Нужно по GET-параметрам выбирать определенные данные, ссылка в таком виде: ?id=258&mon=05&day=15
Но, если я на страницу захожу без параметров mon и day - мне нужно найти последнюю имеющуюся комбинацию этих параметров, что я и делаю.
Но как привязать найденные mon и day к кешированию...? В основном люди будут заходить на страницу именно только по id=258, чтобы прочитать последнее поступление. И желательно чтобы оно сразу и прокешировалось вместе с cHash
Код:

PHP код:
 ....  выше определюятся mon и day (к кешированию не относится) ...

// Вставляю найденные  mon и day в _GET в надежде, что они будут восприняты как пришедшие извне:
  
t3lib_div::_GETset(Array('day'=>$maxday'mon'=>$maxmon'vipusk'=>$maxvipusk)); 
// следующий код взял из makeCacheHash()
       
$GET t3lib_div::_GET();
      
$this->cHash_array t3lib_div::cHashParams(t3lib_div::implodeArrayForUrl('',$GET));
      
$cHash_calc t3lib_div::shortMD5(serialize($this->cHash_array));
      
$GLOBALS['TSFE']->cHash $cHash_calc;
// $cHash_calc расчитывается, все верно, но как его привязать к странице без  GET...

// Уже даже решил загнать cHash в _GET:
      
t3lib_div::_GETset(Array('cHash'=>$cHash_calc));

// А начинал вот с этого
      
$this->piVars t3lib_div::_GET();
      if (
$this->pi_checkCHash && count($this->piVars))    {
//            $GLOBALS['TSFE']->makeCacheHash(); 
            
$GLOBALS['TSFE']->reqCHash();
                }; 
При вызове в ссылке "?id=258&mon=01&day=15&cHash=80b8d87d0f" кешируется нормально, как и должно быть. А если просто зайти без параметров - не то.
razawa вне форума   Ответить с цитированием
Старый 22.11.2007, 17:17   #2
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Цитата:
Сообщение от razawa Посмотреть сообщение
Но, если я на страницу захожу без параметров mon и day - мне нужно найти последнюю имеющуюся комбинацию этих параметров, что я и делаю.
Но как привязать найденные mon и day к кешированию...? В основном люди будут заходить на страницу именно только по id=258, чтобы прочитать последнее поступление.
Странный подход, мне кажется Вы слишком усложняете вашу задачу...
Что мешает на странице без параметров вывести только последние поступления (отобрав последние записи по дате из БД) ?

При этом кэширование страницы настроить на определенный срок - 1 час, 3 часа и т.п. (по умолчанию кэш храниться 24 часа). И каждые Х часов у вас будет новая кэшированная страница с последними "новостями".

И вообще, посмотрите как работают другие подобные плагины и почитайте доки по их разработке. Мне кажется вы не используете массу возможностей typo3, а копаете глубоко, но не туда.
dmartynenko вне форума   Ответить с цитированием
Старый 22.11.2007, 17:38   #3
razawa
Senior Member
 
Регистрация: 02.03.2007
Адрес: Украина, Дружковка
Сообщений: 128
Отправить сообщение для razawa с помощью ICQ
По умолчанию

Цитата:
Сообщение от dmartynenko Посмотреть сообщение
Странный подход, мне кажется Вы слишком усложняете вашу задачу...
Та "усложняю" - не то слово :-)

Последнее то я получу. Но оно ведь позже потеряется, у него нет cHash
Я предполагал что сделать. Сверху страницы форма с выбором даты (день/месяц/год/номер выпуска). Ниже - текст последнего поступления.
При выборе даты - передаются _GET
Можно кешировать и каждые 4 часа.
Тогда встречный вопрос. А как мне из формы передавать значения cHash, чтобы правильно организовать ссылку? Или это не обязательно? Просто указать cHash=1?
Или Crawler мне поможет? (вспомнил про него). Вот. Наверное нужно его натравить.

Цитата:
Сообщение от dmartynenko Посмотреть сообщение
И вообще, посмотрите как работают другие подобные плагины и почитайте доки по их разработке. Мне кажется вы не используете массу возможностей typo3, а копаете глубоко, но не туда.
та залез на свою голову :-) Впервые решился заняться программированием под Typo3 и залез :-)
razawa вне форума   Ответить с цитированием
Старый 22.11.2007, 22:15   #4
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Цитата:
Сообщение от razawa Посмотреть сообщение
Тогда встречный вопрос. А как мне из формы передавать значения cHash, чтобы правильно организовать ссылку? Или это не обязательно? Просто указать cHash=1?
PHP_CONTENT - это не то. Делайте свой плагин через kickstarter.

Обычно плагины наследуются от класса tslib_pibase
В нем много функций вида pi_link***, которые как раз и предназначены для формирования "правильных" ссылок.
При указании параметра $cache=1 будет добавляться нужный cHash (конечно только в том случае, когда плагин допускает кэширование - но это отдельный разговор - читайте доки так сказать).

Также обычно в формах (типа поиска) делается скрытое поле no_cache=1. Тогда typo3 не будет кэшировать выдаваемую страницу и контент отобразиться нужный.

Как в форме выбирать ссылки правильно сгенеренные pi_link* - это скорее вопрос правильно организации программы, а не такого хака typo3.

В вашем случае можно делать выбор даты не в select-ах формы (это ж не удобно!), а в виде календарика.
dmartynenko вне форума   Ответить с цитированием
Старый 23.11.2007, 09:51   #5
razawa
Senior Member
 
Регистрация: 02.03.2007
Адрес: Украина, Дружковка
Сообщений: 128
Отправить сообщение для razawa с помощью ICQ
По умолчанию

Я бы не назвал это Плагином :-) Просто небольшой скрипт, который к тому же не работает с базой данных, а работает с файлами.
Скрипт мой наследует tslib_pibase, но pi_link*** - на сколько я понял, организовывают ссылку уже внутри скрипта, но у меня сразу выдается содержимое. pi_link - действительно можно будет использовать в календарике (это пока только в планах заменить форму на календарик).
Пока решил обойтись Crawler-ом и кешированием через 3-4 часа. Но тут есть несколько моментов: новые данные могут поступить и через 3 часа (чаще - уж врядли), но и через 2 недели. И кеширование страницы каждые 3 часа может быть впустую (а это минимум 250 кБт). И второе - научить неподготовленных пользователей работе с Crawler, это будет самое сложное :-)
А вот если бы сразу системе определить и передать cHash, чтобы она с ним проиндексировалась - это было бы решение проблемы. Я пока еще буду биться :-)

Вчера, ради интереса, вспомнил и попробовал с 10-к других CMS - всетаки как Typo3 отличается от них. Я теперь на 200% уверен в своем выборе :-)
razawa вне форума   Ответить с цитированием
Старый 23.11.2007, 15:08   #6
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Цитата:
Сообщение от razawa Посмотреть сообщение
Пока решил обойтись Crawler-ом и кешированием через 3-4 часа. Но тут есть несколько моментов: новые данные могут поступить и через 3 часа (чаще - уж врядли), но и через 2 недели. И кеширование страницы каждые 3 часа может быть впустую (а это минимум 250 кБт).
Перегенерация страницы каждые 3 часа вряд ли создаст серьезную нагрузку на сервер - этим можно пренебречь.
Также можно настроить кэширование на много дней, а при поступлении новых данных очищать кэши для нужных страниц.

Цитата:
Сообщение от razawa Посмотреть сообщение
А вот если бы сразу системе определить и передать cHash, чтобы она с ним проиндексировалась - это было бы решение проблемы. Я пока еще буду биться :-)
Этот "хак" вряд ли сработает. TYPO3 делает выборку из кэша до того, как будут выполнены ваши скрипты. Поэтому программно добавить cHash уже на этапе генерации страницы ничего не даст в плане работы кэширования.
dmartynenko вне форума   Ответить с цитированием
Ответ


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

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

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


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


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

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