Войти

Показать полную графическую версию : Как сделать вывод на печать на чужом форуме.


Igor_I
28-09-2007, 21:06
На одном форуме нет возможности вывести топик в печатном виде. Вот как есть 10 сообщенй на странице, так и смотри. А очень хотелось бы вывести многостраничные топики на одной странице и, скажем, поискать что-нибудь.
Есть какие-нибудь идеи на этот счет? PHP, Javascript (?).

mar
28-09-2007, 21:40
не очень поняла - у тебя доступ к кодам форума, или ты хочешь для себя с внешней стороны приделать такую возможность?

в принципе
1) выясняем, по какому принципу составляется url по страницам
2) научаемся его генерировать по url первой страницы
3) научится парсить страницу, выгребая из нее нужную информацию
3) пишем скрипт (на своем сервере), получающий все затребованные страницы по первой (от первой гененрируем дальнейшие url, пока приходят нормальные ответы)
4) паросим результат, сливая значимую информацию вместе и, наверное, вставляя в родное обрамление

Интерфейс к этому - форма, куда можно занести url первой страницы---> потом склеенный результат

Если надо отвечать из своей псевдостраницы, то надо возиться с получением своей сессии-кук и т.д.

В общем, не уверена, что игра стоит свеч :)

Igor_I
28-09-2007, 22:14
для себя с внешней стороны приделать такую возможность

Игра свеч стоит, вот только отвечать не надо, надо только читать.

mar
28-09-2007, 22:39
ну, если отвечать не надо, то что-то типа того, что я по пунктам изобразила. С учетом *nix на машине вопрошающего - можно все оформить, как страничку на своем локальном апаче.
А можно выпендрится и еще и вход туда сделать из какой-нибудь кнопочки на панели firefox-а

Igor_I
28-09-2007, 22:54
не-а :) я так и останусь виндузятником :)
К сожалению тюнер нельзя (хотя и не пробовал) завести под никсы.
А про кнопочку думаю, только в опере :) Причем без кнопочки это не солидно. Сейчас копаю operafan, может найду чего.

Igor_I
20-10-2007, 00:02
Кое-как чего-то настряпал.
mar, самое сложное парсить страницу. Надо найти одну циферку показывающей общее количество страниц. Потому как более-менее отрабатываются ~ 15-20 страниц, поболее - сервер ничего не отвечает, больше 40 Windows выпадает в BSOD.
Потом убрать из всех страниц (кроме первой) head.
Запихнуть свой css -файл (чем?)
Убрать мелкие картинки, чем лучше - вырезать с помощью php, или спрятать с помощью css.




Паралельно с помощью css удаляю лишние элементы со страницы.
Возник вопрос. Предположим некоторый элемент удаляем со страницы с помощью: span[class="gensmall"],
*[width="88"][height="31"]{
display:none !important;
}
Можно ли аналогично сделать для этого элемента функцию скрытый текст.
Как здесь - http://forum.oszone.net/thread-86772-7.html#post640859

Наверно понять что же я хочу трудно, но может кто поймет :)

Arrest
20-10-2007, 01:36
Igor_I
Не совсем понимаю, но скрытый текст делается так:
Javascript-часть:
<script language="Javascript">
function toggle(element){
if(document.getElementById(element).style.display == "none"){
document.getElementById(element).style.display = "inline";
document.getElementById(element + "toggle").style.display = "none";
}
if(document.getElementById(element).style.display != "none"){
document.getElementById(element).style.display = "none";
document.getElementById(element + "toggle").style.display = "inline";
}
return false;
}</script>
Сам html-код:
<span class="gen" id="hide1" onClick="toggle(hide1);">Какой-то текст</span><span id="hide1toggle" onClick="toggle(hide1);">смотреть...</span>
Писал на ходу, общая идея ясна, за ошибки не отвечаю =)

Igor_I
22-10-2007, 01:07
Arrest, как думаешь, можно ли использую UserJS в Опере, превратить обычный текст в скрытый?

Igor_I
28-11-2007, 22:55
Ну что же, будем позорится :)


$url = $_GET['url'];
$spages = $_GET['spages'];
$numpages = $_GET['numpages'];
$count = $_GET['count'];
$contents = '';

function getpage($urlp){

global $page;

$fp = fopen($urlp, "r"); // открыть файл

while (! feof($fp)) {
$page .= fread($fp,1000000); // прочитать файл
}
fclose($fp);

unset ($urlp);
return $page;
}

