Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: разбить контент на страницы
 
 автор: sl1p   (22.11.2011 в 18:49)   письмо автору
 
 

Есть блок, к примеру 250x150

и есть длинный или не очень) контент.

Необходимо разбить его какимто образом на страницы, но так чтобы он не вылазил за блок, лучше если в блоке будет немного пустого места.

Толкните ктото на идею пожалуйста.

  Ответить  
 
 автор: cheops   (22.11.2011 в 18:51)   письмо автору
 
   для: sl1p   (22.11.2011 в 18:49)
 

Задача должна быть решена обязательно средствами JavaScript?

  Ответить  
 
 автор: sl1p   (22.11.2011 в 20:00)   письмо автору
 
   для: cheops   (22.11.2011 в 18:51)
 

ну вообще нет, на сторону сервера тоже можно положить.

В контенте впринципе не должно быть более элементов кроме текста. Но хотелось бы сделать универсально - мало ли.

Вопрос именно в том, как именно расчитать, где обрезать.

  Ответить  
 
 автор: sl1p   (23.11.2011 в 13:14)   письмо автору
 
   для: sl1p   (22.11.2011 в 20:00)
 

вопрос очень актуален :)

  Ответить  
 
 автор: Владимир55   (23.11.2011 в 14:02)   письмо автору
 
   для: sl1p   (23.11.2011 в 13:14)
 

Я такую "крошилку" сделал на РНР - целые тома режет на короткие текстовые файлы.
Подсчитал, сколько помещается знаков с конкретным размерам шрифта в имеющейся площади, и режу по предложениям (точка, вопросительный или восклицательный знак).
А для больших площадей по абзацам.

  Ответить  
 
 автор: sl1p   (23.11.2011 в 14:44)   письмо автору
 
   для: Владимир55   (23.11.2011 в 14:02)
 

не вариант. Текст может быть со всевозможными стилями (отступы к примеру) так что здесь только JS... и то пока не уверен что это можно сделать вообще

  Ответить  
 
 автор: DJ Paltus   (23.11.2011 в 15:55)   письмо автору
 
   для: sl1p   (23.11.2011 в 14:44)
 

Есть у меня нечто подобное - делит длинный текст на страницы для прокрутки в jCarouselLite.
Я туда и стихи совал, и "Алису в стране чудес", со всем справляется. Ширину строки и количество срок в блоке - на глазок прикидывал, они постоянные.
<?
    $text 
file_get_contents("alice.txt");  // весь текст
    
$strings wordwrap(strip_tags($text"<a><p><b><u><i>"), 85); //чистим лишние теги и бьем строку по слову, макс. ширина - 85 символов, разделитель - символ переноса
    
$strings explode("\n"$strings); // превращаем строку в массив строк, используя символ переноса
    
$lists array_chunk($strings36); // делаем массив массивов по 36 строк.

Ну и дальше элементы массива $lists рассовываем по страничкам, объединив элементы его элементов в строки.

  Ответить  
 
 автор: sl1p   (23.11.2011 в 16:21)   письмо автору
 
   для: DJ Paltus   (23.11.2011 в 15:55)
 

...
Спс за попытку конечно, но это вообще не в ту сторону. Читайте выше, нужен учет стилей (отступов, размер шрифта и т.д.)

  Ответить  
 
 автор: DJ Paltus   (23.11.2011 в 16:46)   письмо автору
 
   для: sl1p   (23.11.2011 в 16:21)
 

Это вообще в ТУ сторону.
Вам сколько раз в год размер шрифта учитывать надо? Один раз прикинули, сколько влазит - и действуйте. Или в этом тексте могут быть шрифты разного размера? Тогда да, придется считать размер надписи попиксельно (например, средствами imagettfbbox, что бесчеловечно).
И какие такие отступы? Если между строками понаставлено пустых строк, то в моем варианте они учтутся. Если абзацы с красной строки начинаются, то это тоже можно учесть, немного покрутившись, либо успокоиться и сделать text-indent:0.

  Ответить  
 
 автор: sl1p   (23.11.2011 в 19:10)   письмо автору
 
   для: DJ Paltus   (23.11.2011 в 16:46)
 

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

  Ответить  
 
 автор: АЯС   (23.11.2011 в 20:13)   письмо автору
 
   для: sl1p   (23.11.2011 в 19:10)
 

