Задача решена исправлением (а точнее заменой) функции utf8_substr Сама функция находится в system/helper/utf8.php примерно 17строка (спасибо OC Team - подсказал где искать) Находим функцию:
function utf8_substr($string, $offset, $length = null) {
return mb_substr($string, $offset, utf8_strlen($string));
} else {
return mb_substr($string, $offset, $length);
}
}
и заменяем её полностью на:
function utf8_substr($string, $offset, $length = null, $etc = '...',
$break_words = false, $middle = false) {
if ($length === null)
return '';
if (strlen($string) > $length) {
$length -= strlen($etc);
if (!$break_words && !$middle) {
$string = preg_replace('/\s+?(\S+)?$/', '', mb_substr($string, 0, $length+1));
}
if(!$middle) {
return mb_substr($string, 0, $length).$etc;
} else {
return mb_substr($string, 0, $length/2) . $etc . mb_substr($string, -$length/2);
}
} else {
return $string;
}
}
Функцию я сам не разрабатывал (я не программист и в php ничего не смыслю). Взял готовый вариант в интернете на php форуме и немного подправил его с учётом используемых в OC терминов. В итоге получаем сокращение с сохранением целостности слов. Многоточие вставляется только при длине текста большей чем лимит символов (то есть если сокращения не произошло, то многоточие не вставляется). Не забываем убрать лишнее многоточие в контроллере, там где применена данная функция (в моём случае в контроллере категорий) Тему можно закрыть