Ограничиваем количество слов и добавляем точки

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

Вставляем функцию в удобное вам место:
        function _truncate($string, $length, $etc = '...')
        {
            if ($length > 0 && $length < strlen($string)) {
                $buffer = '';
                $buffer_length = 0;
                $parts = preg_split('/(<[^>]*>)/', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
                $self_closing_tag = split(',', 'area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed');
                $open = array();
                foreach ($parts as $i => $s) {
                    if (false === strpos($s, '<')) {
                        $s_length = strlen($s);
                        if ($buffer_length + $s_length < $length) {
                            $buffer .= $s;
                            $buffer_length += $s_length;
                        } else if ($buffer_length + $s_length == $length) {
                            if (!empty($etc)) {
                                $buffer .= ($s[$s_length - 1] == ' ') ? $etc : " $etc";
                            }
                            break;
                        } else {
                            $words = preg_split('/([^\s]*)/', $s, -1, PREG_SPLIT_DELIM_CAPTURE);
                            $space_end = false;
                            foreach ($words as $w) {
                                if ($w_length = strlen($w)) {
                                    if ($buffer_length + $w_length < $length) {
                                        $buffer .= $w;
                                        $buffer_length += $w_length;
                                        $space_end = (trim($w) == '');
                                    } else {
                                        if (!empty($etc)) {
                                            $more = $space_end ? $etc : " $etc";
                                            $buffer .= $more;
                                            $buffer_length += strlen($more);
                                        }
                                        break;
                                    }
                                }
                            }
                            break;
                        }
                    } else {
                        preg_match('/^<([\/]?\s?)([a-zA-Z0-9]+)\s?[^>]*>$/', $s, $m);
                        //$tagclose = isset($m[1]) && trim($m[1])=='/';
                        if (empty($m[1]) && isset($m[2]) && !in_array($m[2], $self_closing_tag)) {
                            array_push($open, $m[2]);
                        } else if (trim($m[1]) == '/') {
                            $tag = array_pop($open);
                            if ($tag != $m[2]) {
                                // uncomment to to check invalid html string.
                                // die('invalid close tag: '. $s);
                            }
                        }
                        $buffer .= $s;
                    }
                }
                // close tag openned.
                while (count($open) > 0) {
                    $tag = array_pop($open);
                    $buffer .= "</$tag>";
                }
                return $buffer;
            }
            return $string;
        }

И берем нужное нам описание или заголовок:
short($product, 40);

где $product будет ваш заголовок, а 40 количество допустимых символов при показе.

Добавить комментарий

Автору будет очень приятно узнать обратную связь о своей новости.

Комментариев 0