function editpage ($page,$new) {

unset ($contentsone);
global $contentsone;
global $count;

$page2 = explode ('head>', $page); // вырезать head
$page3 = explode ('class="catHead"', $page2[2]); // удалить верх страницы с рекламой

$page4 = explode ('<!-- [begin]', $page3[1]);



$contentsone = $page4[0];

$search = array ( "viewtopic.php?",
"valign=\"top\" nowrap=\"nowrap\"",
"valign=\"middle\" nowrap=\"nowrap\"");

$replace = array ("http://www.autolada.ru/viewtopic.php?",
"style=display:none",
"style=display:none");

$contentsone = str_replace($search, $replace, $contentsone);

if ($new='1') {
$r=explode ('<span class="nav">Страница',$page3[1]); // найти место ссылок на страницы
$r2=explode ('</span>',$r[1]);

$d=strip_tags ($r2[0]); // удалить тэги

preg_match_all ("/[0-9]{1,3}/",$d,$matches);
preg_match_all ("/^(title) + (\/title)/",$page2[1],$title);

$count = $matches[0][1];
}

unset ($page2);
unset ($page3);
unset ($page4);

return $contentsone;
return $count;
return $title;
}

function viewpage ($viewpage) {

unset ($view);

$prepage = '<table class="forumline" width="100%" cellspacing="1" cellpadding="3" border="0">
<tr align="right">
<td class="catHead"';

$endpage = '</table>';

$view = $prepage.$viewpage.$endpage;

echo $view;

unset ($view);
unset ($viewpage);

}

$head ='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//RU">
<html dir="ltr">
<head>
<title>AUTOLADA.RU :'.$title.':</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Style-Type" content="text/css">
<META name="home_url" content="http://www.autolada.ru/index.php">
<link rel="stylesheet" type="text/css" href="http://www.autolada.ru/templates/subSilver/subSilver.css">
<body bgcolor="#E3E7ED" text="#000000" link="#006699" vlink="#5493B4" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<a name="top"></a>
</TR>
</TABLE>
<style type="text/css">
td[valign="middle"][nowrap="nowrap"]{
display:none !important;
}
</style>
';


if (!$numpages) {

getpage($url);
editpage ($page,1);


if ($count > 15){

echo '<div align="center">Сколько страниц вы хотите получить? Максимум 15 страниц.
<form name="" action="" method="get">
<input name="url" type="hidden" value="'.$url.'">
<input name="count" type="hidden" value="'.$count.'">
Показать
<select size="1" name="numpages">';
for ($i = 1; $i <= 15; $i ++) {
echo '<option value="'.$i.'">'.$i.'</option>';
}

echo '</select> страниц, начиная с
<select size="1" name="spages">';

for ($i = 1; $i < $count; $i ++) {
echo '<option value="'.$i.'">'.$i.'</option>';
}

echo '</select>

<br>
<input type="submit" value="Получить">
</form></div>';
}

else {

echo $head;
echo "<br><hr> 1 страница из ".$count;
echo " .. urlprint= <a href=".$url.">".$url."</a>";

viewpage ($contentsone);

unset ($page);

for ($q = 1; $q < $count; $q ++) {

echo "<br><hr> ".($q + 1)." страница из ".$count;

$urlprintw = $url.'&start='.$q*15;

echo " .. urlprint= <a href=".$urlprintw.">".$urlprintw."</a>";

getpage($urlprintw);
unset ($urlprintw);

editpage ($page,0);
unset ($page);

viewpage ($contentsone);
unset ($contentsone);
}
}
}

if ($numpages) {

echo $head;

for ($q = 0; $q < ($numpages); $q ++) {

$urlprintw = $url.'&start='.($spages + $q - 1) * 15;

echo "<br><hr> ".($spages + $q)." страница <a href=".$urlprintw.">(".($spages + $q).")</a> из ".$count." .. urlprint= <a href=".$urlprintw.">".$urlprintw."</a>";

getpage($urlprintw);
unset ($urlprintw);

editpage ($page,0);
unset ($page);

viewpage ($contentsone);
unset ($contentsone);
}
}


Выглядит это примерно так = http://img205.imagevenue.com/loc374/th_79915_forum_122_374lo.jpg (http://img205.imagevenue.com/img.php?image=79915_forum_122_374lo.jpg)

Жду критики :)

hasherfrog
11-01-2008, 15:07
Можно всё сделать (если уже не сделано?) с помощью javascript. Конкретнее, пишем букмарклет, который использует XHTTPRequest-ы для получения всех недостающих страниц. Если форум не шифруется*, то всё достаточно просто.

__
* Некоторые сайты не позволяют себя запрашивать слишком часто или шифруют контент javascript'ом.




© OSzone.net 2001-2012