Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community |
29.11.2006, 18:33 | #1 |
Senior Member
Регистрация: 05.04.2006
Сообщений: 105
|
Indexed_search + crawler + custom plugin
Всем доброго дня!
Описание: Есть свой ФЕ плагин tx_myproduct_pi1 который выводит информацию о продуктах из базы. в начале когда пользователь приходит на страницу выводиться поисковая форма по продуктам. выбрав параметры поиска пользователь жмет кнопку (запрос пост), в резудьтате выдается список урлов на продукты - в урле указан для плагина tx_myproduct_pi1[product_id]=15. Когда пользователь кликает по ссылке, плагин выводит вместо поисковой формы информацию о выбранном продукте. В связи с тем, что один и тот же плагин выводит и форму поиска и информацию о продуктах, в системе он заведен как некэшируемый. plugin.tx_myproduct_pi1 = USER_INT И все отлично работает. Однако теперь возникла необходимость индексировать информацию о каждом продукте, так чтобы пользователь мог искать продукты в плагине indexed_search и в результате поиска выдавался нужный урл с параметром к моему плагину (tx_myproduct_pi1[product_id]=15) и когда пользователь кликал по этому урлу переходил на страницу с информацией о продукте. Но индексация в текущем состоянии происходить не может, поскольку плагин задан изначально как некэшируемый. Изменяя его тип на кэшируемый теряем его функциональность, форма перестает показываться, вместо неё идет контент из кэша. Какое может быть решение в этом случае, может кто сталкивался с подобной задачей? Я знаю что можно как-то новости индексировать. Но как это реализовано технически? заранее спасибо Евгений |
29.11.2006, 22:46 | #2 |
Administrator
|
в последнем index_search можно задействовать crawler, который пожет по крону или при сохранении записи индексировать любую таблицу
еще crawler надо поставить. Я делал такое индексирование для tt_news (поскольку там было 3000 новостей и пускать это на самотек - было нельзя) в самой индексации через crawler есть несколько ошибок (для случая когда в таблице есть поля с HTML кодом) ситуация, когда нужно сначала проиндексировать все, а затем индексировать только новые записи - там вообще не предусмотрена, правда дело решается простым патчем. Ситуация, когда все на кроне - там вполне нормально работает. Мне правда вредил плагин "очистка кеша ветви дерева" - он несколько раз вычищал весь индекс, пока я не сообразил, что дело именно в нем. |
30.11.2006, 16:36 | #3 |
Senior Member
Регистрация: 05.04.2006
Сообщений: 105
|
привет,
кроулер позволяет в настройках запрашивать данные (uid) только из таблиц заданных в TCA массиве. Но в моем случае я создаю таблицу просто и работаю с ней только через мои скрипты. Я пропаттчил кроулер так чтобы он мог запрашивать данные напрямую из таблицы, и генерировать наборы урлов для обхода страниц с моим плагином. Но дело в том, что страницы не индексируются, потому-что не кешируются. Мой плагин задан как некешируемый. Может я вобще некорректно вопрос ставлю? Может задача вывода динамических данных вобще не подразумевает индексирввание? есть мысли? |
30.11.2006, 17:05 | #4 |
Administrator
|
насколько я понял, краулер может проиндексировать что угодно. Рультаты индексации сохранятся в соответствующих таблицах index_search.
Потом index_search будет по этим таблицам искать и показывать в результатах поиска те URL, которые и в эти таблицы положил краулер. У меня все так работает для tt_news. Сама страница с tt_news SINGLE, на которую ведет ссылка, является кешируемой, но у нее поставлено "Вне поиска:" |
30.11.2006, 17:55 | #5 |
Senior Member
Регистрация: 05.04.2006
Сообщений: 105
|
Да, я поразбирался с краулером, и там принципиально все понятно.
Индексирование просиходит как и раньше в момент, когда страница загружается. Краулер только то и делает, что автоматом загружает страницу. Индексирует её indexed_search. А вот тут не понятно, как мне убить двух зайцев. Во первых чтоб мой плагин мог быть как бы и некешируемым и кешируемым одновременно. т.е. идея конечно похожа на то, как ведет себя тт_ньюз, но... не совмсем понятно как работает кеширование и генерация динамического контента. и как управлять кешированием. что такое параметр сHash? он вроде на кеширование оказывает огромное влияние. например, мой плагин выводит разный контент в зависимости от значениея параметра. т.е. я беру ид из PIVars и делаю запрос в базу. получаю строку и вывожу хтмл. но вот я научил кролер генерить серии урлов с нужными ид. а в результате индексации выижу что только один первый урл\страница реально попала под инексирование. посмотрел доку по кроулеру нашел опицию cHash = 1 т.е. добавить в урл параметр cHash. это помогло, после чего в статисткие индексирования появились все страницы с разными ид и разными cHash. Так вот и не понятно, почему то что реально работает во Фронт Энд (по разном ид исполняется код плагина и вывоиться новый контент) а для индексирования разные ид в строке урл (т.е. урл ведь разные хоть и на странице с тем же самым pid) воспринимаются как одна? что-то из этой области. вопрос интересный. |
30.11.2006, 22:50 | #6 |
Senior Member
|
На эту тему целая статья есть...
http://typo3.org/development/article...ries-of-chash/
__________________
TYPO3 FAQ |
01.12.2006, 02:34 | #7 |
Senior Member
Регистрация: 05.04.2006
Сообщений: 105
|
ага спасибо, уже штудирую
|
01.12.2006, 13:03 | #8 |
Senior Member
Регистрация: 05.04.2006
Сообщений: 105
|
весьма полезный документ!
теперь все стало на свои места. спасибо касперу за потраченные 4 часа. спасибо всем за обсуждение. потребовалось объявить мой плагин как некешируемый USER и внутри плагина специально указать: 1) зоны которые не надо кэшировать поисковая форма и результат поиска $GLOBALS['TSFE']->set_no_cache(); 2) генерировать линки на продукты с помощью спец методов pi_base класса. $this->pi_linkTP($row['name'],array($this->prefixId.'[model_id]'=>$row['uid']),1) где третий параметр играет важную роль. Единица означает что к строке урл надо еще добавить сгенерированный cHash параметр, который и дает команду Тайпо кешировать данную страницу как уникальную. спасибо всем, Евгений |