Function externe div laden
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!
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.
Zou je misschien klein voorbeeld kunnen geven met CURL()
Extra info :
Het gaat om de div : <div class="content" style="width:700px">
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);
?>
// 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.
Bedankt!
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)
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
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!
?>
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)
1
2
3
4
2
3
4
<?php
$xpath = new DOMXPath($dom);
$content = $xpath->query('//div[@class="content"]');
?>
$xpath = new DOMXPath($dom);
$content = $xpath->query('//div[@class="content"]');
?>
Gewijzigd op 04/04/2014 11:21:01 door Michael -
Code (php)
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
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];
?>
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
Vervang regel 44 door $out[] = $dom->saveHTML($item);
want hij weergeeft de images nu niet.
Bedankt! ;)
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 -
Geweldig super bedankt! hiermee kan ik verder ;)
Graag gedaan en succes!