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

Splurov

Новичок
Логически верная разбивка текста на две колонки

Задача. Текст (с html-кодом) нужно разбить на две колонки. Текста в них должно быть примерно одинаково.
Проблема. Логически верно разбить текст, т.е. если середина текста является серединой предложения, то всё предложение должно остаться в одной колонке. Так же в тексте могут находится теги (<a href=...>, <p>, <br /> и другие) - это тоже надо учесть.

Пытался сделать примерно так:
PHP:
<html><body>
<?php
$text='<p>По&nbsp;тем или&nbsp;иным причинам, код счётчиков систем интернет-статистики зачастую приходится скрывать на&nbsp;странице. Оставим в&nbsp;стороне правомерность этого действия (читайте внимательно правила конкретного счётчика) и&nbsp;рассмотрим способы сокрытия.</p>
<p>Самый тривиальный способ, который я, должен признать, долгое время использовал, не&nbsp;ведая о&nbsp;его недостатках:</p>
<p><code>&lt;div <strong class="high">style=&quot;display:none&quot;</strong>&gt;<br />
&lt;!-- SuperLog --&gt;<br />
код счётчика<br />
&lt;!-- /SuperLog --&gt;<br />
&lt;/div&gt;</code></p>
<p>Всё очень просто&nbsp;&mdash; с&nbsp;помощью свойства <a href="http://www.w3.org/TR/CSS21/visuren.html#propdef-display">display</a> мы убираем из&nbsp;layout\'а страницы код счётчика, <em>при&nbsp;этом</em> Internet&nbsp;Explorer и&nbsp;Mozilla всё равно обрабатывают этот код и&nbsp;загружают спрятанную картинку-счётчик.</p>
<p>Как оказалось <a href="http://imfo.ru/archive/2004/01/29/display_none_invisible_counter">из&nbsp;небольшой, но&nbsp;ценной дисскусии</a>, Opera и&nbsp;Safari <em>не</em>&nbsp;загружают картинку-счётчик. Это плохо, т.&nbsp;к. в&nbsp;таком случае мы теряем некоторых посетителей.</p>
<p>В&nbsp;итоге родился такой вот CSS класс (несколько избыточный, но&nbsp;да будет так), который устраивает все современные браузеры:</p>
<p><code>div.stats{<br />
display:inline;<br />
height:0px;<br />
left:-1000px;<br />
margin:0px;<br />
padding:0px;<br />
position:absolute;<br />
top:-1000px;<br />
visibility:hidden;<br />
width:0px<br />
}</code></p>
<p>В&nbsp;HTML (желательно, сразу после <code>body</code>) пишем таким образом:</p>
<p><code>&lt;div <strong class="high">class=&quot;stats&quot;</strong>&gt;<br />
&lt;!-- SuperLog --&gt;<br />
код счётчика<br />
&lt;!-- /SuperLog --&gt;<br />
&lt;/div&gt;</code>';
$tLa=(strlen ($text))/2;
$tL= ceil($tLa);
$tL1= $tL;
$tL2= $tL-2;
$text1= substr ($text, 0, $tL1);
$text2= substr ($text, $tL2);
preg_match ('/^[^.?!>]*[.?!>]/',$text2,$match);
$text1.=$match[0];
$text2=substr($text2, strlen($match[0]));
echo $text1."\n\n\n\n".$text2;
?>
</body></html>
Логика не сохраняется... Каким образом можно обрезать/обрабатывать текст, чтобы сохранялась логика?
 

SiMM

Новичок
Splurov, по моему вы пытаетесь объять необъятное - для подобной задачи нужно знать ещё и ширину символов, при чём - именно на стороне клиента (мало ли - вдруг у него шрифты подмениваются?) - если, конечно, не выдавать ему всё графикой. Да и разрешение браузера клиента (ширина x высота) знать не помешает.
 

yaniks

новичок
как писал SiMM, осуществлять разбивку нужно на стороне клиента (браузера). Можно сделать при помощи JScript
 

Йороол-гуй

Guest
Размер шрифта и сам шрифт можно установить строго.
 

SiMM

Новичок
Автор оригинала: Йороол-гуй
Размер шрифта и сам шрифт можно установить строго.
Да ну? Ты проверял наличие и идентичность всех шрифтов на всех OS'ях и во всех браузерах? А в текстовых? ;)
 

Splurov

Новичок
Понимаете. Тут дело не в клиентах пользователей. А в задаче разбить текст на две примерно равные части, чтобы части содержали целые, неразорванные предложения, cсылки (<a href="http://example.com/">example.com</a>), картинки (<img src="examlpe.gif" alt="example" />) и подобное (blockquote, code...)...
 

rembo

Новичок
Splurov Это достаточно сложная задача, не говорю что невозможная - человек ведь делает это без особого труда, но алгоритмически это реализовать... Тут не только ссылки и сложные смысловые обороты, то и скажем кусочек исходного кода, картинка, табличка, перечислять можно бесконечно, всего не учесть.
И дело даже не в колонках (которые вообще говоря хтмл не предусматривает), такая же проблема возникает при разбивке на страницы.
Я это решаю может и примитивно, но достаточно эффективно. Либо вставляем руками спец строчку "разделитель" либо в форме добавления статьи (в CMS) позволяем пользователю добавлять страницы основного текста в разные текстарии.
 

Йороол-гуй

Guest
хм...

Весь текст можно разбить на массив explode() в качестве разделителей брать (.?!)

Потом подумать...
и использовать <table>.
 

rembo

Новичок
[alx99] Хм, интерсно... опера 7.5 держит ). Для вопрошающего помоему как-раз то что нужно.
[Йороол-гуй] ты предыдущие посты читал?
 

Splurov

Новичок
2rembo
Вариант отдать эту работу контент-менеджеру был, но всё-таки хочется попробывать все варианты... :)
2alx99
Большое спасибо :) Буду разбираться... Вроде бы не совсем то... Хотелось бы всё-таки на сервере... Но всё равно спасибо.
 
Сверху