Просмотр полной версии : как установить title из плагина в templavoile
Всем доброго дня.
Мой плагин выводит информацию о продуктах. Для каждого продукта нужно установить свой title на странице.
Эта задача решалась установкой
$GLOBALS['TSFE']->page['title'] = "Мой заголовок";
и для правильного индексирования (бок индексд_серча)
$GLOBALS['TSFE']->indexedDocTitle = $GLOBALS['TSFE']->page['title'];
теперь есть templavoila (до этого были ТС шаблоны), которая как я понимаю сама генерит хедер хтмл.
Вопрос: Как из плагина можно аналогично подставить свой текст в title?
заранее спасибо
Евгений
Можно отключить стандартную генерацию <title> и всё сделать руками.
config.noPageTitle = true
Кроме того, (имхо) лучше и весь хедер генерировать руками вместо простановки галочек в TV. Здесь мнения расходятся, но иметь угрозу ремаппинга при каждой модификации head-части имхо хуже, чем написать 10 строк TS.
спасибо за ответ :)
удалось полечить. закопался в исходники темплы и тайпы :)
краткое описание задачи
мой плагин получает параметры в урле и выводит инфу о продуктах. Далее, страница с описанием каждого продукта должна быть еще и проиндексирована индескед_сёрчем.
Для удобства поиска каждая страница должна иметь в теге тайтл страницы название и внутренний номер продукта в системе клиента. (мы интегрируемся с его БД).
Значит плагин должен не только показать описание продукта в контенте, а еще и задать тайтл тег для страницы. Сколько продуктов, столько и страниц со своим тайтлом в индексе.
Как работает тайпа (генерирование страницы)
процесс устроен таким образом, что контент страницы генерируется раньше по времени чем хедер страницы. Естественно предположить, что тайпа вызовет код моего плагина раньше чем приступит к генерированию хедера и я могу смело установить тайтл:
$GLOBALS['TSFE']->page['title'] = "Мой заголовок";
Но как всегда возникают затыки
1) Не меняется тайтл вобще:
для того, чтобы контент плагина был проиндексирован прежде всего надо убедиться, что тип у плагина USER (т.е. кэштруемый и соответсвенно индексируемый это принципиально) а не USER_INT (т.е. динамический и соответсвенно некэштруемый и неиндексируемый).
Если тип плагина USER_INT тайпа вызывает его код после того как сгенерирован кэшируемый контент и заголовки с тайтлами. Следовательно какие-бы изменения тега тайтл не были произведены в этот момент из кода плагина, они не попадут ни во фронтенд ни в индекс.
Другими словами в этом случае нет способа изменить тайтл страницы вообще.
2) Тайтл меняется, но в поиске тайтл для страницы не совпадает с заданным нами, а остаётся таким, как задает его система автоматом.
Тут дело в том, что индексед_сёрч в процессе индексации не парсит хтмл код страницы целиком, а пользуется внутренней объектной моделью страницы, и получает доступ к отдельным полям таким как: мета, тайтл, контент и т.п.
А вместо поля
$GLOBALS['TSFE']->page['title']
по факту берет значение из другого поля:
$GLOBALS['TSFE']->indexedDocTitle
По умолчанию в самом начале генерирования страницы тайпа просто копирует дефолтовый тайтл в это поле.
$GLOBALS['TSFE']->indexedDocTitle = $GLOBALS['TSFE']->page['title'];
и что самое главное это происходит до того, как система вызовет код нашего плагина.
Наша задача установить так же это поле для успешной индексации.
$GLOBALS['TSFE']->indexedDocTitle = "Мой заголовок";
Этот механизм одинаково работает и с темплавуаля и в случае без неё.
надеюсь это поможет,
всем привет
Евгений,
Харьков
Работает на vBulletin® версия 3.8.1. Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot