Jump to content

Доработка микроразметки в формате JSON-LD


Doe
 Share

Recommended Posts

Добрый день всем знатокам!
Нужна ваша помощь, решить самому ну никак не получается.

Есть сайт на ocstore3, на странице товара встроена микроразметка в формате JSON-LD, вот в ней хотел бы в разделе "brand",
то есть в название бренда, чтоб выводилась бы текущая категория товара, то есть, если к примеру если товар находится в такой категории:
Главная - Автомобили - Немецкие - Мерседес, выводилась бы последняя категория, пример ниже:
 

<script type="application/ld+json">
...

"brand": {
    "@type": "Brand",
    "name": "Мерседес"
  },

...
</script>


Заранее всем спасибо, кто смог осилить эту сложную задачу, и объяснить мне куда и что, надо вставить!

Link to comment
Share on other sites

В стандартной теме самого опенкарт , нет микро-разметки.

Вы же можете получить название категории предварительно объявив в контроллере product.php  ну или например из хлебных крошек итд итп.

Link to comment
Share on other sites

Tom, естественно в стандартное теме её нету, просто человек спросил, а какой смысл какая тема, я не понял, поэтому стандартно и ответил)))

Это я знаю, ну например description или name, можно вывести стандартно {{ name }}, к примеру.

По такоежему принципу, нужно вывести главную категорию, в которой товар находится, как в самом начале писал если цепочка такая - Главная - Автомобили - Немецкие - Мерседес, то последнее "Мерседес" выводился!

Как это сделать правильно (что где дописать/заменить) еще не знаю!

Edited by Doe
Link to comment
Share on other sites

В 10.02.2026 в 12:17, Doe сказал:

Tom, естественно в стандартное теме её нету, просто человек спросил, а какой смысл какая тема, я не понял, поэтому стандартно и ответил)))

Это я знаю, ну например description или name, можно вывести стандартно {{ name }}, к примеру.

По такоежему принципу, нужно вывести главную категорию, в которой товар находится, как в самом начале писал если цепочка такая - Главная - Автомобили - Немецкие - Мерседес, то последнее "Мерседес" выводился!

Как это сделать правильно (что где дописать/заменить) еще не знаю!

а производители?
их нельзя туда вместо этой категории дублирующей бренд?
потому, что будь вы в категории на одну выше - у вас в бренд полетит - Немецкие

Link to comment
Share on other sites

Об этом я думал уже, и это было бы самым простым решением, но дело в том, что товаров не одна тысяча, и в каждой карточке копаться... сам понимаешь...

Поэтому, проще кодом, выдернуть главную категорию и вставить ее...

Видел на многих сайтах, когда в карточке товара, слева картинка товара, как обычно, а справа характеристики его, и категория указана к какой он относится! Вот подумал, должно быть решение!

Edited by Doe
Link to comment
Share on other sites

В 10.02.2026 в 14:50, Doe сказал:

Об этом я думал уже, и это было бы самым простым решением, но дело в том, что товаров не одна тысяча, и в каждой карточке копаться... сам понимаешь...

Поэтому, проще кодом, выдернуть главную категорию и вставить ее...

Видел на многих сайтах, когда в карточке товара, слева картинка товара, как обычно, а справа характеристики его, и категория указана к какой он относится! Вот подумал, должно быть решение!

т.е. кодом производителя не выдернуть?

Link to comment
Share on other sites

В 10.02.2026 в 16:50, Doe сказал:

выдернуть главную категорию

Она же у вас не главная, а последняя в цепочке  пути к товару.

Не особо верное решение на скорую руку.
В файле catalog/controller/product/product.php
Находим 
 

