﻿/* V 3.5.4 (29.11.2023)
------------------------------------- */
--
Фікс помилки
Undefined variable: res_delete in .../public/admin/model/extension/module/seo_url_generator.php
on line 394
Помилка на версії для трійки в разі, якщо в базі були дублі ЧПУ для тієї самої сутності
Помилка виникала саме в тому методі, які видаляє ті дублі.

--
Оновлена бібліотека system/library/stdelog.php до версії 0.9.4


/* V 3.5.3 (15.08.2023)
------------------------------------- */
--
В OpenCart 3 / ocStore 3 в інтерфейсі залишалося налаштування: "Актуалізувати SEO URL при редагуванні",
яке вилучено у версії 3.5.0
Але воно ні на що вже не впливало та не зберігалося.


/* V 3.5.2 (07.08.2023)
------------------------------------- */
--
Виправлення помилки з OpenCart.PRO -- https://opencartforum.com/topic/104904-podderzhka-seo-url-generator-pro-dlya-opencart-2x-3x/?page=7#comment-1811204

PHP Notice:  Undefined variable: route in *** catalog/controller/startup/seo_pro.php on line 140 



/* V 3.5.1 (21.07.2023)
------------------------------------- */

--
Для трійки була помилка
<b>Notice</b>: Undefined index: module_seo_url_generator_rewrite_on_save in <b>D: .../oc-store-3037-global.loc/admin/controller/extension/module/seo_url_generator.php</b> on line <b>840</b>

--
Після видалення з модифікатору обробки в моделях (надлишковий функціонал Акуталізація) також перестали зберігалися та видалялися редіректи... Упс...
Виправлено

--
Також у версії під двійку сталася помилка з редіректами через зміни, зороблені в 3.5.0
Виправлено



/* V 3.5.0 (17.07.2023)
------------------------------------- */


---
Оновлено файл system/library/seo_url_generator/translit/ukr.php

Зроблено правки згідно Постанові від 27 січня 2010 р. N 55
"Про впорядкування транслітерації українського алфавіту латиницею" -- https://zakon.rada.gov.ua/laws/show/55-2010-%D0%BF#Text 
 
Приклади онлайн транслітерації українською мовою для звірки
  - http://ukrlit.org/transliteratsiia
  - https://www.grafiati.com/uk/transliteration/


---
Також в Universal translit додав літеру "і" української абетки -- ії там не було...


---
В нашалтуваннях модуля прибрана функція "Актуалізувати SEO URL при редагуванні"
Все одно ії майжи завжди вимикають.
Також вона створює багато непорозумінь зі зміною ЧПУ.
 - Модификатори
 - налаштування модуля
 - rewrite_on_save -- всюди, де зустрічається в контроллерах


---
При виконанні CRON-завдання відмінив свторення редиректів
Адеж таким чином обробляються новоімпортовані товари, які навряд чи мали час потрапити в індекс гугла.
Окрім того, користувачи скаржаться, що воно створює зайві редиректи.


---
Зробив так, щоб в OpenCart 3 / ocStore 3 під час масової генерації (та крону) могло генерувати однакові SEO URL для всіх мов.
Хоча в минолому, за проханням окремих користувачив, я навпаки додав унікалізацію для кожної мови, щоб запобігти створенню однакових ЧПУ

Але з тих пір дещо змінилося:
 1) З'явився безкоштовний модуля "Мовні папки в URL", якій робить так, щоб посилання відрізнялися саме "папками", а не SEO URL
    Тобто не можнка сказати, що це буде потребувати додаткових витрат кліенту
 2) Варіанти без "мовної папки" частіше за все мають префікс або постфікс мови в посиланні - таке запобігання однаковим SEO URL
    виглядає трохи краще, ніж індекси (цифри) на прикінці ЧПУ. Це вже загальновідома практика.
 3) Є реальний кейс, де довго розбиралися, що то за цифри, коли для однієї мови product-name-1, іншої product-name-2, а на сайті загалом кілька таких категорії та товарів з однаковими назвами. Просто капець, як воно заплутує, коли потім шукаєшь, що до чого стосується...


---
Покращений цикл фонових запитів в Масовій генерації SEO URL.
Де дуже показово на "несвіжих" компьютерах, коли при масовії генерації воно просто зависало і не рахувало
кількість виконаних кроків.


---
Зміни в модифікаторі для seopro.php та seo_url.php
Код мого модуля виділено в окремий контроллер

$this->load->controller('extension/module/seo_url_generator_redirects');


---
Зменшена кількість логів, щоб їх було не так стрьомно читати
+
Заодно оновив файл бібліотеки system/library/stdelog.php


---
Додав обробку HTML-кодів &#34; та &#039;