Хм... дурацкая задачка...

Так как ПОЛНОЕ содержимое блока - это не просто текст, а именно HTML-код со всякими-разными стилями, то "разбить" его на части - задача весьма нетривиальная.

Ну вот попробуйте ВРУЧНУЮ разбить на две приблизительно равные части следующий HTML-код:
просто1 просто2 просто3 просто4
<b>жирно1 жирно2 жирно3 жирно4
<i style="color: red">жирныйКурсив1 жирныйКурсив2 [место разрыва] жирныйКурсив3 жирныйКурсив4</i>
жирно5 жирно6 жирно7 жирно8</b>
просто5 просто6 просто7 просто8

Ну и как это у вас получится?
Правильно, вам надо будет ВРУЧНУЮ добавить ещё несколько тегов - открывающих и закрывающих <B> и <I>.
Иначе изменится HTML-структура содержимого.
ПЕРВАЯ ЧАСТЬ (добавленные теги выделены жирно):
просто1 просто2 просто3 просто4
<b>жирно1 жирно2 жирно3 жирно4
<i style="color: red">жирныйКурсив1 жирныйКурсив2</i></b>
-------------------
ВТОРАЯ ЧАСТЬ (добавленные теги выделены жирно):
<b><i style="color: red">жирныйКурсив3 жирныйКурсив4</i>
жирно5 жирно6 жирно7 жирно8</b>
просто5 просто6 просто7 просто8


Для MSIE решение есть. Но и оно - кривоватое.
А вот для прочих браузеров - это надо "долго-долго мучаться", мей би "что-нибудь получится".
------

Кратко о решении в MSIE:
1. Создается ифрейм, коему присваивается designMode='On', в него помещается innerHTML всего содержания блока.
2. Ширина ифрейма (и внутренние горизонтальные паддинги) - одинаковы с блоком. Высота ифрейма - гарантированно большая (чтобы не появлялась прокрутка и не уменьшалась рабочая область документа внутри ифрейма по ширине).
3. Определяется реальная высота содержимого в ифрейме. Делится на заданную высоту блока и таковым образом получается количество "страниц" (здесь надо учитывать вертикальные паддинги блока).
4. Начинается циклический процесс выделения и удаления "лишнего" текста для каждой "страницы" в ифрейме (командами execCommand). innerHTML "оставшегося" текста каждой "страницы" запоминается в переменных.
5. В блок помещается innerHTML первой страницы и формируются ссылки для показа второй и последующих.

"Кривость" этого способа заключается в том, что для удаления части текста из ифрейма необходимо эту часть текста выделить, а всякое выделение возможно только на видимом участке страницы. Сиречь невидимым (style="visibility: hidden") ифрейм сделать нельзя. И, соответственно, все эти программные манипуляции с ифреймом пользователь однозначно УВИДИТ.
Остаётся надеяться, что комп у пользователя быстрый, а полное содержимое блока не очень велико:-))

  Ответить  
 
 автор: ONYX   (25.11.2011 в 03:45)   письмо автору
 
   для: sl1p   (23.11.2011 в 19:10)
 

А почему бы не воспользоватсья обычным скроллингом для блока со строго заданным размером?

  Ответить  
 
 автор: sl1p   (26.11.2011 в 04:56)   письмо автору
 
   для: ONYX   (25.11.2011 в 03:45)
 

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

  Ответить  
 
 автор: DJ Paltus   (25.11.2011 в 02:30)   письмо автору
 
   для: sl1p   (22.11.2011 в 18:49)
 

Интересная, все же, задача. В общем виде не могу решить - нужны допущения. Хотя бы, любой заголовочный тег принудительно отправлять на новую страницу. Кушать не могу, зацепило.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования