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

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

Ответ
 
Опции темы Опции просмотра
Старый 12.11.2007, 14:09   #1
kyzma
Продвинутый
 
Аватар для kyzma
 
Регистрация: 11.09.2007
Сообщений: 32
Отправить сообщение для kyzma с помощью ICQ
По умолчанию tt_news, экстракт cHash для линки

Пишу расширение которое берет контент новости из tt_news c ссылкой на эту новость. При формировании ссылки не удается достать cHash. Откуда берется этот параметр???????????????
__________________
http://crimeawithme.com
kyzma вне форума   Ответить с цитированием
Старый 12.11.2007, 14:51   #2
Pavel Antonov
Senior Member
 
Аватар для Pavel Antonov
 
Регистрация: 01.10.2004
Адрес: Россия, Москва
Сообщений: 1,204
Отправить сообщение для Pavel Antonov с помощью ICQ
По умолчанию

Генерируется функцией typolink
__________________
Павел Антонов
Rich Media Development Ltd.
Блог: http://codeline.richmd.ru/
Pavel Antonov вне форума   Ответить с цитированием
Старый 12.11.2007, 15:09   #3
kyzma
Продвинутый
 
Аватар для kyzma
 
Регистрация: 11.09.2007
Сообщений: 32
Отправить сообщение для kyzma с помощью ICQ
По умолчанию

Спасибо. Счас ещё этот вариант проверю. Нашел решение, как вообще не использовать cHash

надобыло немножко похакать tt_news

т.е. теперь ссылка вида
http://t3.test/index.php?
id=новостная страница
&tx_ttnews[tt_news]=новость

корректно работает без добавления хвоста из Pid и cHash
__________________
http://crimeawithme.com
kyzma вне форума   Ответить с цитированием
Старый 14.11.2007, 19:43   #4
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Цитата:
Сообщение от kyzma Посмотреть сообщение
корректно работает без добавления хвоста из Pid и cHash
Зато теперь у тебя вероятнее всего не кэшируются страницы (программный no_cache) где вставлено расширение tt_news.

Что не есть хорошо для нагруженных сайтов.

cHash - параметр позволяющий кэшировать новости.
dmartynenko вне форума   Ответить с цитированием
Старый 14.11.2007, 22:35   #5
kyzma
Продвинутый
 
Аватар для kyzma
 
Регистрация: 11.09.2007
Сообщений: 32
Отправить сообщение для kyzma с помощью ICQ
По умолчанию

а куда вообще эти новости кешируются? как расчитать cHash? Почему его нет в таблицах?
__________________
http://crimeawithme.com
kyzma вне форума   Ответить с цитированием
Старый 15.11.2007, 13:43   #6
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Цитата:
Сообщение от kyzma Посмотреть сообщение
а куда вообще эти новости кешируются? как расчитать cHash? Почему его нет в таблицах?
Кэшируются во внутренний кэш typo3. Но не новости, а страницы (сгенеренный html код), где размещен контент-элемент новостей.

cHash расчитывается на основе параметров из URL, и позволяет typo3 кэшировать одну страницу с разным контентом. Здесь описано подробно: http://typo3.org/development/article...ries-of-chash/

В двух словах как это работает:
1. Обычно typo3 кэширует страницу по id - http://t3.test/index.php?id=ххх
2. Если на странице размещен например контент-элемент новости (а это кэшируемый тип плагина USER), то кэшируется он вместе со страницей один раз, т.е. будет показываться какая-то одна новость (та, которая попалась при первом открытии страницы).
3. Что бы на одной странице можно было показать разные новости, и при этом она кэшировалась (с разными новостями), то нужно добавить в URL cHash - тогда кэшируется страница со своим контентом именно по cHash (т.е. в кэше оказывается много вариантов одной и той же страницы). Это происходит автоматически внутри typo3 уже упомянутой функцией typolink
dmartynenko вне форума   Ответить с цитированием
Старый 22.11.2007, 16:50   #7
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   #8
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   #9
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   #10
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 вне форума   Ответить с цитированием
Ответ


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

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

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


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


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

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