Лапки (наприклад, "Кактус") в базі даних можуть мати такий вигляд: &#34;Кактус&#34;
SEO URL виходить: 34kaktus34

Стандатрним для OpenCart є такий варіант в базі: &quot;Кактус&quot;
він оброблявся коректно й до цього оновлення.


---
Виправлена помилка (для OpenCart 3 / ocStore 3):
Undefined index: language_id in <b>D:\Dev\OSPanel\domains\oc-store-3037-global.loc\admin\controller\extension\module\seo_url_generator.php</b> on line <b>771</b>
Тобто не автозаповнювало SEO URL під час додавання нового товару з адмінки (хоча потім при збереженні воно все одно генерувало під час зберігання товару, але у формі ЧПУ не з'являлися)




/* V 3.4.2 (15.02.2023)
------------------------------------- */
---
Фікс для OpenCart 3 / ocStore 3
При додаванні нового товару (категорії та інше) в адмінці сайту генерація від однієї мови працювала некоректно.



/* V 3.4.1 (10.02.2023)
------------------------------------- */
---
Помилка на ocStore 2.1
В формі товару для ocStore 

Було: manufacturer_id : $('#input-manufacturer').val(),
Стало: manufacturer_id : $('input[name="manufacturer_id"]').val(), // як для OpenCart всіх версій

ocStore 2.3 -- select name="manufacturer_id" #input-manufacturer
ocStore 2.1 input #input-manufacturer окремо від input type="hidden" name="manufacturer_id" (як в OpenCart)

+
model :: getManufacturerNameById() - змінений для ocStore 2.1 | OpenCart 2.1
(тільки ocStore 2.3.x має активне поле oc_manufacturer_description.name з коробки)


/* V 3.4.0 (31.01.2023)
------------------------------------- */
---
Додано правило трансліту для грузинської мови
Універсальний трансліт, виявилося, не містив букв грузинського алфавіту...

---
Для трійки додана можливість вибрати, з якої мови генерувати ЧПУ.



/* V 3.3.12 (27.10.2022)
------------------------------------- */
---
Пофиксина ошибка в админке производителей.
При добавлении нового производителя не создавался SEO URL в интерфейсе формы

{% for language in languages %}
$('#input-name' + {{ language.language_id }}).change(function(){ generateUrlOnAdd(); });
{% endfor %}

=>

$('#input-name').change(function(){ generateUrlOnAdd(); });



/* V 3.3.11 (20.10.2022)
------------------------------------- */

---
Fatal error: Uncaught Error: Call to a member function essenceNameFilter() on null in .../admin/controller/module/seo_url_generator.php:785
Причина: model_extension_module в 2.1 !

---
Удалена папка с дополнительными модификаторами. Там находился модификатор для шаблона Техникс, который больше не доступен на opencartforum.com



/* V 3.3.10 (21.09.2022)
------------------------------------- */
Исправлена ошибка для OpenCart 2 / ocStore 2

PHP Notice:  Undefined variable: keyword in ./admin/model/extension/module/seo_url_generator.php on line 316
PHP Notice:  Undefined index: query in ./admin/model/extension/module/seo_url_generator.php on line 318

Ошибка проявлялась при наличие в базе нескольких SEO URL для одной и той же сущности.


/* V 3.3.9 (20.09.2022)
------------------------------------- */
---
Для OpenCart 3 / ocStore 3
Добавлена дополнительная обработка редиректов.
Актуально для тех, кто изменил основной язык сайта с русского на украинский.
Так вот, после этих изменений, все старые редиректы русских SEO URL стали 404

Почему?
Потому что по умолчанию сайт стал открываться на украинском языке. 
Ссылка site.com/old-link-ru уже не существует и, соответственно, по ней нельзя найти нужный язык. Значит загружается дефолтный язык (украинский)
А вот среди украинских редиректов такой ЧПУ не значится. Выходило 404

Теперь же ищутся редиректы для обоих языков.
site.com/old-link-ru редиректит теперь на site.com/new-link-ru

---
Исправлена ошибка для OpenCart 2 / ocStore 2
PHP Notice:  Undefined index: url_alias_id in admin/model/extension/module/seo_url_generator.php on line 281
Ошибка создана в версии 3.3.6

---
Исправлена Кодировка файла с описанием установки модуля
Была UTF-8 with BOM




/* V 3.3.8 (09.09.2022)
------------------------------------- */
---
Фикс ошибки при массовой генерациии SEO URL производителей
Ошибка была в версии модуля под тройку.

PHP Notice:  Undefined variable: data in .../admin/model/extension/module/seo_url_generator.php on line 295

PHP Notice:  Undefined variable: data in .../admin/model/extension/module/seo_url_generator.php on line 297

PHP Warning:  Invalid argument supplied for foreach() in .../admin/model/extension/module/seo_url_generator.php on line 297
PHP Notice:  Undefined variable: names in .../admin/model/extension/module/seo_url_generator.php on line 301




/* V 3.3.7 (30.08.2022)
------------------------------------- */
---
Фикс ошибки
Notice: Undefined property: Proxy::makeUniqueUrl in .../admin/controller/extension/module/seo_url_generator.php on line 1261
которая появлалсь в версии 3.3.6


/* V 3.3.6 (12.08.2022)
------------------------------------- */
--
Фикс ошибки с лишними редиректами для OpenCart 3 / ocStore 3
Ошибка проявлялась после добавления нового языка - когда в базе данных для одного языка ЧПУ была, а для другого не было

--
Немного причесаны логи

--
Небольшие правки кода


/* V 3.3.5 (19.05.2022)
------------------------------------- */
--
Фикс ошибки на OpenCart 2.2.0.0
После установки модуль не появлялся в админке из-за неверных путей к файлам.
Было упаковано для 2.2-2.3, а следует 2.1-2.2
Важно!
У 2.1 и 2.2 seo_url.php и seo_pro.php находятся в разных директориях.
Это фиксил уже без публикации версии. Войдет в 3.3.6 автоматом.

--
Обновлена библиотека StdE, для версии 2.0



/* V 3.3.4 (22.04.2022)
------------------------------------- */
--
Фикс ошибки на PHP 7.4 на тройке(!)
PHP Notice:  Trying to access array offset on value of type bool in .../admin/controller/extension/module/seo_url_generator.php on line 1223

--
Добавлено функция для универсальной транслитерации "Universal translit".
Оно работает для всех европейских языков.
За основу взят файл foreign_chars.php из CodeIgniter 3
https://github.com/bcit-ci/CodeIgniter/blob/develop/application/config/foreign_chars.php


/* V 3.3.3 (2021.11.17)
------------------------------------- */
--
Выявлена проблема с транслитом апострофа для украинского языка.
Слово: Дерев'яний
SEO URL: derev-yanyj

Чтобы добавить замену апострофа на ничего, необходимо было в настройках модуля сохранить пустые значения в пункте "Кастомные символы для замены"
Больше информации - https://support.sergetkach.com/knowledge/details/55/

--
В версию модуля для ocStore 3.x добавлена генерация ЧПУ для встроенного в сборку блога.
Ура!!!


/* V 3.3.2 (2021.11.09)
------------------------------------- */
---
Снова ошибка PHP Notice:  Undefined index: store_id in .../admin/controller/extension/module/seo_url_generator.php on line 965
В этот раз при вызове $this->load->controller('extension/module/seo_url_generator/generateSeoUrl', $sug_data);
из модифицированных моделей сущностей


/* V 3.3.1 (2021.10.15)
------------------------------------- */
---
Исправлена ошибка PHP Notice:  Undefined index: store_id in .../admin/controller/extension/module/seo_url_generator.php on line 965
Закралась в предыдущем обновлении.

---
Добавлены изменения версии V 3.3.0 для скрипта витрины, к-ый можно вызывать для генерации ЧПУ по расписанию
Совсем забыл про это добро :)


/* V 3.3.0 (2021.10.13)
------------------------------------- */
---
Исправлена ситуация с генерацией уникальных ЧПУ в админке сущности (товара, категории, производителя)
Раннее было заявлено, что generateSeoUrl() является базовым методом, который вызывается и методом, принимающим AJAX,
и методом, который выполняет массовую генерацию actionMassGenerateURL()
Но, как оказалось, фактическая проверка уникальности сгенерированного ЧПУ
происходила только при массовой генерации. Тогда как в "базовом" методе уникализацией даже не пахло.


/* V 3.2.9 (2021.08.06)
------------------------------------- */
---
Выяснилось, что при массовой генерации ЧПУ в версии модуля под OpenCart 3 / ocStore 3
не было проверки на существование SEO URL с пустыми значениями.
Пофиксино!
Проверил версию модуля под OpenCart 2 / ocStore 2 - там все ок.


/* V 3.2.8 (2021.07.28)
------------------------------------- */
---
Модуль адаптирован под ocStore 3.0.3.7

---
Обновлена библиотека StdeLog до версии 0.9.1
Дело в том что в моем же модуле Handy Product Manager с версии 1.11.0 используется метод библиотеки, который появился в StdeLog 0.9.1
Но некоторые пользователи устанавливают SEO URL Generator после установки Handy Product Manager,
что приводит к ошибке.


