Function externe div laden

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Vincent Post

Vincent Post

04/04/2014 09:58:19
Quote Anchor link
Hallo,

Ik probeer in een iframe een bepaald gedeelte van de site te laden (content div)

Hoe zou ik dat het beste kunnen doen of met welke taal is dat het handigste
ik dacht zelf aan een php function :)

De iframe word weergegeven op een facebook app (WooBox)


Alvast bedankt!
 
PHP hulp

PHP hulp

29/03/2024 08:12:32
 
Michael -

Michael -

04/04/2014 10:08:45
Quote Anchor link
Ligt er al aan of het op je eigen server is of dat je iets wilt 'rippen' van een andere site (Zorg dat je hier toestemming voor hebt als die site niet van jou is!)

Met jQuery kun je eenvoudig met load() een pagina of bepaald deel daar van inladen in een div op je eigen pagina.

<div id="content"></div>

<script>
$(document).ready(function() {
$('#content').load('pagina.php #gedeelte');
});
</script>

Als het een externe site is zou je de pagina eerst op moeten halen met CURL() of file_get_contents() en dan het gedeelte wat je wil hebben eruit slopen.
 
Vincent Post

Vincent Post

04/04/2014 10:12:29
Quote Anchor link
Het is een externe site en het is voor een klant dus dat zou geen probleem zijn


Zou je misschien klein voorbeeld kunnen geven met CURL()

Extra info :

Het gaat om de div : <div class="content" style="width:700px">
 
Michael -

Michael -

04/04/2014 10:32:15
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
        // create curl resource
        $ch = curl_init();

        // set url
        curl_setopt($ch, CURLOPT_URL, "example.com");

        //return the transfer as a string
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        // $output contains the output string
        $output = curl_exec($ch);

        // close curl resource to free up system resources
        curl_close($ch);      
?>


vervolgens zou in $output moeten zoeken naar een <div class="content" met preg_match(_all) bijv.
 
Vincent Post

Vincent Post

04/04/2014 10:39:15
Quote Anchor link
Geweldig ik denk dat dit me wel gaat lukken!

Bedankt!
 
Michael -

Michael -

04/04/2014 10:50:32
Quote Anchor link
Graag gedaan en anders horen we het wel weer.
Als het een site van de klant betreft, en je daar ook toegang tot hebt, zijn hiervoor makkelijkere manieren te bedenken zoals de data die je nodig hebt doorgeven als json string o.i.d.

Toevoeging op 04/04/2014 11:02:59:

Misschien wat overkill voor wat jij wil, maar met domDocument zou het ook kunnen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
function getTextBetweenTags($tag, $url, $strict=0)
{

    // create curl resource
    $ch = curl_init();

    // set url
    curl_setopt($ch, CURLOPT_URL, $url);

    //return the transfer as a string
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    // $output contains the output string
    $html = curl_exec($ch);

    // close curl resource to free up system resources
    curl_close($ch);

    /*** a new dom object ***/
    $dom = new domDocument;

    /*** load the html into the object ***/
    if($strict==1)
    {
        @
$dom->loadXML($html);
    }

    else
    {
        @
$dom->loadHTML($html);
    }


    /*** discard white space ***/
    $dom->preserveWhiteSpace = false;

    /*** the tag by its tag name ***/
    $content = $dom->getElementsByTagname($tag);

    /*** the array to return ***/
    $out = array();
    foreach ($content as $item)
    {

        /*** add node value to the out array ***/
        $out[] = $item->nodeValue;
    }

    /*** return the results ***/
    return $out;
}

$content = getTextBetweenTags('div', 'http://www.phphulp.nl/php/forum/topic/function-externe-div-laden/94425/1/');

echo $content[23]; // Hallo, Ik probeer in een iframe een bepaald gedeelte van de site te laden (content div) Hoe zou ik dat het beste kunnen doen of met welke taal is dat het handigste ik dacht zelf aan een php function :) De iframe word weergegeven op een facebook app (WooBox) Alvast bedankt!
?>


Nou krijg je alle div's terug. Als je wat specifieker wil zijn kun je het volgende gebruiken i.p.v. regel 36
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$xpath
= new DOMXPath($dom);
$content = $xpath->query('//div[@class="content"]');
?>
Gewijzigd op 04/04/2014 11:21:01 door Michael -
 
Vincent Post

Vincent Post

08/04/2014 11:03:52
Quote Anchor link
Ik heb hem nu ingeladen maar hij pakt alleen de tekst? ik moet de hele div hebben met background hoe doe ik dat ?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
function getTextBetweenTags($tag, $url, $strict=0)
{

    // create curl resource
    $ch = curl_init();

    // set url
    curl_setopt($ch, CURLOPT_URL, $url);

    //return the transfer as a string
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    // $output contains the output string
    $html = curl_exec($ch);

    // close curl resource to free up system resources
    curl_close($ch);

    /*** a new dom object ***/
    $dom = new domDocument;

    /*** load the html into the object ***/
    if($strict==1)
    {
        @
$dom->loadXML($html);
    }

    else
    {
        @
$dom->loadHTML($html);
    }


    /*** discard white space ***/
    $dom->preserveWhiteSpace = false;

    /*** the tag by its tag name ***/
    $xpath = new DOMXPath($dom);
    $content = $xpath->query('//div[@class="content"]');

    /*** the array to return ***/
    $out = array();
    foreach ($content as $item)
    {

        /*** add node value to the out array ***/
        $out[] = $item->nodeValue;
    }

    /*** return the results ***/
    return $out;
}

$content = getTextBetweenTags('div', 'http://);

echo $content[0];
?>
Gewijzigd op 08/04/2014 11:55:50 door Vincent Post
 
Michael -

Michael -

08/04/2014 11:12:49
Quote Anchor link
Ah, ik begreep niet dat je de HTML ook wou :) Excuses
Vervang regel 44 door $out[] = $dom->saveHTML($item);
 
Vincent Post

Vincent Post

08/04/2014 11:28:08
Quote Anchor link
Geweldig nu pakt hij de html ook moet ik nu alleen de css link even toevoegen en dan zou hij moeten werken?
want hij weergeeft de images nu niet.

Bedankt! ;)
 
Michael -

Michael -

08/04/2014 11:38:15
Quote Anchor link
Dat komt omdat je images niet kunnen worden gevonden omdat de paden niet volledig zijn. Hij zoekt de images nu dus op de plek waar je het script uitvoert. Zelfde geldt voor de CSS.
Je zou dit kunnen oplossen door <base href="http://www.***.nl/" /> toe te voegen in je head.

Edit: Let er wel op dat dan ALLES wat na base komt, wordt opgehaald vanaf die website. Dus ook je eigen plaatjes. Je eigen CSS zou je boven de base kunnen plaatsen.

Dan zou je dit moeten krijgen.

Edit2: De base href zou moeten zijn
<base href="http://www.***.nl/ik-zoek-een-koopwoning/" />
Anders werken de 'meer info' links ook niet meer.
Gewijzigd op 08/04/2014 11:43:14 door Michael -
 
Vincent Post

Vincent Post

08/04/2014 11:52:00
Quote Anchor link
Geweldig super bedankt! hiermee kan ik verder ;)
 
Michael -

Michael -

08/04/2014 11:53:10
Quote Anchor link
Graag gedaan en succes!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.