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

Тема в разделе "PHP", создана пользователем phillip, 30 апр 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. phillip

    phillip

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

    Код:
    МОЙ ПХП И ХТМ КОД, ЗАТЕМ
    <hr/>
    <?php
    $doc = new DOMDocument();
    $doc->loadHTMLFile("http://ixbt.com");
    echo $doc->saveHTML();
    ?>
    http://ixbt.com в данном случае- урл чужой страницы. Но он у меня постоянно разный
     
  2. black.cat

    black.cat

    Регистр.:
    13 ноя 2008
    Сообщения:
    203
    Симпатии:
    32
    на мой взгляд у вас два варианта
    1. тупо использовать фрейм или iframe
    2. загрузить целевую страницу разобрать ее на части (css,js,body) а потом слепить каждую часть с своей и тока после этого вывалить обе страницы в броузер. Сложно будет сделать чтобы css сайта не мешал вашим. Но можно. Для этого вам прйдется описать абсолютно все css стили всего что есть в вашей части (т.е. не писать <p>..</p> а полюбому насильно <p id="zzz_039493434" class="abc_32323"> </p>) и чтобы имена стилей не пересекались со второй страницей.
     
    phillip нравится это.
  3. [Гилыч]

    [Гилыч] Постоялец

    Регистр.:
    5 авг 2008
    Сообщения:
    57
    Симпатии:
    17
    да, самый вариант это iframe
     
  4. phillip

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    второй вариант мне не очень нравится) А как сделать с использованием фреймов? Я фреймами ни разу ничего не делал
     
  5. jik

    jik

    Регистр.:
    11 мар 2009
    Сообщения:
    243
    Симпатии:
    133
    iframe имеет следующий формат:

    Код:
    <IFRAME SRC="document.htm" WIDTH=XXX HEIGHT=XXX NAME="XXX" SCROLLING="yes/no/auto" [NORESIZE]>
    </IFRAME>
    между тэгами <IFRAME> и </IFRAME> можно вставить HTML код, который будет обрабатываться браузерами, не знающими тэга IFRAME.
     
    phillip нравится это.
  6. potehi

    potehi Создатель

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

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

    Примеры:
    Документация: _http://simplehtmldom.sourceforge.net/manual.htm
     
    phillip нравится это.
  7. phillip

    phillip

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

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

    jik

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

    Код:
    <p><a name="generator" id="generator"></a></p>
    В качестве полумеры можно отключить предупреждения через error_reporting перед loadHTMLFile() и восстанавливать error_reporting после loadHTMLFile().

    Другой вариант - поискать другой парсер, например, обратите свой взор на simplexml.
     
    phillip нравится это.
Статус темы:
Закрыта.