Изменяем длину описаний товаров в каталоге OpenCart 1.5.x

Это решение также убирает "черные ромбики" и иероглифы в конце русских описаний товаров в каталоге. В других местах делается аналогично.

Вероятно, вас тоже удивляет, почему описания товаров, которые выводятся при просмотре каталога магазина, так бездарно и коротко обрезаются. Ведь даже в стандартном дизайне OpenCart v1.5 там могло бы поместиться ещё 2-3 таких же строки с весьма полезной информацией как для покупателя, так и для поисковых систем. Впрочем, и для внешнего вида стандартного шаблона польза немалая.

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

Вот как выглядит страница каталога с описаниями товаров до и после предлагаемой модификации:

<

p>Чтобы увеличить длину описаний товаров на страницах каталога, необходимо:

  1. Открыть файл catalog/controller/product/category.php
  2. найти поиском строку "substr" (она там одна, OpenCart v1.5.0.5 — 1.5.1.1). Вы увидите небольшой блок из десятка строчек, который начинается с $this->data['products'][] = array(. Перед этой строчкой вставляем 6 строк, приведённых ниже, сразу после этого списка;
  3. Найденную строку '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') . '&nbsp;&hellip;';
}
$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') . '&nbsp;&hellip;';

Не отображаются кириллические (русские) буквы в "Производители"

В версиях 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 или может через панель управления.