Jump to content
Sign in to follow this  
Klaus

[Решено?..] Обрезка описания товара, с сохранением целостности слов

Recommended Posts

Описание товара перед выводом в карточку товара на странице категории обрезается вот этим кодом

utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 90) . '..'



однако при этом обрезаются слова (описание может обрываться на полуслове), что не очень красиво и правильно.
Хотелось бы сделать так чтобы слова не обрезались, т.е. обрезка текста происходила по пробелу. (можно вообще не буквы считать, а пробелы, и по, скажем 5му, пробелу обрезать текст)

Наверняка можно  красиво это решить.
 

Share this post


Link to post
Share on other sites

Можно, но проще это решить через short_description (при вменяемом количестве товаров)

Share this post


Link to post
Share on other sites

Можно, но проще это решить через short_description (при вменяемом количестве товаров)

То есть делать отдельное описание для вывода на странице категорий? Ил что имеется в виду?

 

Не понял к чему это

Share this post


Link to post
Share on other sites

Я подобное уже находил в инете, но мне не совсем понятно, как это применить. Функция utf8_substr уже создана в OC, поидее её бы подправить. Но  вот не могу понять, где эта функция лежит.

Share this post


Link to post
Share on other sites

Я подобное уже находил в инете, но мне не совсем понятно, как это применить. Функция utf8_substr уже создана в OC, поидее её бы подправить. Но  вот не могу понять, где эта функция лежит.

У Вас какая версия движка?

Share this post


Link to post
Share on other sites

У Вас какая версия движка?

 

1.5.6.4

Share this post


Link to post
Share on other sites

Функция utf8_substr уже создана в OC, поидее её бы подправить. Но  вот не могу понять, где эта функция лежит.

А откуда вы её в первое сообщение скопировали?

 

Тут она:

/catalog/controller/product/category.php

Share this post


Link to post
Share on other sites

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

взять хотябы пример, на который дал ссылку sv2109  выше - там сколько строк, чтобы функцию описать? а у нас всё в одной строке

Edited by afwollis

Share this post


Link to post
Share on other sites

Нет, это вся функция и есть.

 

Можно ещё вот так сделать.

Share this post


Link to post
Share on other sites
Klaus, в utf8-helper`e.

Share this post


Link to post
Share on other sites

Задача решена исправлением (а точнее заменой) функции 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 терминов.

В итоге получаем сокращение с сохранением целостности слов. Многоточие вставляется только при длине текста большей чем лимит символов (то есть если сокращения не произошло, то многоточие не вставляется).

Не забываем убрать лишнее многоточие в контроллере, там где применена данная функция (в моём случае в контроллере категорий)

Тему можно закрыть

Share this post


Link to post
Share on other sites

Какие сложности :)

$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') . ' ...';

Первой строкой обрезали, чтобы было "не более чем", второй - убрали возможные обрезки справа до первого пробела.

Share this post


Link to post
Share on other sites

Вышла лажа. Из за правки файла system/helper/utf8.php перестал работать загрузчик файлов.

Вот такой глюк. причём такая картина во всех папках. Вернул на родину функцию utf8_substr - загрузчик фоток заработал в штатном режиме. Т.е. они как-то связанны получается.

post-20654-0-66438400-1453548153_thumb.jpg

Share this post


Link to post
Share on other sites

Можно считать что решено.
Я оставил функцию utf8_substr без изменения.
А ту функцию о которой я писал выше я переименовал в myutf8_substr. Т.е. в файле system/helper/utf8.php сразу после функции utf8_substr я добавил другую функцию

    function myutf8_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;
    	}
    }

Затем в контроллере категорий, там где для описания применяется функция utf8_substr, я просто вместо utf8_substr написал myutf8_substr и удалил многоточие

В принципе меня такое решение устраивает. Теперь если мне нужно будет где-то ещё подработать функцию utf8_substr, я просто в контроллере заменю её на myutf8_substr

Блин по 10 раз одно и тоже написал :oops:

Всех благодарю. Тему можно закрывать как решённую!

Edited by Klaus
  • +1 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.