Правильное использование DOM

Статус
В этой теме нельзя размещать новые ответы.

phillip

Полезный
Регистрация
4 Сен 2007
Сообщения
411
Реакции
15
У меня есть моя страничка. Я хочу к ней инклюдить страницу с чужого сайта. Так чтобы получилось сверху моя страница, затем допустим полоска <hr> и ниже- страница чужая. Но в итоге у меня чужая страница подгружается, и все css этой чужой страницы применяются к моей странице. В итоге получается полная каша. На моей странице постоянно пляшет шрифт, появляются куски кода, чужая шапка в неположенном месте совершенно. Подскажите как сделать правильно. Делаю так:

Код:
МОЙ ПХП И ХТМ КОД, ЗАТЕМ
<hr/>
<?php
$doc = new DOMDocument();
$doc->loadHTMLFile("http://ixbt.com");
echo $doc->saveHTML();
?>
Для просмотра ссылки Войди или Зарегистрируйся в данном случае- урл чужой страницы. Но он у меня постоянно разный
 
на мой взгляд у вас два варианта
1. тупо использовать фрейм или iframe
2. загрузить целевую страницу разобрать ее на части (css,js,body) а потом слепить каждую часть с своей и тока после этого вывалить обе страницы в броузер. Сложно будет сделать чтобы css сайта не мешал вашим. Но можно. Для этого вам прйдется описать абсолютно все css стили всего что есть в вашей части (т.е. не писать <p>..</p> а полюбому насильно <p id="zzz_039493434" class="abc_32323"> </p>) и чтобы имена стилей не пересекались со второй страницей.
 
второй вариант мне не очень нравится) А как сделать с использованием фреймов? Я фреймами ни разу ничего не делал
 
iframe имеет следующий формат:

Код:
<IFRAME SRC="document.htm" WIDTH=XXX HEIGHT=XXX NAME="XXX" SCROLLING="yes/no/auto" [NORESIZE]>
</IFRAME>

между тэгами <IFRAME> и </IFRAME> можно вставить HTML код, который будет обрабатываться браузерами, не знающими тэга IFRAME.
 
Для этого есть очень хорошая библиотека "PHP Simple HTML DOM Parser" для работы с DOM документа на PHP, можно ей пропарсить входящий документ и вставить в вашу страницу, которая тоже загружена в этот объект. Примеры модификации страниц на сайте есть. Сайт _http://simplehtmldom.sourceforge.net/

Возможности:
1. Написан на PHP5+ и позволяет легко управлять HTML
2. Поддерживает не валидный HTML
3. Поиск тагов в HTML с селекторами в jQuery стиле
4. Может разложить все содержимое HTML в строку

Примеры:
// Create DOM from URL or file
$html = file_get_html('http://www.google.com/');

// Find all images
foreach($html->find('img') as $element)
echo $element->src . '<br>';

// Find all links
foreach($html->find('a') as $element)
echo $element->href . '<br>';

Документация: _http://simplehtmldom.sourceforge.net/manual.htm
 
Сделал так- подгружаю свою страничку, которая в свою очередь через DOM подгружает чужую страницу. Теперь все норм, ничего не мешается в кучу. НО! постоянно в фрейме выскакивают ошибки типа:
Warning: DOMDocument::loadHTMLFile() [function.DOMDocument-loadHTMLFile]: ID generator already defined

Как от них избавиться? И некоторые чужие страницы вообще не отображаются- только ошибки показываются
 
Сделал так- подгружаю свою страничку, которая в свою очередь через DOM подгружает чужую страницу. Теперь все норм, ничего не мешается в кучу. НО! постоянно в фрейме выскакивают ошибки типа:
Warning: DOMDocument::loadHTMLFile() [function.DOMDocument-loadHTMLFile]: ID generator already defined

Как от них избавиться? И некоторые чужие страницы вообще не отображаются- только ошибки показываются

Если на странице, которую вы грузите, не соблюдены стандарты, то, естественно, будут выскакивать ошибки, а то и вообще не будут грузиться страницы. Причиной предупреждения "ID generator already defined" может быть использование одинакового имени и идентификатора, например:

Код:
<p><a name="generator" id="generator"></a></p>

В качестве полумеры можно отключить предупреждения через error_reporting перед loadHTMLFile() и восстанавливать error_reporting после loadHTMLFile().

Другой вариант - поискать другой парсер, например, обратите свой взор на simplexml.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху