прикольные PHP библиотеки для ваших проектов

С выходом моей статьи про генерацию seo url на лету для OpenСart 1.5.x прошло много времяни. За это время обновился сам OpenCart.
И к моему сожалению в плане автогенерации seourl на основе названия продукта OpenCart не продвинулся. Ну чтож. Придется самим с этим бороться.
Относительно первой версии изменения не большие.
Покажу пример на основе файла admin\model\catalog\product.php.
Тут такой момент важный есть. Может кто не знает, но чтоб работало seo url, нужно включить эту функцию в разделе: Редактирование настроек магазина -> Сервер -> Включить SEO URL -> Да и переименовать файл htaccess.txt в .htaccess
И так. Находим функцию public function addProduct($data). Ищем код:
if (isset($data['keyword'])) {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
}
и меняем его на:
if (isset($data['keyword']) & !(empty(trim($data['keyword']))))
{
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
}
else
{
// соотношение русской буквы к английской
$str = array ("А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D","Е"=>"E","Ж"=>"J","З"=>"Z","И"=>"I","Й"=>"Y","К"=>"K","Л"=>"L",
"М"=>"M","Н"=>"N","О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T","У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
"Ш"=>"SH","Щ"=>"SCH","Ъ"=>"","Ы"=>"YI","Ь"=>"","Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b","в"=>"v","г"=>"g",
"д"=>"d","е"=>"e","ж"=>"j","з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l","м"=>"m","н"=>"n","о"=>"o","п"=>"p",
"р"=>"r","с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h","ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y","ы"=>"yi",
"ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya","."=>"-"," "=>"-","?"=>"-","/"=>"-","\\"=>"-","*"=>"-",":"=>"-","*"=>"-",
">"=>"-","|"=>"-","'"=>"",'"'=>"");
// получаем название продукта
$get_title = $this->db->escape($data['product_description'][1]['name']);
// преобразовываем из русского в английский
$my_seo_url = strtr($get_title ,$str);
// сохраняем в БД
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . strtolower($my_seo_url) . "'");
}
ЗЫ: для того, чтоб seourl генерировался автоматически при обновлении продукта, вам нужно будет внести эти же правки в функцию public function editProduct($product_id, $data)
Поясню теперь:
- Eсли поле SEO URL не пустое, то добавляем в БД то, что мы добавили ручками в этом поле.
- Если же поле SEO URL пустое, то генерируем ссылку опираясь на название продукта $data['product_description'][1]['name'], где 1 - это id языка. Конечно, если у вас несколько языков, то вам тут нужно указать тот id, на базе которого вам нужна генерация seo url. Или же, по дефолту в OpenCart идет по умолчанию english. И когда вы добавите русский язык и английский удалите, то тут нужно будет поставить id русского языка.
Предвидя возможный вопрос: А как мне сделать так, чтоб для каждого языка у меня был отдельный seo url?
Отвечаю: Об этом спрашивайте разрабов OpenCart или же нужно делать большие правки в коде. Муторное дело. Как-то я уже копался в этом деле, но по другому вопросу.
Да. OpenCart под seo не очень заточен. Хотя возможно есть готовые расширения. Не знаю. Я не делал мультиязычные магазины еще.
Ну вот в принципе и все. Ничего сложного. Кстати, для category.php тоже самое по аналогии с product.php.
И если вдруг вы решите обновить cms, то может быть вы затрете эти правки. Следовательно их нужно будет добавить еще раз.
PS: кажись для русской версии OpenCart (ocStore) эти правки подойдут. Пишите коменты если что. Разберемся.
Коментарии
добавить коментарий
Саша, крайний ocStore - не хочет работать твой метод, ни в какую... Я вчера писал, что мне удалось заставить работу при помощи плагина. Сегодня специально удалил плагин, дабы проверить твой метод. Первую часть кода изменил (до "ЗЫ: для того, чтоб seourl генерировался автоматически при обновлении продукта" - это не менял, т.к. не совсем понимаю, куда там нужно вставлять код), но первый вариант у меня не заработал точно. Т.е. при добавлении товара.
Никаких ошибок не выдаёт, просто ничего не происходит... Урл не меняется, ЧПУ не работает.
Если не затруднит, скинь плз на почту правленный файл, может быть я косячу где-то... Но вроде не первый год замужем )) Код скопипастить умеемс )
Артем, специально вот щас установил последний ocStore 2.1.0.2.1 и проверил. кстати, код не отличается от OpenCart. ошибок нет. прикрепил файлы. проверь.
Adminer, не знаю тогда в чём может быть причина... Сделал подмену файлов savepic.org/8280351.png - не хочет он в базу ничего писать.
Редактирование тоже не даёт результатов. При этом ошибок тоже никаких не выдаёт...
Возможно на моей стороне проблема.. в настройках сервера что-то.. Не знаю, но лично у меня не заводится.
Артем, а ты поле seourl пустым оставляешь? ID языка совпадает с тем, что в файле указан? что логи говорят? можешь мне кинуть доступ в админку? ради интереса, попробуй установить на локалке чистую cms и туда запихнуть измененные файлы. посмотри, будет ли поле seourl заполняться?
Артем, все блин. понял. попробуй эти файлы, что в архиве. я перезалил архив и поправил код в статье.
Спасибо Саше, разобрались в чём причина. Она таилась в моей версии PHP, так сказать, индивидуальный подход нужен был :)
Здравствуйте
Та же самая проблема
Fatal error: Can't use function return value in write context in /var/www/u0190612/data/www/kpg-horeca.ru/admin/model/catalog/category.php on line 50
Убираешь trim в строке:
if (isset($data['keyword']) & !(empty(trim($data['keyword'])))) {
все работает.
Алексей, ну да. тут сперва нужно убрать пробелы. а потом уже делать проверку:
согласно документации:
empty - проверяет если ПЕРЕМЕННАЯ пустая, а trim это функция
вот тут наверное и фигня в разных версиях php происходит
Спасибо огромное, все работает!
2.1.0.2.1
Добрый день. Подскажите как добавить в url еще и id товара?
ЧТО?ГДЕ?КОГДА?, ты че прикалываешься?
посмотри на запрос добавления. там есть (int)$product_id
На версии 2,2,0,0 не работает
капец, чуваки, вы меня конечно извините, но вы блин хотя бы понимаете что я сделал? понимаете логику? вот что не рабтает? какую ошибку пишет?
На 2.3.0.2 кто рискнет проверить?
Артём, я рискнул. работает 1000%
Ребят, ко всем вопрос: а вы вообще поняли по какому принципу работает этот метод? проверял на php 5.5, 5.6, 7.0
может у вас какие-то ошибки есть в логах?
и если что, то пишите письмо с прикрепленным файлом. я посмотрю у себя на локалке
Александр здравтсуйте! Установил на OcStore 2.1.0.2.1 автоматически ничего не заполняется все так же как и раньше. Можете помочь?
Сергей, а разницы нет никакой. только что просмотрел и проверил, чтоб уж на верняка. если что, то пишите письмо с прикрепленным файлом. я посмотрю у себя на локалке
Спасибо, все классно, вот только строка если попадется вида
"Привет как твои дела + еще что то";
То на выходе получаем: Privet-kak-tvoi-dela-+-esche-chto-to
Нужно сделать проверку а вернее обрезать все повторяющиеся символы
Ну и привести к нижнему регистру.
Евгений, рад, что разобрались. тут главное принцип понять, а потом под себя уже подгонять сколь угодно.
ocstore 2.1.0.1 магазин лег
http://prntscr.com/di8o29
Александр, а логи что говорят вам об этом? ребят, вы че?
Спасибо большое! А у меня всё почти с первого раза заработало! Просто забыла id языка отследить, но, как только исправила, все стало замечательно! УРА!
Елена, спасибо вам. А то я уже судя по коментам думал, что у меня особенные версии ОС =)
Елена, подкажите куда вставить id языка! Спасибо!
На моем OC 2.2.0.0 не сработало. Возможно из-за того, что мешает встроенный SEO-плагин в тему Ultimate Seo Package. Отключить его не могу, и толку от него никакого.
Все проверил: и ID языка, и версию php менял. Ноль! Вообще никакой реакции. В логах также ничего.
Александр, вам нужно выяснить куда попадает содержимое сео поля. в product.php или еще куда-то.
Обновил код в admin\model\catalog\product.php по примеру. У меня при обновлении продукта в поле SEO URL записывает в БД латинскую букву " r ". Что бы это значило? Почему не происходит автогенерация?
У SEO Module https://opencartseomodule.com/ больше всего СЕО фишек чем у любого другого модуля. всем советую
Андрей, по всей видимости у вас буква Г волшебная. код в студию.
Alex, это платное решение. а если это платно, то не по адресу. за деньши уже много решений. но вопрос в том, как сделать самому и сэкономить бабулесики.
Повторю суть комментария к статье https://zawebis.com/php-i-sql/cms/opencart/avtozapolnenie-pola-seo-url-v-opencart.html
Есть готовые решения — зачем делать то, что уже сделано. Вот прекрасный модуль автоматической генерации ЧПУ для OpenCart2. Бесплатный!
Забыл вписать ссылку на модуль автогенерации ЧПУ http://studio.web-jump.in.ua/download/opencart/seo-url-generator/
Серж Ткач, когда я давненько делал это решение, то бесплатного модуля не было тогда.
adminer, я не подумал об этом. Хотел просто поделиться :)
Серж Ткач, понятно. спасибо. может поможет тем, у кого "не получается" понять смысл манипуляций с кодом!
adminer, zawebis.com — это Ваш проект?
Я вчера впервые его увидел. Занятный сайт
Серж Ткач, эээээммм... странно. вы уже оставили несколько коментов. где и как вы постили коменты тогда тут?
adminer, вчера и оставил на обоих статьях :)
Серж Ткач, да, это мой проект. WP меня не устроил, как и большинство CMS. пришлось переписать на другой фреимворк. как результат: скорость, лекгость, скилл и чистота.