Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Как снять ограничение по кол-ву знаков на "название статьи" ?!


sys

Recommended Posts

Внезапно столкнулся с такой проблемой!

На OCStore 0.2.2 (Opencart 1.4.9.5) при попытке в модуле "статьи" дать название статье, этой самой статье, мне пишет, что кол-во символов в строке должно быть от 3 до 64 знаков (хотя до 64 даже и не доходит!).

Как убрать данное ограничение или хотя-бы расширить его до 128 знаков кириллицей?

Надіслати
Поділитися на інших сайтах


1. для начала - поменять в БД (таблица - information_description):

title	varchar(64)
на

title	varchar(128)

2. затем, открыть файл

/admin/controller/catalog/information.php

3. найти

private function validateForm() {
  if (!$this->user->hasPermission('modify', 'catalog/information')) {
   $this->error['warning'] = $this->language->get('error_permission');
  }
  foreach ($this->request->post['information_description'] as $language_id => $value) {
   if ((strlen(utf8_decode($value['title'])) < 3) || (strlen(utf8_decode($value['title'])) > 32)) {
	$this->error['title'][$language_id] = $this->language->get('error_title');
   }

   if (strlen(utf8_decode($value['description'])) < 3) {
	$this->error['description'][$language_id] = $this->language->get('error_description');
   }
  }
  if (!$this->error) {
   return TRUE;
  } else {
   if (!isset($this->error['warning'])) {
	$this->error['warning'] = $this->language->get('error_required_data');
   }
   return FALSE;
  }
}

4. найти

if ((strlen(utf8_decode($value['title'])) < 3) || (strlen(utf8_decode($value['title'])) > 32)) {
$this->error['title'][$language_id] = $this->language->get('error_title');
}

5. заменить 32 на число из п.1

Надіслати
Поділитися на інших сайтах

Ничего странного. Конструкции вроде

strlen(utf8_decode($value['title']))
надо менять на

mb_strlen($value['title'], 'UTF-8')

И везде со строками использовать mbstring. В 1.5.1.3 для этого написан свой вариант mbstring.

В вашем случае лучше дописать в .htaccess

PHP_VALUE mbstring.internal_encoding UTF-8
PHP_VALUE default_charset UTF-8
PHP_VALUE mbstring.http_output UTF-8
PHP_VALUE mbstring.encoding_translation On
PHP_VALUE mbstring.detect_order UTF-8
PHP_VALUE mbstring.func_overload 2

и тогда код можно оставить неизменным.

Надіслати
Поділитися на інших сайтах


rb2, сейчас речь о принципиально разных цифрах:

в коде - макс 32

в переводе - макс 64

Нет. Это как раз мелочь, причём настолько мелкая, что даже обсуждать нет смысла. Либо перевод исправить, либо передавать кол-во в качестве параметра и сообщение динамически генерировать sprintf-ом.

Речь о том, что длина считается неправильно из-за принципиальной ошибки - применения ф-ций для работы с однобайтовыми строками для данных в UTF8. И предложенное решение по удлинению строки в БД вообще никак не устраняет источник проблемы, просто оттягивает проявление ошибок. Это как гангрену лечить приёмом обезболивающего.

Надіслати
Поділитися на інших сайтах


Надеюсь, новые OCsrore будут пропачтены ;)?

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

Надіслати
Поділитися на інших сайтах


Да как бы давно уже. by Yesvik.

----

Если сервер поймет указанные строки в .htacess - их и применяйте. Если сдохнет с ообщением об ошибке (типа 500 internal error) - комментируйте и разрешайте строки по одной в поисках, какая ему не по зубам. В случае проблем с func_overload - ну, тогда уже меняйте исходный код на использование mbstring.

А длину в базе - ставьте любую, которая нравится. И перевод корректируйте.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.