/* V 3.2.7 (2021.07.16)
------------------------------------- */
---
Исправлена ошибка для OpenCart 2.1, которая не давала зайти в настройки модуля
Fatal error: Class 'Controllermoduleseourlgenerator' not found in vqmod/vqcache/vq2-system_storage_modification_system_engine_loader.php on line 45
При этом в бесплатной версии модуля такой ошибки не наблюдалось


/* V 3.2.6 (2021.06.28)
------------------------------------- */
---
if (!preg_match("/[a-bA-Z\-_]+$/", $str_without_vars)) {
замена на без доллара
if (!preg_match("/[a-bA-Z\-_]+/", $str_without_vars)) {
  
чтобы можно было [category_name]-ru, а не только ru-[category_name]

---
Исправлена ошибка в версиях для OpenCart 2
Fatal error: Uncaught Error: Call to undefined method ControllerExtensionModuleSeoUrlGenerator::isValidLicence() in .../admin/controller/extension/module/seo_url_generator.php:1100 


/* V 3.2.5 (2021.06.23)
------------------------------------- */
---
В результате столкновения с тем, что в кастомной доработке в блоге
первичный ключ статьи таблицы базы данных отличался от ключа, по которому идет формирование SEO URL (query)
формат создания кастомных сущностей ( метод модели getCustomTabs() ) перетерпел изменения.
Это также повлекло изменения в других частях модуля


/* V 3.2.4 (2021.06.22)
------------------------------------- */
---
Открыта значительная часть кода модуля

---
Пофиксина ошибка
PHP Notice:  Undefined offset: 1 in .../system/library/seo_url_generator/seo_url_generator_72_73.php on line 1174
которая появлалсь, когда в системе были языки, для которых не заполнены названия

---
Пофиксина ошибка
PHP Notice:  Undefined index: name in .../admin/model/extension/module/seo_url_generator.php on line 572
которая появлялась в случае, когда товару был прикреплен id несуществуюего производителя



/* V 3.2.3 (2021.06.08)
------------------------------------- */
---
Оказалось, что нововведения версии 3.2.0 прошли мимо версии для OpenCartPRO 2.3.x
Исправлено!

---
Оказалось, что редиректы вообще не записывались при включенной актуализации
Это сопровождалось ошибками при сохранении товара через админку
В тройке:
PHP Notice: Undefined index: seo_url_generator_redirects in /home/www/sites/oc-store-3020.loc/storage/modification/admin/model/catalog/product.php on line 610
PHP Warning: in_array() expects parameter 2 to be array, null given in /home/www/sites/oc-store-3020.loc/storage/modification/admin/model/catalog/product.php on line 610
В двойке:
PHP Notice:  Undefined index: seo_url_generator_redirects in /home/www/sites/oc-store-23023.loc/system/storage/modification/admin/model/catalog/product.php on line 462
PHP Warning:  in_array() expects parameter 2 to be array, null given in /home/www/sites/oc-store-23023.loc/system/storage/modification/admin/model/catalog/product.php on line 462
Исправлено!

---
Исправлена сиутация с подменой текстов в хлебных крошках и в названии сущностей при невалидной форме при редактировании товара, категории, производителя, информации


/* V 3.2.2 (2021.06.01)
------------------------------------- */
---
В версии модуля для тройки пофиксина ошибка в логе модификаторов
CODE: if ($this->request->post['category_seo_url']) {  
NOT FOUND - OPERATIONS ABORTED!


/* V 3.2.1 (2021.04.27)
------------------------------------- */
---
Пофиксина ошибка в модуле при использовании на ocStore 2.3.x

Notice: Undefined index: category_seo_url in /system/storage/modification/admin/model/catalog/category.php on line 180
Notice: Undefined index: category_seo_url in system/storage/modification/admin/model/catalog/category.php on line 209
Warning: Invalid argument supplied for foreach() in system/storage/modification/admin/model/catalog/category.php on line 209
Notice: Undefined property: Proxy::getURLs in system/storage/modification/system/engine/loader.php on line 178

---
Пофиксина ошибка в модуле при использовании на ocStore 2.3.x
Fatal error: Uncaught Error: Call to a member function getRedirects() on null in modification/admin/controller/catalog/information.php:440 
Stack trace: 
#0 system/storage/modification/admin/controller/catalog/information.php(76): ControllerCatalogInformation->getForm() 
#1 system/storage/modification/system/engine/action.php(51): ControllerCatalogInformation->edit() 
#2 admin/controller/startup/router.php(26): Action->execute(Object(Registry), Array) 
#3 system/storage/modification/system/engine/action.php(51): ControllerStartupRouter->index() 
#4 system/engine/front.php(34): Action->execute(Object(Registry)) 
#5 system/engine/front.php(29): Front->execute(Object(Action)) 
#6 /home/vg420506/maxfortshop.com.ua/www/system/framework.php(103): Front->dispat in system/storage/modification/admin/controller/catalog/information.php on line 440


/* V 3.2.0 (2021.04.22)
------------------------------------- */
--
Добавлено удаление редиректов при редактировании категории (товара, производителя)

--
Убрано принудительное создание редиректов при замене ЧПУ, которое происходило после нажатия кнопки "Сохранить"



/* V 3.1.0 (2021.01.15)
------------------------------------- */
--
Добавлена возможность генерации SEO URL по Cron-заданию.

Внимание!
Ваш сервер должен быть в состоянии справиться с обработкой всех товаров за 1 http-запрос (!)

--
Изменились требования к версии IonCube Loader.
Теперь нужна версия кодировщика 10 или выше.


/* V 3.0.10 (2020.10.28)
------------------------------------- */
--
Исправлена ошибка
Fatal error: Uncaught Twig\Error\SyntaxError: Unexpected token "name" of value "valid_licence" ("end of print statement" expected) in "extension/module/seo_url_generator.twig" at line 72
которая появилась в версии OpenCart 3.0.3.5 в связи с обновлением TWIG


/* V 3.0.9 (2020.10.05)
------------------------------------- */
--
Пофиксина ошибка совместимости с vQmod:
/vqmod/vqcache/stde/stde_2.3.php is not a file!


/* V 3.0.8 (2020.09.08)
------------------------------------- */
--
Пофиксина ошибка в модуле для OpenCart 3 (ocStore 3.0.2.0) 
Notice: Undefined index: name in /home/www/sites/oc-store-3020.loc/storage/modification/admin/model/catalog/manufacturer.php on line 248


/* V 3.0.7 (2020.09.03)
------------------------------------- */

--
В модуле под OpenCart 3 исправлена ситуация, когда при генерации нового ЧПУ во время редактировании товара
происходило множественное создание редиректов с одним и тем же старым ЧПУ.

--
При наличии в формуле ЧПУ для товара переменной [manufacturer_name] это в не работало в ocStore 2.1.0.2.1 и 2.3.0.2.x

--
Исправлен поиск редиректов для OpenCart 3, когда не используется модуль SeoPro (если есть такие пользователи)

--
Исправлена актуализация ЧПУ в тех случаях, когда изменились данные товара (или др сущности)

--
Добавлена совместимость FREE-версии модуля с OpenCartPRO


/* V 3.0.6 (2020.08.12)
------------------------------------- */
--
Исправлена ошибка при копировании товаров в админке
Notice: Undefined index: product_seo_url in .../storage/modification/admin/model/catalog/product.php on line 163

--
Изменены методы:
  - getURL() для OpenCart 2.x
  - getURLs() для OpenCart 3.x

Так сложилось, что к моему модулю прибегают уже после попыток что-то наделать с ЧПУ.
Бывает, что у товаров уже есть несколько дублей ЧПУ, из-за чего ЧПУ, собственно, и не работают.
Ранее это никак не проверялось исходя из предположения, что в самом OpenCart в админке невозможно создать несколько ЧПУ
для одного и того же товара. Но существуют сторонние решения, которые такое могут учудить.

В общем, теперь данные методы при выборке ЧПУ проверяют наличие дублей.



/* V 3.0.5 (2020.07.30)
------------------------------------- */
--
Исправлено расположение файлов с английским и украинским языками

--
Исправлена подпись к FREE-версии модуля в модификаторах для OpenCart 3
(раннее там писало название платной версии)

--
Исправлена ошибка для версии модуля под 3-ку
PHP Notice:  Undefined offset: 0 in /home/www/sites/opencart-3020.loc/storage/modification/admin/model/catalog/product.php on line 462
+
Аналогичные ошибки для категорий и др сущностей




/* V 3.0.4 (2020.06.29)
------------------------------------- */
--
Исправлены ошибки в модуле для версии OpenCart 3
  - Undefined variable: result in .../public_html/system/library/seo_url_generator/seo_url_generator_71.php on line 769
  - Undefined index: setting in .../public_html/system/library/seo_url_generator/seo_url_generator_71.php on line 895

--
В версии для OpenCart 3 исправлено автоматическое включение модуля SeoPro


/* V 3.0.3 (2020.06.24)
------------------------------------- */
Устранена ошибка
PHP Warning:  count(): Parameter must be an array or an object that implements Countable in ./system/library/seo_url_generator/seo_url_generator_72_73.php on line 1140


/* V 3.0.2 (2020.06.15)
------------------------------------- */
--
Исправлена ошибка, когда в ЧПУ кавычки заменяются на слово quot

--
Добавлена версия под OpenCart 3.0.3.2, где в админке товара не вставлялись кнопки модуля


/* V 3.0.1 (2020.05.22)
------------------------------------- */
--
Отредактирована замена кастомных символов

--
В модуле для версии OpenCart 2 с добавлен текст для 
  - entry_system
  - entry_language_id  

--
Исправлена дата выхода версии 3.0.0 в файле изменений
По ошибке была оставлена планируемая, а не фактическая дата выхода

--
Отредактирована инструкция по установке модуля



/* V 3.0.0 Бета-версия (2020.05.15)
------------------------------------- */
--
Добавлена поддержка версии OpenCart 3. Ура!!!

--
Добавлена возможность генерации кириллических ЧПУ
Как это работает?
Для генерации кириллических ЧПУ необходимо в параметре "Правило транслитерации" выбрать "Не транслитировать"

--
Сделан рефакторинг кода модуля
  
--
Добалены новые настройки
  - Символ разделителя слов
  - Замена разделителя - регулирует, стоит ли в уже существующих ЧПУ заменять разделители 
    (my_seo_url => my-seo-url и наоборот)
    Это учитывается при нажатии на оранжевую кнопку "Сгенерировать незаполненные + заменить существующие"
  - Актуализировать ли SEO URL при редактировании, если менялось название товара или категории в админке
  - Кастомные символы для замены - можно указать свои символы, которые надо заменить в момент транслитерации  

--
Добавлен просмотр существующих редиректов для данного товара, категории, производителя, статьи (information)

--
Теперь каждая системная сущность имеет свою формулу (!)
  - Товары
  - Категории
  - Производители
  - Статьи (не блог, а именно information)
Зачем?
Некоторые клиенты хотели, чтобы в начало ЧПУ можно было вставлять метки для инструментов аналитики
Ex:
  product-some-item
  product-some-other-item
  category-some-item
  category-third
  manufacturer-first
  manufacturer-second

--
Добавлены перменные для системных сущностей
  product_id
  category_id 
  manufacturer_id
  information_id
Некоторым пользователям удобно работать с магазином, если ссылка товара имеет вид вроде:
  product-125-a-teperi-slova-dlea-semantiki
Так человеку сразу понятно, какой товар открыть в админке, и есть ключевые слова в УРЛе.


    
--
Изменена транлитерация
Файл admin/model/tool/translit.php заменен на seo_url_generator_translit.php
+ 
добавлена папка system/library/seo_url_generator/translit/, где теперь хранятся правила транлитерация для каждого языка в отдельных файлах
то есть, это позволит добавлять в будущем кастомные правила без изменений файлов модуля
    
--
-==!! ТОЛЬКО ДЛЯ РАЗРАБОТЧИКОВ !!==-
Добавлен метод, к которому можно обращаться из сторонних модулей для создания ЧПУ
Смотрите блок кода вокруг таких строк в файле system/storage/modification/admin/model/catalog/product.php:
  Для OpenCart 2.x : $data['keyword'] = $this->load->controller('extension/module/seo_url_generator/generateSeoUrl', $sug_data);
  Для OpenCart 3.x : $data['product_seo_url'][$store_id][$language_id] = $this->load->controller('extension/module/seo_url_generator/generateSeoUrl', $sug_data);
Пример, как обращаться с подготовленными данными смотрите в модификаторе, где описана модификация для файла admin/model/catalog/product.php

--
Добавлен свой класс логирования (/system/library/stdelog.php) и модуль покрыт логами

--
В модуль добавлена зависимость от класса StdE
Файлы:
  /system/library/stde.php
  /system/library/stde/...
Благодаря чему:

  // Вот такой блок кода:
  if (isset($this->request->post['module_seo_url_generator_field'])) {
    $data['module_seo_url_generator_field'] = $this->request->post['module_seo_url_generator_field'];
  } elseif ($this->config->get('module_seo_url_generator_field')) {
    $data['module_seo_url_generator_field'] = $this->config->get('module_seo_url_generator_field');
  } else {
    $data['module_seo_url_generator_field'] = false;
  }
      
  // Можно записать вот так:
  $data['module_seo_url_generator_field'] = $this->stde->field('module_seo_url_generator_field');
  
  // А если еще дописать небольшой хак, то вовсе вот так (как в модуле HTML, то есть без необходимости использовать код модуля):
  $data['field'] = $this->stde->field('field');

// Хак этоn имеет также бонус во вьюшке
// То, что было вот таким:
<input id="input_field" type="text" name="module_seo_url_generator_field" value="<?php echo isset($module_seo_url_generator_field) ? $module_seo_url_generator_field : ''; ?>" class="form-control" />

// Становится чуточку короче:
<input id="input_field" type="text" name="field" value="<?php echo isset($field) ? $field : ''; ?>" class="form-control" />

  
  
/* V 2.0.0 (НУМЕРАЦИЯ ПРОПУЩЕНА)
------------------------------------- */
--
Ветка 2.x в нумерации версии модуля пропущена из-за попытки синхронизации платную и бесплатную версии модуля.

Дело в том, что изначально платная версия модуля 1.x базировалась на бесплатной версии, которая к тому моменту была уже 2.x,
При этом они "жили" отдельными жизнями.

Теперь же в бесплатную версию были помещены многие наработки платной версии.
Соответственно, нумерацию ветки необходимо было привести к единообразию.
Называть бесплатную версию 2.0.0 после того, как уже существовала версия 2.3.1 не имело смысла.
Поэтому новая версия названа 3.0 для бесплатной и для платной версии.
  


/* V 1.1.8 (2019.05.03)
------------------------------------- */
  Обнаружено, что в сборке OpenCart PRO  улучшение из версии 1.1.7 конфликтует с модулем SeoPro.
  Ошибка исправлена.
  

/* V 1.1.7 (2019.03.18)
------------------------------------- */
  Обнаружены ситуации, когда пользователи вместо настройки "Окончание ЧПУ" для модуля SeoPro (можно вписать .html)
  вписывают это окончание в поле SEO URL прямо в товароах. К примеру some-value.html
  Тогда как при обработке ЧПУ модулем SeoPro в переменной $last_part окончаие .html специально удаляется

  В итоге мой модуль не мог найти старый ЧПУ в табилце редиректов.

  Добавлено нахождение старых ЧПУ в базе с окончанием .html



/* V 1.1.6 (2019.02.07)
------------------------------------- */
  Обнаружены и исправлены проблемы с редиректами со старых адресов на новые  в случаях, 
  когда SEO URL в админке написан с использование заглавных букв и при этом на сайте используется SeoPro
  



/* V 1.1.5 (2019.01.16)
------------------------------------- */
  Усовершенствованы редиректы со старых УРЛов на новые
  Раннее редирект шел только по конечной сущности. 
  Так, если у товара УРЛ оставался неизменным, а УРЛ  его родительской категории менялся, то редирект не происходил, была страница 404
  Теперь в таком случае происходит 301 редирект на страницу данной сущности с учтетом в УРЛ нового алиаса и родительской категории
  

/* V 1.1.4 (2018.11.19)
------------------------------------- */

  ---
  Исправлен файл install.php - при установке PRO-версии информация о модуле FREE удаляется теперь полностью, 
  чтобы предотвратить такую ошибку, когда при переходе с бесплатной версии на платную пропускается 
  шаг создания в базе данных таблицы для редиректов (используется при перезаписи старых ссылок)
  
  ---
  В версии 1.1.3 при исправлении транслита "проглотилось" замещение пробелов на - (тире)
  Ошибка исправлена
  


/* V 1.1.3 (2018.11.14)
------------------------------------- */
  ---
  Исправление транслита спецсимволов
  
    Примеры неправильных урлов, которые генерились раннее, если в названии товара присутствовали спецсимволы:
      ² : kabelnyj-nakonechnik-dlya-mnogozhilnogo-kabelya-do-25mm²-dlina-12mm
      ø : shnur-instrumentalnyj-tcom-shteker-63-mono-shteker-63-mono-gold-ø6mm-2m-chyornyj
      

/* V 1.1.2 (2018.07.31)
------------------------------------- */
  ---
  Изменения в модуле для более гладкой модификации под кастомные табы
  
  ---
  Добавлен дополнительные модификатор для Aridius New (Шаблоны Aridius Fractal, Aridius Royal и тд)
  Внимание!
  ID языка-исходника для транслитерации в модификаторе задано статично в связи с тем, что невозможно вмешаться в работу модуля новостей в контроллере
  
  ---
  Модификатор для NewsBlog отредактирован так, чтобы при его установке не нужно было бы править модель модуля SEO URL Generator PRO вручную
  

  



/* V 1.1.1 (2018.07.17)
------------------------------------- */
  ---
  Сделано улучшение в редиректах seo_url.php для случаев, когда не используется модуль SEO PRO
  Ранее при замене и ЧПУ товара, и ЧПУ его родительской категории, происходил неверный редирект.
  Теперь он идет правильно
  
  Но опять же, это не означает, что данный полностью заменят SEO PRO, к-ый занимается также устранением дублей
  


/* V 1.1.0 (2018.07.10)
------------------------------------- */
  
  ---
  Изменено техническое требование к IonCube Loader - теперь нужна версия 10.0 или выше
  
  ---
  Добавлена запись редиректа со старого на новый SEO URL при поодиночном редактировании в админке товара (категории, производителей, информации)
  Раннее это было только при массовой генерации с перезаписью в самом модуле
  
  ---
  Добавлена реализация редиректа в стандартный seo_url.php системы
  Ранее работало только в связке с seo_pro.php
  
    Однако, seo_url.php даже с данной модификацией не заменяет seo_pro.php
    Не рассчитывайте на редиректы
    с  : http://oc-store-23023.loc/index.php?route=product/product&product_id=41
    на : http://oc-store-23023.loc/kompyutery/mac/imac-tovar-14-41
    
    Редирект идет только в по SEO URL конкретной сущности, а не по полному УРЛу товара
    
    с  : http://oc-store-23023.loc/telefony-i-pda/old-seo-url
    на : http://oc-store-23023.loc/telefony-i-pda/new-seo-url
    
    Тогда как в SEO PRO
    
    с  : http://oc-store-23023.loc/index.php?route=product/product&product_id=41
    с  : http://oc-store-23023.loc/old-seo-url
    с  : http://oc-store-23023.loc/telefony-i-pda/old-seo-url
    
    на : http://oc-store-23023.loc/telefony-i-pda/new-seo-url
  
  ---
  Реализована установка PRO-версии поверх FREE (и поверх предыдущей версии)
    Обновление теперь является просто повторной установкой 
  
  ---
  Для разработчиков: в модели модуля добавлена возможноть задать кастомные сущности для генерации ЧПУ    
    getCustomTabs() в admin/model/extension/module/seo_url_generator.php (путь для системы 2.3.x)

  ---
  Для разработчиков Добавлена настройка "Включить логи" 
  


/* V 1.0.8 (2018.06.27)
------------------------------------- */
  ---
  В версии модуля для opencart 2.1 был неверно указан путь для модфикации seo_pro.php
  Данная ошибка исправлена


/* V 1.0.7 (2018.06.22)
------------------------------------- */
  ---
  Исправлена ошибка, возникающая при использовании php 7.0
  ---
  Исправлена ошибка с буквою "Ю" при транслитерации Кириллицы в Латинницу с русского языка
  
  
  

/* V 1.0.6
------------------------------------- */
  ---
  Была исправлена серьезная логическая ошибка при получении общего кол-ва товаров
  Обновление до этой версии обязательно (!!!)


  
  
/* V 1.0.5
------------------------------------- */
  ---
  В модификаторе модуля под 2.1-2.2 были неверно указаны пути для загрузки модуля и использованию методов модуля
  Исправлено
  
  ---
  Модуль не генерировал ЧПУ для товаров, у которых не было заполнено поле модель
  Раннее в версии 1.0.2 это условие запроса к базе было усложнено из-за того, что при генерации пустых товаров также происходила ошибка.
  Ее предотвращение теперь происходит другим способом.


  
  
/* V 1.0.4
------------------------------------- */

  Исправлено подключение несуществующего CSS-файла, которая вызывает ошибку в логах сервера

  File does not exist: /var/www/sites/businka.loc/admin/view/stylesheet/seo-url-generator.css, referer: http://businka.loc/admin/index.php?route=extension/module/seo_url_generator&token=DrJ97Rqz4dENdhIKU2eqAaPdFUtpUxKa

  
  

/* V 1.0.3
------------------------------------- */
  Была обнаружена ситуация, когда следующая конструкция вызывала ошибку ( PHP 7.2.4 ) :

    $string = $this->model_tool_translit->$setting['function']($string);

  Ошибка устранена заменой
    $function = $setting['function'];
    ...
    $string = $this->model_tool_translit->$function($string);





/* V 1.0.2
------------------------------------- */

  ---
  Добавлена новая переменная [product_id] в формулу генерации SEO URL товара 

  ---
  Добавлена система OpenCart.PRO

  ---
  Исправлен баг при работе на тестовом поддомене ( test.domain.com )

  ---
  В модели модуля добавлено условие, чтобы при генерации УРЛ-ов перебирались только существующией товары

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

    То есть, такие товары занимали ID-шки в таблице `oc_product`, но никаких данных не содержали.

    Теперь при запросе списка товаров берутся только такие, у которые прописана МОДЕЛЬ (!)

    Модель - является обязательным полем в OpenCart и при ее отстуствии можно предположить, что самого товара тоже нет.
    Однако, не исключено, что вместо модели некоторые магазины могут использовать АРТИКУЛ ( необязательное поле в OpenCart ),
    что может создавать необходимость правки модели.




/* V 1.0.1
------------------------------------- */
  Исправлена ошибка при сохранении товара

  Warning: Missing argument 2 for ModelExtensionModuleSeoUrlGenerator::translit() in .../admin/model/extension/module/seo_url_generator.php on line 369
  Notice: Undefined variable: setting in .../admin/model/extension/module/seo_url_generator.php on line 374


