Jump to content
100napb

Эмодзи VS Opencart. Кодировки в Mysql и правки mysqli.php

Recommended Posts

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

Spoiler

image.png.ee696010495c7ef2a3b4b69389ad1a4e.png

 

Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение:

  1. Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию.
  2. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает.
  3. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php,  $this->connection->set_charset("utf8mb4");
  4. Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат.

 

Может кому пригодиться.

Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать?

Edited by 100napb
  • +1 5

Share this post


Link to post
Share on other sites

не удержался, обновил кодировки в таблице oc_order_history. Теперь отправляю красивые письма клиентам ))

Вот так в истории заказов:

Spoiler

image.png.8c4805f53c32c3878b2a4d74b9b94d40.png

А вот так у получателя:

Spoiler

IMG_2385.thumb.JPG.5885e8528885eb39f2f4e0f3e90a208f.JPG

 

Edited by 100napb

Share this post


Link to post
Share on other sites
В 21.08.2018 в 16:25, 100napb сказал:
  Показать контент

image.png.ee696010495c7ef2a3b4b69389ad1a4e.png

 

Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение:

  1. Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию.
  2. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает. 
  3. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php,  $this->connection->set_charset("utf8mb4");
  4. Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат.

 

А у меня парадокс получился ))

На первом сайте (дефолтный шаблон стоит)  Второй и третий пункт сделал как у вас. И все ок)

А на втором (другой шаблон) пошли крякозяблики. Проторчал пол дня, что я только не менял. В итоге вернул резервные файлы. И начал по порядку. Так вот на пункте 2 закончил и все работает.

Спасибо Вам за решение со смайликами))

Share this post


Link to post
Share on other sites

Супер! То, что доктор прописал8-)

 

Emoji нельзя использовать при вставке через модификатор. Если у кого способ решения?

Edited by krluch

Share this post


Link to post
Share on other sites
В 18.07.2019 в 14:50, krluch сказал:

Супер! То, что доктор прописал

Нихрена не супер :blink:

 

сайт перестал работать, пришлось бекап восстанавливать. Проблема была в кодировке

@100napb вы не сталкивались с такой проблемой? Может есть рецепт как запустить сайт с emoji?

Share this post


Link to post
Share on other sites
34 minutes ago, krluch said:

сайт перестал работать, пришлось бекап восстанавливать. Проблема была в кодировке

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

 

43 minutes ago, krluch said:

Может есть рецепт как запустить сайт с emoji?

что Вы имеете ввиду?

у меня, например, есть проект, на котором эмодзи могут содержаться в отзывах клиентов, описаниях продуктов\статьях и в комментариях к заказам (отправяляются на почту клиентам). Исправно работает больше года по рецепту, которым делился выше.

 

Если нужна помощь, а не совет, то пишите в ЛС.

Share this post


Link to post
Share on other sites

На ocStore лучше сразу для всех таблиц

ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

 

Share this post


Link to post
Share on other sites
В 21.08.2018 в 16:25, 100napb сказал:

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

  Показать контент

image.png.ee696010495c7ef2a3b4b69389ad1a4e.png

 

Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение:

  1. Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию.
  2. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает.
  3. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php,  $this->connection->set_charset("utf8mb4");
  4. Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат.

 

Может кому пригодиться.

Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать?

Тоже актуально.

Share this post


Link to post
Share on other sites
Guest smartcoder
В 21.08.2018 в 16:25, 100napb сказал:

Ну и вопрос для сведущих: можно было как-то проще\грамотнее это сделать?

Сделали такой модуль, для редактора summernote без изменений в базе.

 

 

Share this post


Link to post
Share on other sites
19 minutes ago, smartcoder said:

Сделали такой модуль, для редактора summernote без изменений в базе.

звучит здорово.

 

Из любопытства и для большего понимания (думаю, не мне одному может быть интересно): получается, вы научили редактор саммернот в админке сохранять что-то вроде bb-кодов для эмодзи, а сами эмотиконы выводятся на страничках сайта не как текст\шрифт, а как картинки? оригинальненько.

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

Spoiler

image.thumb.png.9e6a0af3db263b736ab9430c4f984f85.png

 

image.thumb.png.6a966c84debc057a857409429f9d8bd6.png

 

Share this post


Link to post
Share on other sites
Guest smartcoder
16 минут назад, 100napb сказал:

вы научили редактор саммернот в админке сохранять что-то вроде bb-кодов для эмодзи, а сами эмотиконы выводятся на страничках сайта не как текст\шрифт, а как картинки? оригинальненько.

