База знаний   /   SEO Tags Generator

SEO Tags Generator + OC FILTER

Опубликовано 06 April 2021 12:33 pm

Изначальная функция модификатора

Некоторое время интеграция моего модуля с фильтром OCFilter заключалась в том, чтобы при выборе какого-то параметра в фильтре, этот параметр бы не просто добавлялся в конец фразы, а становился часть названия категории.

К примеру : Медтехника для медучереждений - купить
Станет    : Медтехника для медучереждений Праймед - купить

В версии модификатора "SEO Tags Generator + OC Filter 1.6" для двойки этот код помечен комментарием и оставлен там только ради обратной совместимости с настройкам формул в моем модуле. Однако, кроме него такую же самую подставновку выполняет код самого фильтра

Для OpenCart 2.x

storage/modification/catalog/controller/product/category.php

if (false !== strpos($meta_title, '{filter}')) {
$meta_title = trim(str_replace('{filter}', $filter_title, $meta_title));
} else {
...

 

Для OpenCart 3.x

system/library/ocfilter.php

public function getPageMetaTitle($meta_title) {
$page_info = $this->getPageInfo();

if ($page_info) {
$meta_title = $page_info['meta_title'];
} else if ($this->filter_title) {
if (false !== strpos($meta_title, '{filter}')) {
$meta_title = trim(str_replace('{filter}', $this->filter_title, $meta_title));
} else {
$meta_title .= ' ' . $this->filter_title;
}
} else {
$meta_title = trim(str_replace('{filter}', '', $meta_title));
}

return $meta_title;
}

 

Для того, что передать обработку этой задачи фильтру, необходимо использовать в формулах категории переменную {filter}.

То есть, необходимо вписать: [category_name] {filter} - купить тут...

В модификаторе "SEO Tags Generator + OC Filter" для тройки это изначально ложится на переменную {filter}.

Однако, главный вопрос: Для чего это вообще нужно?

Ранее в модуле OC Filter была настройка "Запретить индексацию после выбора", где можно было поставить 1 или 2, чтобы автоматически слепленные тексты, которые были более менее божескими, индексировались и создавали соответствие низкочастотным запросам. Но это утратило смысл. 14 марта 2021 года в этом вопросе была поставлена жирная точка. Автор модуля OCFilter отключил индексацию тех страниц фильтра, которые создаются автоматически путем подбора по заданным параметрам. Соответственно, данный функционал почти что утратил смысл. Подходит только для тех случаев, когда Вы хотите для людей вывести Название категории с выбранным фильтром + какой текст в конце названия. А такая задача случается крайне редко.

Кроме того, некоторые оптимизаторы все таки "допиливают" модуль фильтра так, чтобы автоматически созданные страницы фильтра с 1 выбарнным параметром индексировались.

 

Текущая основная функция модификатора "SEO Tags Generator + OC Filter"

Сейчас  главная задача модификатора "SEO Tags Generator + OC Filter" - сделать так, чтобы при создании SEO Страниц фильтра можно было использовать переменные для категорий из моего модуля, вроде [count_products], [category_nested] и тд.

 

Для тройки это дело начато в версии 1.4. Но там были баги. Для их исправления выпущена версия 1.5. Потом оказалось, что в двойке архитекутра OCFilter не такая, как в тройке и копипаст кода не дал должного результата. Поэтому выпушена версия 1.6, которая учитывает разницу.

 

Однако, даже в версии 1.6 переменные [min_price] и [max_price] в OpenCart 2 / ocStore 2 не будут работать. Связано это с тем, что в тройке фильтр предоставляет методы для получения соответственных значений по выбранным параметрам, а вот для двойки - нет.

 

$this->ocfilter->getMinPrice();
$this->ocfilter->getMaxPrice();

 

 

Технические нюансы

 

Важно!

Модификатор фильтра должен отработать раньше, чем модификатор моего модуля!!

Ведь в контроллере категории catalog/controller/product/category.php мой модификатор цепляется за уже изменный фильтром код категории.

Обычно так оно и происходит, но иногда пользователи устанавливают модификатор, который меняет очередь выполнения модификаторов.

 

 

Пометки для себя

 

===============================

Проблемы с версиями OC Filter под двойку и тройку

===============================

 

Последний раз сталкивался с версией 4.7.5.0.3 (на форуме актуальная версия 4.7.5)

Оказалось, что в тройке в контроллере категорий фильтр использует объект $this->ocfilter, а в двойке нет. А я создал модификатор "SEO Tags Generator: мета-теги в OC Filter 1.5" с расчетом на этот объект.  А в версии модуля SEO Tags Generator V3.6.7.b вписал обращение к объекту фильтра прямо в контроллере своего модуля, чтобы убрать небольшой баг с переменной, которую создает модуль {filter} на странице категории, когда не выбран ни один параметр фильтра (хотя, автор фильтра также собирался устранять эту помарку).

 

В общем, приходится выпиливать OCFilter из контроллера моего модуля... Так появилась версия SEO Tags Generator 3.6.10. Потратил на это дело в совокупности около 10 часов времени.

 

 

===============================

Адаптации пользователей

===============================

 

---

Изменил переменную [count_products], теперь она возвращает не просто 
цифру, а количество товаров + слово 'товар' в правильном склонении.

function getWord($number, $suffix) { $keys = array(2, 0, 1, 1, 1, 2); $mod = $number % 100; $suffix_key = ($mod > 7 && $mod < 20) ? 2: $keys[min($mod % 10, 5)]; return $suffix[$suffix_key];
}
$array = array("товар", "товара", "товаров");
$ocfilter_page_info['total'] = $data['product_total'] .' '. getWord($count, $array);

 

---

// Min & Max Price
$ocfilter_page_info['min_price'] = $this->currency->format($this->ocfilter->getMinPrice(), $this->session->data['currency']);
$ocfilter_page_info['max_price'] = $this->currency->format($this->ocfilter->getMaxPrice(), $this->session->data['currency']);