раздление текста на страницы (php) @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 20 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
moveman
новый человек
3
Сообщения: 14
Зарегистрирован: 21.05.06
Заголовок сообщения: раздление текста на страницы (php)
Сообщение Добавлено: 20 Октябрь 2006, 08:18:18 
Нужно, чтобы php автоматически делил большой текст(записанный в одном файле) на страницы без разрыва слов...Есть идея разделить текст на блоки <p></p>, и переносить эти блоки при увеличении значения height(обрамляющего блока в котором текст находится).
Кто нибудь сталкивался с подобной необходимостью? Подскажите пжлста варианты.
karamba Муж.
старожил
209
Сообщения: 6498
Зарегистрирован: 17.08.05
Откуда: Киев. А шо?
Сообщение Добавлено: 20 Октябрь 2006, 09:54:12 
пхп не сможет узнать значение height — оно известно только на клиентской стороне. Если контент выводится пхп в шаблоны из базы — считать знаки и генерить страницы с листалкой. Если просто хтмл в ручном режиме, то и разбивать вручную и листалку менять вручную.
О считании знаков с пробелами здесь уже было, воспользуйтесь поиском.

_________________
клетчатый!
moveman
новый человек
3
Сообщения: 14
Зарегистрирован: 21.05.06
Сообщение Добавлено: 20 Октябрь 2006, 12:23:43 
Да действительно height не может знать php … тогда попробую по количеству строк....Знаки с пробелами не подходят, т.к. обрывают смысл текста - это тоже не подходит...
неужели никто не сталкивался? :confused: …. здесь есть топик про организации текста по параграфам и главам...но в моём случае идёт речь просто о больших статьях, которые надо мобильно добавлять, не запариваясь о том, что текст при отображении уйдёт в бесконечность вниз...
1NV1Z0R
соучастник
12
Сообщения: 971
Зарегистрирован: 27.09.05
Сообщение Добавлено: 20 Октябрь 2006, 14:30:20 
Карамба нагло лжет! :laugh:

http://php.net/imagettfbbox

План действий (только для статики):

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

Усложним задачу: IMG теги, отступы между строками и параграфами, заголовки, таблицы и получаем парсер HTML На php

Итого - 10 тонн ненужного кода.

Simplify!


Последний раз редактировалось 1NV1Z0R 20 Октябрь 2006, 14:35:04, всего редактировалось 1 раз.
1NV1Z0R
соучастник
12
Сообщения: 971
Зарегистрирован: 27.09.05
Сообщение Добавлено: 20 Октябрь 2006, 14:34:10 
Есть вариант без пхп:

Загружаем весь контент в ДИВ1.

ДИВ1 пихаем в ДИВ2

Ставим ДИВУ2:

height: 1000px; /*или сколько там*/
overflow: hidden;

получаем первую страницу.

Затем

<a href="#" onclick="document.getElementById('ДИВ1').style.marginTop='-1000px'; return false">стр 2</a>

<a href="#" onclick="document.getElementById('ДИВ1').style.marginTop='-2000px'; return false">стр 3</a>



Проблемы:

на стыке страниц может быть полстроки по высоте, полкартинки, ползаголовка.


Поэтому, делайте все по другому
1NV1Z0R
соучастник
12
Сообщения: 971
Зарегистрирован: 27.09.05
Сообщение Добавлено: 20 Октябрь 2006, 14:43:25 
И тут еще вариант придумал (быстрее код накидать чем объяснить -- добавляем поэлементово).

Опять JS:

var div = document.createElement('DIV');
div.id ='мойдив';
var anotherDiv = document.createElement('DIV');
div.innerHTML = "МОЯ СТАТЬЯ ЦЕЛИКОМ";

var pages = [];
var page = 0;

var children= document.childNodes;

for (var i = 0; i < children.length; i++) {

var child = children[i];

if (child.parentNode.id != 'мой див') continue;//вложенно


anotherDiv.append(child);
if (anotherDiv.scrollHeight > 1000) {
--i;
anotherDiv.removeNode(child); //не помню синтаксис
pages[page++] = anotherDiv.innerHTML;
anotherDiv.innerHTML = 0;
}


}

for (var i = 0; i < pages.length; i++) {

Блабла <a href="#" onclick = "document.getElementById('content').innerHTML = pages[i];"> i </a> // ну вы поняли

}



Проблемы: медленно



И все таки, откажитесь от этой затеи :)
karamba Муж.
старожил
209
Сообщения: 6498
Зарегистрирован: 17.08.05
Откуда: Киев. А шо?
Сообщение Добавлено: 20 Октябрь 2006, 20:36:46 

1NV1Z0R писал(а):
Карамба нагло лжет! :laugh:


не лжет, а предусмотрительно умалчивает об извратах (напр. с imagettfbbox :)
:beer:

_________________
клетчатый!
moveman
новый человек
3
Сообщения: 14
Зарегистрирован: 21.05.06
Сообщение Добавлено: 21 Октябрь 2006, 10:48:40 
Спасиба за решения "как этого не стоит делать" … :laugh: будем думать...
karamba Муж.
старожил
209
Сообщения: 6498
Зарегистрирован: 17.08.05
Откуда: Киев. А шо?
Сообщение Добавлено: 21 Октябрь 2006, 11:05:46 
moveman, надумаете — поделитесь? )

