Разбить большую html таблицу на части

Hixon10
На сайте с 21.08.2010
Offline
125
10136

Добрый день. Есть таблица очень большая хтмл таблица. Главная задача - сделать из этой таблицы много страниц на вордпрессе, но, я думаю, что нет готового решения для моей задачи, поэтому поставлю другую минимальную задачу. Чем можно разбить большую хтмл таблицу на части?

Заранее всем спасибо за ответы.

P.S. Знаний в пхп не так много, чтобы сделать это самому, поэтому вариант написать самому отпадает.

Веду свой невзрачный блог (http://hixon.ru/).
M
На сайте с 27.10.2006
Offline
111
#1

Вы хотите разбить ее на определенной кол-во частей или части определенной (одинаковой) длины?

Бесплатное хранилище данных (http://bit.ly/gJYy9Z) (5GB) с синхронизацией. По ссылке — бонус 500MB.
Hixon10
На сайте с 21.08.2010
Offline
125
#2
Maxoud:
Вы хотите разбить ее на определенной кол-во частей или части определенной (одинаковой) длины?

Моя цель - это создать много страниц из одной таблицы. Я буду рад, если вы подскажите, как это сделать, хоть путем разбития таблицы на определенное кол-во частей, хоть на разбитие одинаковой длины.

P.S. К примеру, в первой таблице 17930 слов. Я попытался просто её опубликовать в одной странице, но вп отказывается публиковать такую длинную запись - у него же какой-то лимит на кол-во символов. У меня была идея посмотреть, как будут разбивать такие плагины, как nextpage_ru и mb_paging, но страница таких размеров даже не публикуется.

Ragnarok
На сайте с 25.06.2010
Offline
239
#3

зависит от таблицы

как дико частный случай, открываешь в блокнот++ и заменяешь все

</tr><tr>

на

</tr></table>

!!!!!НОВАЯ СТРАНИЦА!!!!!
<table><tr>

а дальше.. ну можешь запрос написать для вставки прямо в базу вп

//TODO: перестать откладывать на потом
Hixon10
На сайте с 21.08.2010
Offline
125
#4

Плагин mb_paging делит страницы, но почему-то иногда он делит правильно, а иногда не появляется текст, и css таблицы не работают. Ладно, теперь нужно копать в сторону публикации огромной таблицы.

M
На сайте с 27.10.2006
Offline
111
#5

<?php
$rows_per_table = 3; // количество строк в малых таблицах
$big_table = ""; // большая таблица (HTML source)

$big_table = preg_replace("@<table[^>]*>[\s]*<tr[^>]*>[\s]*@i", "", $big_table);
$big_table = preg_replace("@[\s]*</tr>[\s]*</table>@i", "", $big_table);

$rows = preg_split("@</tr>[^<]*<tr[^>]*>@i", $big_table);
$num_rows = count($rows);
$num_tabs = ceil($num_rows/$rows_per_table);
$new_tables = "";

for($i=0; $i<$num_tabs; $i++) {
$start = $num_tabs * $i;
$new_tables .= "<table>\n";

for($j=$start; $j<$start+$num_tabs; $j++) {
if($j >= $num_rows) break;
$new_tables .= "<tr>\n".trim($rows[$j])."\n</tr>\n";
}

$new_tables .= "</table><br />\n\n";
}
echo $new_tables;
?>

Надеюсь, что у вас в таблице нет <thead>, <tfoot>, <cols> и т.д. Иначе нужно добавлять regex-ы.

Hixon10
На сайте с 21.08.2010
Offline
125
#6
Maxoud:
<?php
$rows_per_table = 3; // количество строк в малых таблицах
$big_table = ""; // большая таблица (HTML source)

$big_table = preg_replace("@<table[^>]*>[\s]*<tr[^>]*>[\s]*@i", "", $big_table);
$big_table = preg_replace("@[\s]*</tr>[\s]*</table>@i", "", $big_table);

$rows = preg_split("@</tr>[^<]*<tr[^>]*>@i", $big_table);
$num_rows = count($rows);
$num_tabs = ceil($num_rows/$rows_per_table);
$new_tables = "";

for($i=0; $i<$num_tabs; $i++) {
$start = $num_tabs * $i;
$new_tables .= "<table>\n";

for($j=$start; $j<$start+$num_tabs; $j++) {
if($j >= $num_rows) break;
$new_tables .= "<tr>\n".trim($rows[$j])."\n</tr>\n";
}

$new_tables .= "</table><br />\n\n";
}
echo $new_tables;
?>

Надеюсь, что у вас в таблице нет <thead>, <tfoot>, <cols> и т.д. Иначе нужно добавлять regex-ы.

Огромное спасибо.

В $big_table = ""; // большая таблица (HTML source) исходник должен быть с <TABLE> и </TABLE> или вся таблица кроме этих тегов? А то я засунул таблицу $big_table = "<TABLE BORDER="1" cellspacing="0" cellpadding="0">..........</table>"; // большая таблица (HTML source), а денвер мне выдал ошибку Parse error: syntax error, unexpected T_LNUMBER in Z:\home\rb.ru\ on line 3

P.S. Убрал все доп. атрибуты у тегов, скрипт выполнился без ошибки, но ничего с таблицей не сделал.

M
На сайте с 27.10.2006
Offline
111
#7

Вы нарушили синтаксис. Есть три выхода. Выбирайте любой.

1. Использовать HEREDOC:

<?php

$big_table = <<<TAB
<TABLE BORDER="1" cellspacing="0" cellpadding="0">
</table>
TAB;
?>

2. Заменить кавычки вокруг HTML на одинарные (выдаст ошибку, если одинарные встретятся в HTML):

<?php

$big_table = '<TABLE BORDER="1" cellspacing="0" cellpadding="0">
</table>';
?>

3. Заэкранировать двойные кавычки в HTML:

<?php

$big_table = "<TABLE BORDER=\"1\" cellspacing=\"0\" cellpadding=\"0\">
</table>";
?>

Насчет <TABLE> — все равно. Если будет, то уберется.

Klopopryg
На сайте с 29.12.2004
Offline
344
#8

Прога XH v2.1a вам в помощь! :)

Лучше выстрелить, перезарядить и еще раз выстрелить, чем светить фонариком и спрашивать - "кто тут?"
Hixon10
На сайте с 21.08.2010
Offline
125
#9
Klopopryg:
Прога XH v2.1a вам в помощь! :)

Эта же программа делает из xml - html, это я сделал уже с помощью xHTML, но всё же спасибо. Теперь я думаю, как к плагину paging_mb приделать <table> и </table> в начале страницы и в конце соответственно.

M
На сайте с 27.10.2006
Offline
111
#10

Слово «Auto» в названии плагина наводит меня на мысль, что работу свою он делает только в момент вывода страницы, так что названия страниц у вас будут одинаковые. Я бы не стал им пользоваться.

Hixon10:
P.S. Убрал все доп. атрибуты у тегов, скрипт выполнился без ошибки, но ничего с таблицей не сделал.

Упс, не заметил вашего редактирования...

Скрипт не смотрит на атрибуты ячеек и сохраняет старые. Атрибуты таблицы и строк ему не мешают. Я посчитал, что у новых таблиц, скорее всего, будут новые атрибуты, поэтому в <table> и <tr> старые не сохраняются. Если они нужны — добавьте их в коде (строки №15 и №19).

Результат смотрите в HTML source. Визуально на отрисованной странице изменений может быть не видно.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий