Борьба с двойными ссылками/содержимым.
(Проблема многократно обсуждалась, но хочется акцентировать внимание новичков, вроде меня, а также привлечь внимание профи от программирования (см. вторую часть поста)).
Итак, суть проблемы, с которой сталкиваются многие джумловоды: страницы, привязанные к пунктам меню могут быть показаны так же без всяких связей, если зайти на них через, скажем, блог раздела или блог категории.
Что влечёт за собой такая неопределённость?
Лично для меня встала проблема организации меню с подсветкой пунктов, а также привязкой модулей к конкретной странице, связанной с пунктом меню.
Для примера, возьмём структуру меню, в котором все пункты - активные ссылки:
Продукты
Хлеб
Рыба
Мясо
Т.е., действуя по логике, хочется получать по клику на «Продуктах» блог (краткое содержимое) из статей «Хлеб», «Рыба», «Мясо».
Собственно, я так и сделал на своём сайте, и всё было хорошо и логично, пока не выяснилось, что ссылка из меню «Хлеб» на конечную страницу и ссылка «Подробнее из блога «Продукты» - это не одно и то же.
Заходя с меню мы получаем активный пункт меню «Хлеб» (если в таблице стилей прописано выделение активных пунктов, то он подсвечивается), а вот зайдя из блога получаем в меню ДУЛЮ. Максимум, чего можно добиться, это подсветки родительского пункта «Продукты».
Можно, в общем, жить и так, отключив подсветку конечных пунктов меню, если дело не касалось ещё и модулей. К примеру, если бы вам вздумалось к меню «Хлеб» привязать модуль с рекламой «Покупайте булки с изюмом!» то при заходе с меню вы бы его увидели, а при заходе с блога – нет. Что, согласитесь, потеря аудитории
.
Покопав Интернет, обнаружил, что проблема системная.
И борются с ней, в основном, создавая из родительского пункта «Продукты» ссылку на статичную страницу, в которой создают фактическую копию блога содержимого раздела, только уже в виде обычного хтмл-а. Ну и уже с этой странички ведут ссылки на конкретные статьи (т.е фактически-обычные URL-ы).
Вроде бы проблема решена, не изящно, но хоть как-то.
Но при таком подходе мы
А) создаём дубли материалов
Б) теряем гибкость блогового отображения контента
Г) при выводе содержимого на главную (галочка «публиковать на главной») получаем те же грабли – ссылка «подробнее» выкинет нас на страницу, не связанную с конечным пунктом меню и соответствующими ему модулями.
Хорошо, можно и это обойти, забив в шаблон пару лишних позиций для модулей и вывести в них ХТМЛ-статику с конкретным url-ом на конечную страницу.
Но тогда встаёт логичный вопрос – зачем тогда гибкая система блогов и краткого содержимого материалов, если мы всё заменяем статикой?
Первое, что пришло в загруженную голову - прикрутить mod_rewrite и тупо менять все ссылки с блогов на «правильные»-связанные с меню с помощью правил.
Те, кто в танке, наверно оценят «изящность решения»
Собственно, я сам додумался, что это – путь в бездну.
Дальше пришла идея то же не самая изящная, но уже не связанная с серверным ковырянием – можно при выводе блога (настройка пункта меню «Продукты»-блог содержимого раздела) отключать показ ссылки «Подробнее».
Далее прописываем в превью каждой вложенной статьи (хлеб, рыба, мясо) свою ссылку «читать делее» (URL пишем тот, который выдаётся при щелчке на соответствующем пункте меню. ВАЖНО! В настройках пункта меню ставим галочку «Формировать уникальный itemId»).
Теперь, чтобы избежать появления нашей ссылки «читаем далее» в основном материале придётся отключить показ вводного текста в каждой статье.
Можно часть водного текста (или весь) дублировать в основном содержимом.
Разумеется, без ссылки «читаем делее».
Что в результате?
Контент всё равно приходится дублировать (имеется в виду перенос вводного текста, «запорченного» наше самодельной ссылкой), но уже в рамках ОДНОЙ страницы. Т.е. отпадает необходимость создавать статичное содержимое и лазить в него каждый раз при смене материала статьи (его заменяет генерируемый блог).
Теперь нам доступен полноценный блог и мы можем логично организовать двухуровневое меню. Плюс, отключив в выводе показ кнопки «подробнее» также и на главной, мы можем публиковать на ней наши статьи, которые корректно выведут нас на страницу с привязанным меню и модулями (отключаем через ‘Меню-mainmenu (главное меню, может назваться по-другому)’).
НО. Если вы выводите на главную ещё и НОВОСТЬ, то вас ждёт закономерный облом виде отсутствия кнопки «подробнее».
Что лично для меня уже не является критичным. Новости можно выводить через многочисленные модули (под новостью подразумевается любой материал, не привязанный к конкретному пункту меню). В таких модулях есть собственная настройка показа ссылки «подробнее», таким образом мы можем разграничить наши интересы.
Теперь внимание ПРОФЕССИОНАЛАМ от программирования.Есть идея сделать процесс более изящным.
Хочется, чтобы местные гуру высказали своё мнение по теме автоматизации процесса.
Итак, вариант первый и малокровный:Сделать то же самое с заменой кнопки меню, но уже с помощью мамбота.
Думаю, что-то типа
http://ext.joom.ru/smartlink-premium.html подойдёт.
Можно модифицировать под себя.
Цель-обеспечить большую гибкость решению. Т.е. работу локальных ссылок без привязки к URL сайта. Плюс можно вообще «отключение» собственной кнопки по желанию, без стирание по всем статьям. Опять же, сохраняется возможность написать своё название ссылки на подробности, что приятно.
Вариант второй. Сложный (но жутко заманчивый)Сделать мамбота для генерации ссылки «подробнее» в авторежиме.
Чтобы он определял, привязана ли статья к конкретному пункту меню и, если привязана, то генерировал связанную с пунктом ссылку.
На сколько я понимаю (не бейте ногами php-дауна) это можно реализовать с помощью хака. Но это вариант не гибкий и чреватый глюками, т.к. ковыряние в ядре системы не есть гуд.
Думаю, можно пожертвовать частью производительности и реализовать именно мамбот.
Не совсем представляю механизм работы мамбота, но, думается, выловить ID материала и раздела для тех, кто в танке, не сложно. Так же можно найти и заменить URL стандартной ссылки «подробнее» на нужный, если есть привязка к меню.
Чтобы не перегружать сервер, в настройках мамбота завести поля для ограничения поиска и замены по ID разделов (к примеру, новости шерстить вовсе не нужно, можно проверять вводный текст только тех материалов, что относятся к определённым разделам. «Деятельность», к примеру).
Мне кажется, что задача вполне посильная. Может и не идеальное решение для крупных порталов в плане производительности, но простому корпоративному сайту хватит за глаза, к тому же краткое содержимое обычно и является кратким, поэтому даже при выводе нескольких таких статеек в блог поиск и ре/генерация ссылок не должен занять много времени.
Ну и сохранится обратная совместимость при отрубленном мамботе.
Ладно, я всё сказал
Курю бабмук и жду прихода профессионалов, которые скажут что «тут всё не правильно!»
Антон Сумин aka effrit