_________________
клетчатый!
1NV1Z0R
соучастник
12
Сообщения: 971
Зарегистрирован: 27.09.05
Сообщение Добавлено: 21 Октябрь 2006, 14:01:13 
других вариантов нет и не будет.
moveman
новый человек
3
Сообщения: 14
Зарегистрирован: 21.05.06
Сообщение Добавлено: 22 Октябрь 2006, 09:20:59 
А как такой вариант: текст разделен на <p></p>…
есть определенный лимит строк... php их считает, и если лимит преодолён, то обрывает текст после очередного </p> на текущей или следующих строках, а остальное перебрасывает на следующую страницу.
Вот жду программиста, чтоб попробовать...как на ваш взгляд - сработает?
Лампочка Жен.
Модератор
135
Сообщения: 4165
Зарегистрирован: 17.05.06
Откуда: трехкомнатная страна
Сообщение Добавлено: 22 Октябрь 2006, 12:38:30 
moveman, по-моему, ваш последний вариант - то, что нужно.
1NV1Z0R
соучастник
12
Сообщения: 971
Зарегистрирован: 27.09.05
Сообщение Добавлено: 22 Октябрь 2006, 15:07:15 
только если моноширинный шрифт, отсутствие картинок, таблиц и прочего.
Developer® Муж.
новый человек
4
Сообщения: 57
Зарегистрирован: 09.09.06
Откуда: Украина, Киев
Сообщение Добавлено: 22 Октябрь 2006, 17:29:27 
Первоначальная задача решабельна: "Ajax" на "onload" и "onresize"
1NV1Z0R
соучастник
12
Сообщения: 971
Зарегистрирован: 27.09.05
Сообщение Добавлено: 22 Октябрь 2006, 18:14:49 
Не жгите так жестоко, товарищ.
Тягать контент каждый раз? Ресайзнул и раз, 1-3 сек оно выползает вниз, а потом загрузился контент и нет? что за ребячество
karamba Муж.
старожил
209
Сообщения: 6498
Зарегистрирован: 17.08.05
Откуда: Киев. А шо?
Сообщение Добавлено: 22 Октябрь 2006, 20:06:20 

1NV1Z0R писал(а):
только если моноширинный шрифт, отсутствие картинок, таблиц и прочего.


…и только ИЕ.
moveman, пхп не знает количества строк. Сначала пхп, потом клиент. А вы хотите задом на перед.

_________________
клетчатый!
Developer® Муж.
новый человек
4
Сообщения: 57
Зарегистрирован: 09.09.06
Откуда: Украина, Киев
Сообщение Добавлено: 22 Октябрь 2006, 22:05:16 

Цитата:
Не жгите так жестоко, товарищ.
Тягать контент каждый раз? Ресайзнул и раз, 1-3 сек оно выползает вниз, а потом загрузился контент и нет? что за ребячество


Уважаемый. Это решение? Решение. Работающее? Работающее. Плюсы и минусы практического применения здесь не обсуждаются, человеку "нужен вариант" -- он его получил
moveman
новый человек
3
Сообщения: 14
Зарегистрирован: 21.05.06
Сообщение Добавлено: 23 Октябрь 2006, 07:02:23 

karamba писал(а):

1NV1Z0R писал(а):
только если моноширинный шрифт, отсутствие картинок, таблиц и прочего.


…и только ИЕ.
moveman, пхп не знает количества строк. Сначала пхп, потом клиент. А вы хотите задом на перед.


Как не знает количество строк? …
Вообще предполагается, что будет фиксированный размер по краям, фиксированный шрифт, таблиц не будет …. а картинки можно ж в абзацы вставлять.…
попозже выложу результат, если кого-то интересует...
karamba Муж.
старожил
209
Сообщения: 6498
Зарегистрирован: 17.08.05
Откуда: Киев. А шо?
Сообщение Добавлено: 23 Октябрь 2006, 09:43:01 

moveman писал(а):
Как не знает количество строк? …


ладно, может знать, гипотетически. Только в случае <p style="white-space: nowrap;"> с принудительными обрывами строк в нужных редактору местах или &nbsp; между словами. Но вы же не станете так делать, правда?..

moveman писал(а):
Вообще предполагается, что будет фиксированный размер по краям, фиксированный шрифт, таблиц не будет …. а картинки можно ж в абзацы вставлять.…


Что значит «фиксированный размер по краям»?
Фиксированный шрифт есть только в ИЕ (и то для не знакомых с возможностью настроек оного) или это картинки.

moveman писал(а):
попозже выложу результат, если кого-то интересует...


ага, любопытно будет испытать новые ощущения.

Странный топик: юзеру связывают руки для того, чтобы юзеру было удобно схавать контент. Шрифт фиксированный, размеры… Вы задачу обрисуйте ширее, может она того не стоит или решается изящнее?

_________________
клетчатый!
WayBe Муж.
соучастник
38
Сообщения: 781
Зарегистрирован: 16.09.06
Откуда: www.kaniv.net
Сообщение Добавлено: 23 Октябрь 2006, 17:57:49 
Проблема из пальца высосана.
Игра в бисер.
Не усложняйте жизнь людям.

_________________
Мышка - музыкальний инструмент
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 20 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100