В общем, в header.php шаблона по традиции не работает вывод
Код
$APPLICATION->ShowMeta("keywords");
Умирая, из последних сил нашел такое решение через тему Из любого файла шаблона \local\templates\mytemplate\components\bitrix\catalog.section.list\main\ задаем
Я сначала прописал это в component_epilog.php потом хотел перенести в template.php Быстрее так будет или хуже т к не кэшируется или это не имеет значения? А в header.php локального шаблона темы по пути public_html/local/templates/mytemplate вызываю
Код
<met a name="keywords" content="<?echo $APPLICATION->ShowProperty("mykeys");?>"/>
Вопросы:1) свойство mykeys задается на лету, есть ли в этом какой-то подвох?2) header вызывается до содержимого страницы,как ShowProperty получает нужное значение? Если она "дожидается" загрузки всех компонентов и только потом передает значение, увидят ли это значение боты Яндекса и Гугла?3) Правильно ли вызывать в этом случае ShowProperty из component_epilog.php или лучше из шаблона компонента или из result_modifier.php ?4) Как правильно сделать проверку на непустое значение этой переменной и в случае пустого выводить
Следуя традициям oldschool seo, решил добиться, чтобы значения выводились именно из поля META KEYWORDS вкладки SEO.Нашел в \local\templates\mytemplate\components\bitrix\catalog.section.list\main\component_epilog.php Там:
Через вывод убедился, что она получает правильное значение, но на странице услуги по-прежнему keywords не выводятся. Стал копаться в вызовах компонентов каталога, подставлять SET_META_KEYWORDS
Пробовал также зайти через доп. параметр "SET_META_KEYWORDS" => "Y", "LIST_META_KEYWORDS" => "UF_KEYWORDS", но похоже, что ключи теряются где-то в вызовах компонентов, где-то на пути от его обработки из папок битрикса к копиям в local.Компонент листает подразделы в блоке Каталога и нужно всего лишь передавать при этом переменную, содержащую значение поля. Была мысль подцеплять в header.php шаблона эту переменную как глобальную или через сессии.Нашел, где в базе лежат эти ключи и создал простейший запрос, позволяющий вытащить значение по id блока и секции, но опять же эти переменные видны только при работе компонента. Была мысль инклюдить его в header. Потом попробовал конструкцию вида
Вопрос №10. Тут возник второй вопрос: эта штука отлично дергает блоки из раздела Информация, но не видит блоки из раздела Каталог - это так и задумано?Я был готов к тому, чтобы из пути к странице вычленять составляющие и по ним вычислять BLOCK_ID и SECTION
Код
$folder = $request->getRequestedPageDirectory();
$iblockCode = '';// берем часть $folder до косой черты
$iblockId = IblockIdByCode($iblockCode);
Вопрос №20. Правильно ли я понимаю, что при этом потребовалось бы несколько дополнительных запросов в базу при каждой загрузке страницы и это плохое решение? Не лучше ли брать block_id и section через правильно настроенный urlrewrite - не будет ли это решение лучше всего вышеописанного?Не лучше ли писать ключи из параметров разделов каталога в переменные сессии? В modx к id страницы привязаны все поля метатегов, хранящиеся в базе, и не надо ломать голову как их найти и отобразить. В чем недостаток такого решения по сравнению с framework bitrix?
Сергей написал: В общем, в header.php шаблона по традиции не работает вывод
Он и не должен вызываться. Используйте $APPLICATION->ShowHead() и он уже в свое время вызовет необходимые meta
Цитата
Сергей написал: Я сначала прописал это в component_epilog.php потом хотел перенести в template.php Быстрее так будет или хуже т к не кэшируется или это не имеет значения?
Если Вы используете инфоблоки - переходите на стандартный SEO-модуль и его возможности. Не будет геморроя в дальнейшем и много плюшек. Если рассматривать конкретно Ваш вариант - я бы вычислял SEO в result_modifier.php добавлял его в результат кеша и в component_epilog.php выводил (сохраняете возможность кеширования этой части - быстрее работает)
Цитата
Сергей написал: 2) header вызывается до содержимого страницы,как ShowProperty получает нужное значение? Если она "дожидается" загрузки всех компонентов и только потом передает значение, увидят ли это значение боты Яндекса и Гугла?
Изучите документацию. Это осуществляется через отложенные функции
Цитата
Сергей написал: 3) Правильно ли вызывать в этом случае ShowProperty из component_epilog.php или лучше из шаблона компонента или из result_modifier.php
Правильно, так как result_modifier.php кешируется. Если Вы будете вызывать это из result_modifier.php получится что meta-теги будут только на не кешируемом хите.
Цитата
Сергей написал: 4) Как правильно сделать проверку на непустое значение этой переменной и в случае пустого выводить
Лучше задать дефолтное значение в начале выполнения страницы и уже его переопределять. Профита больше.
Цитата
Сергей написал: Вопрос №10. Тут возник второй вопрос: эта штука отлично дергает блоки из раздела Информация, но не видит блоки из раздела Каталог - это так и задумано?Я был готов к тому, чтобы из пути к странице вычленять составляющие и по ним вычислять BLOCK_ID и SECTION
Вы же явно поставили ограничение - активные элементы 25-инофблока. Почему он должен смотреть в другой инфоблок?
Цитата
Сергей написал: Вопрос №20. Правильно ли я понимаю, что при этом потребовалось бы несколько дополнительных запросов в базу при каждой загрузке страницы и это плохое решение?
Да, но только если эти хиты не попадают на кеш.
Цитата
Сергей написал: не будет ли это решение лучше всего вышеописанного?
Лучше - и правильнее
Цитата
Сергей написал: Не лучше ли писать ключи из параметров разделов каталога в переменные сессии?
Не лучше. Я бы даже сказал намного хуже
Цитата
Сергей написал: В modx к id страницы привязаны все поля метатегов, хранящиеся в базе, и не надо ломать голову как их найти и отобразить. В чем недостаток такого решения по сравнению с framework bitrix?
В битриксе смешанная структура (т.е. страница может быть и физической и логической), так что однозначной структуры хранения тут быть не может в принципе. Подход modx к битриксу не применим. К тому же, по технологии отложенных функций они определяются исходя из содержимого страницы, а так как на странице может быть множество компонентов, то каждый компонент может переопределять эти поля.
P.S. На вашей месте я бы подтянул следующие темы: - Архитекутра Битрикс (файлы, папки, .section.php) - Компоненты (как работают, какие есть стандартные и что в них за SET_TITLE, SHOW_META* и т.п.) - Порядок выполнения страницы - Отложенные функции - SEO-возможности инфоблоков