CMS Joomla!

...всё дело в открытом коде

  • Увеличить размер
  • Размер по умолчанию
  • Уменьшить размер
Главная Блог VirtueMart sh404sef - удаляем ID категории из тайтла (title)
09.08.10 19:41

sh404sef - удаляем ID категории из тайтла (title)

Написал  Олег М.
Оценить
(3 голоса)

После долгих мучений со всякими роутерами для Virtuemart, решил для себя - в топку все эти а-ля встроенные в ядро SEF-приблуды. Бесит и родной SEF Joomla 1.5 из-за возможной кучи дублей, про Виртуемарт вообще молчу. Он сам по себе "хорош" - что с ЧПУ, что без них - получается куча г...-ссылок в виде дублей. Этого можно избежать с помощью сторонних SEF-расширений, одним из которых является sh404sef. Но и с ним можно получить проблемы из-за хитромудрости разработчиков.

Задача

Использовалась последняя версия sh404sef линейки 2.0. Надо было сделать SEF-ссылки в Виртуемарт, но так, чтобы они были не очень длинными и вполне корректными. Наиболее подходящий вариант - оставить в URL 1 категорию. Если оставить все, то для большой вложенности категорий (2 и более), URL будут слишком длинными.

Использовались следующие настройки sh404sef.

Настройки ссылок Virtumart в sh404sef

Так как многие подкатегории Virtuemart имели одинаковые названия (например, названия брендов), то для уникализации ссылок необходимо использование ID категории. В таком случае ссылка получается вида /17-category/product.html. Здорово, что sh404sef умеет генерировать title и метатеги, здесь то и зарылась собака. Разработчики посчитали, что title тоже надо уникализировать за счет ID категории и тайтл выглядел так:

17-Категория 2 | 15-Категория 1 | Товар | Название магазина

При этом в метатеге keywords было следующее:

Товар, Категория 2, Название магазина, URL магазина

Все обнаруженные несоответствия и задачи для решения:

  • в title - удалить ID категории и название магазина
  • в метатеге keywords - удалить запятые, название магазина и url, все слова перевести в нижний регистр (так правильнее для SEO).

Решение

Необходимо исправлять файл components/com_sh404sef/meta_ext/com_virtuemart.php


1. Меняем строки

$title .= ($sefConfig->shInsertCategoryId ?
 $tree[ $category_id ]->category_id.$sefConfig->replacement : '')
 .$tree[ $category_id ]->category_name. ' | ';
 $category_id = $tree [ $category_id ]->category_parent_id;

на

$title .= $tree[ $category_id ]->category_name. ' | ';
 $category_id = $tree [ $category_id ]->category_parent_id;

В общем-то, для удаления ID категорий этого уже достаточно. Дальше уже наводим красоту.


2. Меняем

$shCustomTitleTag = $catList ? $catList.' | ':'';

на

$shCustomTitleTag = $catList ? $catList:'';

удалили вертикальную черту после всех категорий


3. Меняем

$shCustomTitleTag .= empty($pageString) ? '' : $pageString .' | '; // shop name $shCustomTitleTag .= $shShopName;

на

$shCustomTitleTag .= empty($pageString) ? '' : $pageString;

то же, что и в п.2, но для многостраничных документов + удаляем название магазина


4. Заменяем

$shCustomKeywordsTag = ($catList ? str_replace('|', ',', $catList).',':'')
 .$shShopName. ','.$shStoreName;

на

$shCustomKeywordsTag = ($catList ? str_replace(' |', '', $catList):'');

убрали из метатегов запятые, название магазина и продавца (написано продавец, а выводился URL магазина из настроек Virtuemart)


5. Идем дальше и меняем

$shCustomTitleTag = $row->product_name.' | '.($catList ? $catList.' | ':'').$shShopName;
 $shCustomDescriptionTag = $row->product_s_desc;
 $shCustomKeywordsTag = $row->product_name.', '.($catList ? str_replace('|', ',', $catList).',':'')
 .$shShopName. ','.$shStoreName;

на

$shCustomTitleTag = $row->product_name.' | '.($catList ? $catList:'');
 $shCustomDescriptionTag = $row->product_s_desc;
 $shCustomKeywordsTag = $row->product_name.' '.($catList ? str_replace(' |', '', $catList):'');

всё описано выше, но эти изменения касаются страницы товара (карточки товара, флаера).


6. Заменяем

if (!empty($catRows)) {
 forEach ($catRows as $cat)
 $shCustomKeywordsTag .= $cat->category_name.',';
 }
 $shCustomKeywordsTag = $shCustomKeywordsTag.$shShopName. ','.$shStoreName;

на

if (!empty($catRows)) {
 forEach ($catRows as $cat)
 $shCustomKeywordsTag .= $cat->category_name.' ';
 }


7. И наконец, для перевода мететега decription в нижний регистр, добавляем перед ?> код

$shCustomKeywordsTag = JString::strtolower($shCustomKeywordsTag);

На этом всё.

Конечно, правильнее было бы ручками прописать все title и метатеги, но когда товары уже вбиты - можно доверить это SEF-компоненту SH404SEF.

Изменено 09.08.10 23:35
Олег М.

Олег М.

Веб-разработчик со пятилетним стажем, администратор joomla-support.ru, локализатор, ответственный за выпуск русской Joomla RE.

Сайт: cms-joomla.ru
Подробнее в этой категории: « Исправление - валидность noimage.gif в Virtuemart

3 комментарии

  • Ссылка на комментарий Олег. 17.11.10 01:43 отправлено Олег.

    Прикольно. А как ручками то прописать? Сделаны субдомены из категорий вирта. Задача: прописать отдельно для каждой категории/субдомена свой тайтл.

  • Ссылка на комментарий Глеб 24.10.10 21:45 отправлено Глеб

    спасибо огромное, пригодилось!

  • Ссылка на комментарий Дмитрий 09.10.10 07:25 отправлено Дмитрий

    Здравствуйте, Олег!

    Присутствие цифр в тайтлах меня тоже беспокоило, но, думал, что в ш404сеф лучше не лезть. Все сделал по Вашему мануалу. РАБОТАЕТ!!! )
    Спасибо Вам большое!

Leave a comment

Make sure you enter the (*) required information where indicated.
Basic HTML code is allowed.


Скачать русскую Joomla 1.5

Выберите архив Джумлы в формате ZIP или TAR.GZ (TGZ)
Joomla 1.5.25 RE Stable Full Package (zip)
6.21 MB
Joomla 1.5.25 RE Stable Full Package (tar.gz)
4.4 MB

Пакеты обновлений Joomla RE 1.5 Скачать обновление Joomla RE

Онлайн-помощь

Нужна срочная помощь по CMS Joomla? Звоните!

Краткий перечень услуг:
  • установка, восстановление и настройка Джумлы;
  • миграция на Joomla 1.5;
  • верстка шаблонов Joomla;
  • разработка сайтов-визиток;
  • разработка интернет-магазинов

Мой статус

Время работы: 10:00-19:00 (мск) Внимание! Вся помощь осуществляется на платной основе с почасовой оплатой

Авторизация