if ($product_info['meta_title']) {

 

Добавляем до этой строки 

$data['current_category'] = '';
$category_query = $this->db->query("SELECT cd.name FROM " . DB_PREFIX . "product_to_category p2c LEFT JOIN " . DB_PREFIX . "category_description cd ON (p2c.category_id = cd.category_id AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "') WHERE p2c.product_id = '" . (int)$product_id . "' ORDER BY p2c.category_id DESC LIMIT 1");
if ($category_query->num_rows) {
	$data['current_category'] = $category_query->row['name'];
}

 

Получаем значение последней категории товара. В карточке товара используем так


opencart 2
 

<?php echo $current_category; ?>

 

Opencart 3

{{ current_category }}


 

Link to comment
Share on other sites

В 10.02.2026 в 15:36, Tom сказал:

Она же у вас не главная, а последняя в цепочке  пути к товару.

Не особо верное решение на скорую руку.
В файле catalog/controller/product/product.php
Находим 
 

if ($product_info['meta_title']) {

 

Добавляем до этой строки 

$data['current_category'] = '';
$category_query = $this->db->query("SELECT cd.name FROM " . DB_PREFIX . "product_to_category p2c LEFT JOIN " . DB_PREFIX . "category_description cd ON (p2c.category_id = cd.category_id AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "') WHERE p2c.product_id = '" . (int)$product_id . "' ORDER BY p2c.category_id DESC LIMIT 1");
if ($category_query->num_rows) {
	$data['current_category'] = $category_query->row['name'];
}

 

Получаем значение последней категории товара. В карточке товара используем так


opencart 2
 

<?php echo $current_category; ?>

 

Opencart 3

{{ current_category }}


 

Я считаю главной, у меня хлебные крошки идут так, к примеру:

Главная - Автомобили (последняя не активная)... выбираешь марку авто

Главная - Автомобили - Мерседес (тоже последняя не активная)

Выбираешь любой товар в этой (последней) категории и тогда в карточке товара = Главная - Автомобили - Мерседес (последняя уже активная)

Tom, ваша конструкция вроде показывает как и хотел бы, надо протестировать! БЛАГОДАРЮ!

Хотел спросить, а в чем она не верная, какие подводные камни в ней?

Link to comment
Share on other sites

В 10.02.2026 в 19:11, Doe сказал:

Я считаю главной, у меня хлебные крошки идуи так, к примеру:

Главная - это родитель.
Вы же сами пишите
 

 

В 08.02.2026 в 17:51, Doe сказал:

Главная - Автомобили - Немецкие - Мерседес

То есть у вас у товара главная / родитель это - Автомобили.

 

 

В 10.02.2026 в 19:11, Doe сказал:

Хотел спросить, а в чем она не верная, какие подводные камни в ней?

Потому что  не правильно  внедрять в контроллер то что предназначено для модели. По хорошему нужно добавить новую функцию в модель. Ну например

              public function getProductLastCategory($product_id) {
                  $query = $this->db->query("SELECT cd.name FROM " . DB_PREFIX . "product_to_category p2c LEFT JOIN " . DB_PREFIX . "category_description cd ON (p2c.category_id = cd.category_id AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "') WHERE p2c.product_id = '" . (int)$product_id . "' ORDER BY p2c.category_id DESC LIMIT 1");
                  return $query->num_rows ? $query->row['name'] : '';
              }

и в контроллере уже получать из модели данные
 

$data['current_category'] = $this->model_catalog_product->getProductLastCategory($product_id);

 

Link to comment
Share on other sites

В 10.02.2026 в 17:17, Tom сказал:

Главная - это родитель.
Вы же сами пишите
 

 

То есть у вас у товара главная / родитель это - Автомобили.

 

 

Потому что правильно не внедрять в контроллер то что предназначено для модели. По хорошему нужно добавить новую функцию в модель. Ну например
 

              public function getProductLastCategory($product_id) {
                  $query = $this->db->query("SELECT cd.name FROM " . DB_PREFIX . "product_to_category p2c LEFT JOIN " . DB_PREFIX . "category_description cd ON (p2c.category_id = cd.category_id AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "') WHERE p2c.product_id = '" . (int)$product_id . "' ORDER BY p2c.category_id DESC LIMIT 1");
                  return $query->num_rows ? $query->row['name'] : '';
              }

и в контроллере уже получать из модели данные
 

$data['current_category'] = $this->model_catalog_product->getProductLastCategory($product_id);

Tom, что первый ваш вариант, что этот (для внедрения в модель), вроде показывает как надо!

А на счет категорий.. может я не так выразился (написал)... для меня главная та, в которой находится товар, а он может находиться и в других категориях, но полюбому из других категорий будет товар вести на главную товара!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...