Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Помогите доработать скрипт
Покинул форум
Сообщений всего: 9
Дата рег-ции: Март 2017
Помог: 0 раз(а)
Здравствуйте, всех с Новым Годом! Вот снова решил к вам обратиться за помощью)) У меня есть код - постраничного вывода текста. Он довольно популярный на просторах сети, я его просто чуть - чуть доработал под себя. Он нормально работает, но есть одна проблема - он разрывает теги. Т.е. при делении текста на равные куски, происходит разрыв парных тегов и всё форматирование летит в тартарары. Вопрос: Можно ли сделать функцию wordwrap более умной, чтобы она при попадании между парными тегами, ставила разделитель после закрывающего тега? Может есть готовые решения или какие мысли? А то я себе уже весь мозг сломал)))
Я помню, что когда-то видел какую-то относительно не сложную проверку на разрыв парных тегов и переноса разделителя, но к сожалению не могу найти теперь тот сайт.
Спасибо)) Но это не совсем то. Эта функция также режет абзацы и прочие двойные теги типа span или а. Мне нужно, чтобы функция определяла, что если элемент под номером 7000 находиться между тегами <> и </>, то надо сначала дойти до символа за закрывающим тегом, а потом ставить разделитель. Эта же функция делает абсолютно такой же массив, как и у меня.
Nechtus
Отправлено: 07 Января, 2018 - 20:18:12
Новичок
Покинул форум
Сообщений всего: 9
Дата рег-ции: Март 2017
Помог: 0 раз(а)
После двух дней мозгового штурма, я наконец нашёл решение))
Как я и думал оно оказалось очень миниатюрное и изящное))
Я написал свой wordwrap.
preg_match_all('#<([a-z]+)[^/>]*(?:/>|>(?:.+</\1>))#Uis',$str,$array);// Разбивает текст на куски от тега, до тега. И каждый кусок сохраняется в массив отдельным элементом. Так же создаётся массив с DOM. Регулярное выражение нашёл на просторах инета. Поэтому и не спрашивайте о нём.
$count=count($array[0]);//Подсчёт элементов подмассива [0]
unset($array[1]);// Удаление подмассива [1] ( сюда выносится DOM, но например мне она не нужна)
$lennewtext=strlen($newText);//длина итогового текста
$ostatok=$lenstr-$lennewtext;// определяем сколько осталось символов до конца основного текста
if($lentext>=$maxLength)//условие: Длина собираемого текста должна быть больше или равна допустимому кол-ву символов
{
$newText.=$text.$char;// Итоговый текст + разделитель, по которому будет резаться текст и создаваться пагинация
$lentext=0;
$text='';
}
if($ostatok<$maxLength)//условие: остаток меньше допустимого количества символов
{
$newText.=$text;//дописываем последний кусок к уже готовому тексту, но только без последнего разделителя, т.к. он лишний.
$lentext=0;
$text='';
}
}
}
return$newText;//возвращаем готовый текст
}
Ну и остаётся только подключить функцию к пагинации(см.выше) и вуаля. Про разрыв абзацев или обрыве на полуслове или полутеге можно забыть))
Специально расписал подробно, чтобы было понятно. А то на очень многих форумах и сайтах вечно швырнут кучу кода, а ты сиди пол-дня и разбирайся откуда ноги растут))
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.