Свои теги h1 и title в OpenCart. Часть 2

Работа сис. админа
1 мин. на чтение

В предыдущем посте мы написали административную часть этой доработки. Сейчас сделаем правки в пользовательской части. Начнем с Контроллера, т.к. Модель в правках не нуждается.

Идем в catalog/controller/product/category.php и меняем строку

$this->document->setTitle($category_info['name']);

на

if ($category_info['meta_title']) {
 $this->document->setTitle($category_info['meta_title']); 
 } else {
 $this->document->setTitle($category_info['name']); 
 }

Условие проверят, получаем ли мы из Модели не пустую переменную $category_info['meta_title']. Если да, то присваиваем странице тег <title> из нее, в противном случае в <title> попадет просто название категории.

Теперь займемся тегом <h1>. Для начала передадим переменную в Представление. Для этого, скажем, перед строкой

$this->data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8');

добавим

$this->data['meta_h1'] = $category_info['meta_h1'];

Перейдем к Представлению. У меня в примере шаблон отличается от стандартного, но код будет очень похож, сможете догадаться или спрашивайте в комментариях, если что-то не сработает.

идем в catalog/view/theme/ваш-темплейт/template/product/category.tpl

Нужна мне строка выгдядит так, ваша может отличаться, но незначительно. Заменяем

<header class="category-name"><h1><?php echo $heading_title; ?></h1></header>

На

<header class="category-name">
 <?php if ($meta_h1) { ?>
 <h1><?php echo $meta_h1; ?></h1>
 <?php } else { ?>
 <h1><?php echo $heading_title; ?></h1>
 <?php } ?>
</header>

Все правки закончены и все отличное работает. Проверим, добавим в административной панели свои поля:

и проверим на сайте:

Все, мы закончили писать код для вывода своих полей тего <h1> и <title> для OpenCart. Внимательный читатель может заменить, что я не представил код для товаров. Смею вас заверить, что они выполняются совершенно таким же способом. Если у вас возникнут трудности – напишите об этом в комментариях и я добавлю правки для товаров.

Игорь Чишкала

Директор по технологиям в SoftForge.
Люблю ИТ, пишу технические статьи в этом блоге или для сайта фриланс-биржи Upwork. Кодю на PHP с использованием фреймворков Laravel или Symfony.

Оцените автора
Авторский блог Игоря Чишкалы

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

  1. Дмитрий

    Друг, ты лучший! Будь счастлив! Живи долго!)) Денег мне сэкономил, хотел модуль покупать, а тут ты))

    Ответить
    1. Игорь Чишкала автор

      Да пожалуйста :)
      Еще будут, сейчас дописываю для управления индексацией товаров.

      Ответить
  2. Дмитрий

    Игорь, ещё такой вопрос, можно ли прикрутить этот способ к разделу информационные «Статьи»? Потому как там тоже всё свалено в одну кучу и тайтл и h1 и все остальное. Глянул в базу а там уже есть таблица title, я так понял, что в админке это — Название статьи, как быть? Я в пхп не силён, но по таким великолепным инструкциям как у вас всё получается))

    Ответить
    1. Ihor Chyshkala

      можно везде, где у меня title заменить скажем на seo_title

      Ответить
  3. Андрей

    Замечательная статья! Спасибо Игорь Вам большое, все получилось и для категорий и для товаров!

    Ответить
  4. Светлана

    Здравствуйте, Игорь.
    Спасибо большое за классную и детальную статью про тэги h1 и title в OpenCart.
    Хотела поручить это программисту, но он ближайший месяц занят.
    Всё делала согласно инструкции, первый раз внозила изменения в БД и всё получилось )
    Поля для h1 и title появились. title в категориях работает, а в товарах выдает Undefined index: meta_title…Что нужно еще изменить?
    H1 пока не работает, так как не закончила последний шаг. Не могу понять в какую строку в моем случае нужно вносить изменения. Подскажите, пожалуйста.
    Очень уже хочется увидеть итоговый результат проделанной работы )

    Ответить
    1. Ihor Chyshkala

      Выложите куда-нибудь файл ваш, проверим. Раз Undefiend, значит ошибка в controller.
      И у меня ж тут не полная инструкция для товаров, полная только для категорий, т.к. я считал, что тут «любой разберется». Видимо все нужно разжевать :)

      Ответить
  5. Светлана

    Спасибо, что ответили.
    Я просто совсем новичок в этом =)
    Для товаров всё делала по аналогии с категориями…controller для продуктов здесь: https://docs.google.com/document/d/e/2PACX-1vRwb6x06nz_ro2pYwT5mgtfZWUJFEKmPXHT4y0BL2TmijkVavFR5ilLnhlfkxERiX-dcmVsEt5ild96/pub

    Файл категорий для последнего шага: https://docs.google.com/document/d/e/2PACX-1vRH-pl_bahpRINMrhNmIxvpVIhbaCdkA1pL6rCtrl44ZQSiYc5OmiQmG_dff7TaF-AmAkwy7LfbSrwl/pub

    Ответить
  6. автозеркала

    а для ос сторе актуально?

    Ответить
    1. Ihor Chyshkala

      Не должно быть, т.к. там это уже присутствует из коробки.

      Ответить
  7. Виталий

    Здравствуйте.
    Пробую делать для товаров по аналогии. Для категорий все работает, а для товаров на последнем шаге какая-то загвоздка. В файле catalog/controller/product/product.php после добавления строки $this->data[‘meta_h1’] = $product_info[‘meta_h1’]; на странице товара весь код отображается примерно так �� �R��i{��x�߉���+v�*�϶3���2�D�a+�?. Это что-то с кодировкой?

    Ответить
    1. Ihor Chyshkala

      Да, похоже на кодировку.

      Ответить
  8. Василий Бармолини

    Автору здоровья и благополучия)))) Все получилось. Все работает. Очень подробная пошаговая инструкция.

    Ответить