Да, выводятся как картинки. Поэтому никаких изменений с бд делать не нужно для этого модуля.

Share this post


Link to post
Share on other sites
В 26.07.2019 в 17:19, krluch сказал:

На ocStore лучше сразу для всех таблиц

ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

 

Всем привет.

Эти запрос к БД как-то могут убить контент, который уже есть в БД? Может конфликт какой возникнет или еще что-то? Сыкотно немного)

Share this post


Link to post
Share on other sites
1 час назад, storer сказал:

Эти запрос к БД как-то могут убить контент

У меня не навредило, но если сомневаешься - сделай бекап

Share this post


Link to post
Share on other sites
В 21.08.2018 в 16:25, 100napb сказал:

Так вот, задался вопросом, как сохранить и не исказить все эти дорогие эмоции. Потому что ОпернКарт с ними не дружит. Для себя нашел следующие решение:

  1. Прежде всего, текст со смайлами или без них хранится в БД. Для этого данные должны быть в хипстерской кодировке utf8mb4. И сама БД ее должна поддерживать. Не у всех стоят последние версии Mysql, где все это работает не просто из коробки, а по умолчанию.
  2. Что бы перевести таблицу на кодировку с эмодзи выполним ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; где table_name заменяем на нужные таблицы. Можно и всю базу так заальтерить, но я чет очканул. Мне хватило таблиц oc_review и oc_comment (привет Markimax). Обновлять версию мускуля не обязательно. Если только он настолько старый, что о такой кодировке даже не знает.
  3. В настройках коннекта к БД опенкарта так же сменим кодировку: файл /system/library/db/mysqli.php,  $this->connection->set_charset("utf8mb4");
  4. Вроде бы все... ах да, возможно, нужно менять параметры кодировки в файлах mpdo.php и mysql.php. Я менял. Может быть придется еще рестартануть службы. Под спойлером результат.

все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? 

Share this post


Link to post
Share on other sites
4 hours ago, maksym41193 said:

все сделал так же, в админке все сохраняется http://joxi.ru/krDgwVeTJ9q8YA но вот какая беда, спустя какое-то время (1+ дней) вместо них появляется " ? " не подскажите почему так происходит? 

каких-то естественных причин для этого нет. Возможно у Вас работает\работал какой-то экспорт-импорт, интеграция с внешними системами или что-то перегоняет данные с искажением кодировки. Может быть откатывались из бэкапа или хостер что-то начудил... сложно сказать наверняка. Для начала проверьте а) по-прежнему ли стоит нужная кодировка для выбранных полей в БД ? б) есть ли какие-нибудь механизмы, которые заливают данные на сайт?

Share this post


Link to post
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.

