sys

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

Рекомендуемые сообщения

sys    6

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
sys    6

Неужели, ни кому не актуально?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 099

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
sys    6

Спасибо! Хотя темы такие имеются, все же странно, что даже до 64 символов не доходит...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 099

странно, что перевод не совпадает с настройками в коде.

все остальное - мелочи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
rb2    407

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 099

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

в коде - макс 32

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
rb2    407

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

в коде - макс 32

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
sys    6

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
rb2    407

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

----

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу