Это решение также убирает "черные ромбики" и иероглифы в конце русских описаний товаров в каталоге. В других местах делается аналогично.
Вероятно, вас тоже удивляет, почему описания товаров, которые выводятся при просмотре каталога магазина, так бездарно и коротко обрезаются. Ведь даже в стандартном дизайне OpenCart v1.5 там могло бы поместиться ещё 2-3 таких же строки с весьма полезной информацией как для покупателя, так и для поисковых систем. Впрочем, и для внешнего вида стандартного шаблона польза немалая.
В основном, конечно, выигрывает посетитель сайта: уменьшается необходимость открывать каждый товар, а у владельцев магазина появляется возможность вынести в начало описания самую важную информацию и дать покупателю удобный способ просмотра основных характеристик похожих товаров уже на этапе ознакомления с ассортиментом, при навигации.
Вот как выглядит страница каталога с описаниями товаров до и после предлагаемой модификации:
<
p>Чтобы увеличить длину описаний товаров на страницах каталога, необходимо:
- Открыть файл catalog/controller/product/category.php
- найти поиском строку "substr" (она там одна, OpenCart v1.5.0.5 — 1.5.1.1). Вы увидите небольшой блок из десятка строчек, который начинается с $this->data['products'][] = array(. Перед этой строчкой вставляем 6 строк, приведённых ниже, сразу после этого списка;
- Найденную строку 'description' => ... заменяем на 'description' => $descr_plaintext,
В результате должно получиться:
$cut_descr_symbols = 400;
$descr_plaintext = strip_tags(html_entity_decode($result['description'],
ENT_QUOTES, 'UTF-8'));
if( mb_strlen($descr_plaintext, 'UTF-8') > $cut_descr_symbols )
{
$descr_plaintext = mb_substr($descr_plaintext, 0,
$cut_descr_symbols, 'UTF-8') . ' …';
}
$this->data['products'][] = array(
'product_id' => $result['product_id'],
'thumb' => $image,
'name' => $result['name'],
'description' => $descr_plaintext,
'price' => $price,
'special' => $special,
'tax' => $tax,
'rating' => $result['rating'],
'reviews' => sprintf($this->language->get('text_reviews'),
(int)$result['reviews']),
'href' => $this->url->link('product/product', 'path='
. $this->request->get['path']
. '&product_id=' . $result['product_id'])
);
Длина описания регулируется переменной $cut_descr_symbols. В зависимости от дизайна вам может потребоваться изменить эту величину.
Что исправлено:
- До модификации строки укорачивались до 100 символов. Описания длиной 300-500 символов выглядят гораздо лучше;
- символы ".." добавлялись даже к полностью поместившимся описаниям: сейчас символ заменён на HTML-ное троеточие и добавляется только к обрезанным описаниям;
- ну и mbstring, разумеется. Про которую англоязычные авторы часто забывают.
Аналогичным образом стоит сразу же изменить файлы:
- catalog/controller/product/search.php
- catalog/controller/product/special.php
- catalog/controller/product/compare.php
- catalog/controller/product/manufacturer.php
То есть найти похожие места (например, по строке "substr") и внести аналогичные изменения.
То же самое для VQmod / Opencart 1.5.1.3.1
<
dl>
stalker780:
Мож кому пригодится vqmod для 1.5.1.3.1 http://shop.clicker.com.ua/download/vqmod_product_long_description_1.0_oc_1.5.1.3.1.zip (локальная копия файла)
Как сделать, чтобы слова не обрезались посередине
А как сделать чтобы слова не обрезались, а последнее слово дописывалось полностью?
Можно строку внутри { ... } заменить на две:
$descr_plaintext = mb_substr($descr_plaintext, 0, $cut_descr_symbols, 'UTF-8');
$descr_plaintext = mb_substr($descr_plaintext, 0, mb_strripos($descr_plaintext, ' ', 0, 'UTF-8'), 'UTF-8') . ' …';
Не отображаются кириллические (русские) буквы в "Производители"
В версиях 1.5.х до 1.5.1.2 надо в файле catalog/controller/product/manufacturer.php найти строку
$key = '0 - 9';
и её окрестности (должно быть примерно в районе 35-40 строк). И изменить там 2 строки, чтобы результат был такой:
foreach ($results as $result) {
if (is_int(mb_substr($result['name'], 0, 1, 'UTF-8'))) {
$key = '0 - 9';
} else {
$key = mb_substr(mb_strtoupper($result['name'], 'UTF-8'), 0, 1, 'UTF-8');
}
Типичные проблемы, которые решаются этими правками
[...] когда я делаю длинные описания товара (превью описания в разделе) то в конце иногда появляются непонятные символы-иероглифы. [...]
Как можно исправить проблему с ромбиками/иероглифами/вопросиками проще, не меняя многие файлы?
Попробуйте в файл .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 6
Они закомментированы (символ "#" в начале строки). Раскомментируйте их все (в идеале). Если возникнет ошибка - закомментируйте и пробуйте включать по одной строке. Ту, на которой возникает ошибка, оставьте закомментированной. Возможно, это поможет решить проблему проще и быстрее.
Просто не у всех хостеров это работает. Либо спросите в техподдержке, как этот код в .htaccess правильно указать и возможно ли это. У некоторых вместо php_value применяется php_admin_value, у кого-то запрещено совсем. А у кого-то это делается через php.ini или может через панель управления.