автомасла продажа оптомОптовым покупателям. Скачать прайс лист. Если Вы владелец автомагазина, Автосервиса или автопарка, у Вас есть возможность быстро и легко, с нашего склада, на специальных условиях и по отличным ценам, купить автомасла, автохимию, расходные материалы и аксессуары на любые автомобили.
Сообщений: 148 Зарегистрирован: 02 Июня 2009, 10:04:06 Сказали спасибо 12 раз Статус: offline
Опубликовано 17 Июля 2009, 20:01:10
Есть простая функция нарезки строки на определенное кол-во символов:
// Trim a line of text to a preferred length
function trimlink($text, $length) {
if (strlen($text) > $length) $text = substr($text, 0, ($length-3))."...";
return $text;
}
Но есть дело в том что текст идет вместе с html тегами <a>, <b>, <i>
Как избежать подсчета этих тегов, а только текста.
То есть сделать текст коротким но с эффектом форматирования.
$mass = array(); //массив для забивки кол-ва символов между парой тегов
$ch_last_text = array(); // массив для проверки
$sum=0; //кол-во символов
$mentka = ""; //метка на между каких тегов кол-во символов < $length - нужной длины
$substring = '.*?'; //рег выражение
$length = 30; // нужное кол-во символов
//функция подсчета кол-ва символов между тегами и добавление в массив
function my_callback_2($match){
global $mass, $length;
$lth = strlen($match[0]);
array_push($mass, $lth);
}
function my_callback_3($match){
global $mass, $ch_last_text, $length, $metka;
if (count($ch_last_text)==0){ // проверка если массив равен 0 то есть метка поставлена что найдена та часть между тегами где символов больше чем нужная нам длина
foreach ($mass as $key => $val){ //перебираем массив с нашими кол-вами символов
if (($key)==$metka) {//если наша метка совпадает с ключом в массиве тогда мы режем нашу часть текста и добавляем в массив на проверку
$text = substr($match[0], 0, ($length-3))."..."; //режем наш текст между тегами
array_push($ch_last_text, 1); //массив для проверки
}
}
} else {
$text = "";
//пошел следующий элемент и нам необходимо избавиться от остальной части просто присваиваем пустое значение
//тут стает "делема" что делать с тегами они ведь останутся??? хммм??
}
return $text;
}
foreach($mass as $key => $val){
$sum+=settype($val, "integer");//кол-во символов
if (strlen($val) > $length) $metka = $key; //ставим метку на то между какими тегами у нас сработало условие
}
if (strlen($sum) > $length) {//а вообще весь текст больше чем длина символов вдруг там пару символов
$result = preg_replace_callback("/((?:^|>)[^<]*)($substring)/si", "my_callback_3", $html);
}
echo $result;
Сообщений: 63 Зарегистрирован: 02 Августа 2007, 15:04:13 Сказали спасибо 5 раз Статус: offline
Опубликовано 18 Июля 2009, 19:21:29
Если разберешься, вещь полезная.
Хотя "убить" html код в тексте перед его обрезкой вполне достаточно. Не будет правда переноса строк, но это и не столь важно для какой-нибудь предварительной новости.