Guest
You are posting as a guest. If you have an account, please sign in.
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.


  • Similar Content

    • By svmax
      Наш стек: (OPENCART 1.5), Memcached, MуSQL. Интернет-магазин интегрирован с 1С и облачной CRM, платежной системой.
      часть внутреннего функционала написано JavaScript фреймворке Vue.js 
      Требования к кандидату:
      - Знание php mysql html css javascrip
      - Знание архитектуры MVC
      - Опыт работы с опенкарт ocStore Версия 1.5.5.1.2
      - Умение работать с системой контроля версий Git (github.com)
      Оплата 500р в час. 
      Задачи составляются в подробное ТЗ, выполнение контролируется тимлидом. 
      Работа не разовая, задачи на доработки появляются регулярно.
      примерная загрузка 50-100 часов в месяц.
      Обязанности:
      Развитие интернет-магазина,
      Интеграции с внешними сервисами,
      Правка или доработка шаблона,
      Работы по ускорению магазина,
      Написание нового функционала и расширение функций движка.
      Дописывания новой бизнес логики.

      - Текущие задачи требующие выполнения.
      * Доработать внутренний скрипт управления товарами (php).
      * Исправить ошибки php кода из журнала логирования ошибок
      * Перевести движок сайта с php 5.6 => php 7.3
      * Настроить кеширование запросов к базе данных на тяжелых страницах
      * Поработать со скоростью загрузки страниц сайта.
       
      При откликах желательно прикреплять портфолио и описание о себе.
    • By asan2014
      Всем привет! 
      Подскажите пожалуйста что за ошибка и как от нее избавиться? Я так понимаю это нагрузка на бд . Сайт уходит в тайм-аут после загрузки прайс листов через модуль АОП
       
       
       
      Warning: mysqli::set_charset(): Error executing query in /home/users/9/9788483067/domains/xn----8sbg7aoeiv6i.xn--p1ai/system/library/db/mysqli.php on line 13
      Fatal error: Uncaught Exception: Error: User '9788483067' has exceeded the 'max_queries_per_hour' resource (current value: 1)<br />Error No: 1226<br />SELECT `data` FROM `oc_session` WHERE session_id = '2461112c8e00e2fb99b5a1fd7b' AND expire > 1610624612 in /home/users/9/9788483067/domains/xn----8sbg7aoeiv6i.xn--p1ai/system/library/db/mysqli.php:40 Stack trace: #0 /home/users/9/9788483067/domains/xn----8sbg7aoeiv6i.xn--p1ai/system/library/db.php(45): DB\MySQLi->query('SELECT `data` F...') #1 /home/users/9/9788483067/domains/xn----8sbg7aoeiv6i.xn--p1ai/system/library/session/db.php(21): DB->query('SELECT `data` F...') #2 /home/users/9/9788483067/domains/xn----8sbg7aoeiv6i.xn--p1ai/system/library/session.php(72): Session\DB->read('2461112c8e00e2f...') #3 /home/users/9/9788483067/domains/xn----8sbg7aoeiv6i.xn--p1ai/system/framework.php(106): Session->start('2461112c8e00e2f...') #4 /home/users/9/9788483067/domains/xn----8sbg7aoeiv6i.xn--p1ai/system/startup.php(104): require_once('/home/users/9/9...') #5 /home/users/9/97884830 in /home/users/9/9788483067/domains/xn----8sbg7aoeiv6i.xn--p1ai/system/library/db/mysqli.php on line 40

      Fatal error: Uncaught Exception: Error: User '9788483067' has exceeded the 'max_queries_per_hour' resource (current value: 1)<br />Error No: 1226<br />REPLACE INTO `oc_session` SET session_id = '2461112c8e00e2fb99b5a1fd7b', `data` = '[]', expire = '2021-01-14 12:07:32' in /home/users/9/9788483067/domains/xn----8sbg7aoeiv6i.xn--p1ai/system/library/db/mysqli.php:40 Stack trace: #0 /home/users/9/9788483067/domains/xn----8sbg7aoeiv6i.xn--p1ai/system/library/db.php(45): DB\MySQLi->query('REPLACE INTO `o...') #1 /home/users/9/9788483067/domains/xn----8sbg7aoeiv6i.xn--p1ai/system/library/session/db.php(32): DB->query('REPLACE INTO `o...') #2 /home/users/9/9788483067/domains/xn----8sbg7aoeiv6i.xn--p1ai/system/library/session.php(81): Session\DB->write('2461112c8e00e2f...', Array) #3 [internal function]: Session->close() #4 {main} thrown in /home/users/9/9788483067/domains/xn----8sbg7aoeiv6i.xn--p1ai/system/library/db/mysqli.php on line 40
    • By valerykurak
      Здравствуйте, для пользователей созданы произвольные поля, в бд именуются как custom_field. Проблема в том, что sql запрос выводит массив из всех значений кастомных полей, которые есть и плюс непонятными символами. Может кто сталкивался и можете подсказать как вывести не символами, а нормально?

    • By valerykurak
      Здравствуйте. Есть обычная контактная форма в ней несколько select'ов. Образование, страна, регион. Поля образований хранятся прямо в самой форме. Можно ли сделать страна регион как в админ панели опенкарт к примеру при добавления адреса покупателя?
    • By asd1992
      Здравствуйте, в каталоге товаров здесь https://test.miturbo.ru/category/xiaomi-redmi-note-8
      Нужно вывести код товара. Как мне это сделать? В БД есть таблица oc_product
      и в этой таблице есть значение model в этом значении есть код товара у каждого товара.

      Мне нужно вывести код товара этот. но просто вот так: <span>{{ model }}</span> не получается.
      А в product.twig <span>{{ model }}</span> вот так получается.

      За вывод этой страницы https://test.miturbo.ru/category/xiaomi-redmi-note-8 отвечает файл category_grid.twig . Если в этот файл добавить <span>{{ model }}</span> то нечего не получится, а если в product.twig то получится. {{ model }} означает код товара. Как мне сделать так чтобы в category_grid.twig тоже получалось к каждому товару выводить свой код товара.

      Это мне из БД как то вытаскивать или нет? Если уже выводить из БД то нужно сделать так чтобы к каждому товару свой код товара подходящий выводился, а не у всех товаров был одинаковый код товара.

      Буду очень благодарен.
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.