Split artikel op alle image tags
Dat ging prima door het artikel te splitten op een image tag, maar nu kan ik maar een afbeelding toevoegen.
Dit is wat ik nu heb in html formaat:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?
<p>Part one of the article</p>
//Split op de img tag
<img src="#">
<p>Part two of the article</p>
?>
<p>Part one of the article</p>
//Split op de img tag
<img src="#">
<p>Part two of the article</p>
?>
Maar wat ik dus wil dat mogelijk is, is dit:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?
<p>Part one of the article</p>
//Split op de img tag
<img src="#">
<img src="#">
<img src="#">
<img src="#">
<p>Part two of the article</p>
?>
<p>Part one of the article</p>
//Split op de img tag
<img src="#">
<img src="#">
<img src="#">
<img src="#">
<p>Part two of the article</p>
?>
Op deze manier heb ik het eerste voorbeeld voor elkaar gekregen:
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
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
<?
<div class="container relative" style="padding: 0px;">
<div class="row">
<div class="col-sm-12">
<div class="blog-item mb-20 mb-xs-40">
<!-- Text -->
<div class="blog-item-body">
[code]<?
$introtext = $contenti[0]['introtext'];
$splitartikel = preg_split('/(<img[^>]+\>)/i', $introtext, -1, PREG_SPLIT_DELIM_CAPTURE);
echo $splitartikel[0];
?>
</div>
</div>
</div>
</div>
</div>
<div class="container-fluid relative" style="padding: 0px;">
<div class="row">
<div class="col-sm-12">
<div class="middleimage">
<?
echo $splitartikel[1];
?>
</div>
</div>
</div>
</div>
<div class="container relative" style="padding: 0px;">
<div class="row">
<div class="col-sm-12">
<div class="blog-item mb-20 mb-xs-40">
<!-- Text -->
<div class="blog-item-body">
<?
echo $splitartikel[2];
?>
</div>
</div>
</div>
</div>
</div>
?>
<div class="container relative" style="padding: 0px;">
<div class="row">
<div class="col-sm-12">
<div class="blog-item mb-20 mb-xs-40">
<!-- Text -->
<div class="blog-item-body">
[code]<?
$introtext = $contenti[0]['introtext'];
$splitartikel = preg_split('/(<img[^>]+\>)/i', $introtext, -1, PREG_SPLIT_DELIM_CAPTURE);
echo $splitartikel[0];
?>
</div>
</div>
</div>
</div>
</div>
<div class="container-fluid relative" style="padding: 0px;">
<div class="row">
<div class="col-sm-12">
<div class="middleimage">
<?
echo $splitartikel[1];
?>
</div>
</div>
</div>
</div>
<div class="container relative" style="padding: 0px;">
<div class="row">
<div class="col-sm-12">
<div class="blog-item mb-20 mb-xs-40">
<!-- Text -->
<div class="blog-item-body">
<?
echo $splitartikel[2];
?>
</div>
</div>
</div>
</div>
</div>
?>
Als ik nu meerdere img tags toevoeg dan pakt hij alleen de 1e, hoe kan ik ervoor zorgen dat de code het artikel split op welk aantal img tags dan ook?
De query mocht dat nodig zijn:
Code (php)
Toevoeging op 21/04/2016 14:38:33:
daarmee ben je niet meer afhankelijk van jouw hardcoded indexen 1 en 2.
nb: probeer shorttags te voorkomen. Die werken op steeds minder servers
Gewijzigd op 21/04/2016 14:37:30 door Ivo P
Dat werkt inderdaad voor meerdere images, maar het probleem is dat hij de tekst ook looped. Ik probeer alleen meerdere images toe te voegen.
Dat $part eventueel leeg kan zijn als 2 images achter elkaar staan?
....
Ivo P op 21/04/2016 15:19:24:
Het artikel splitst nu in 3en als er een image tag is, het eerste stuk, de image, en het laatste stuk.
Met de foreach die je postte kan ik inderdaad meerdere images toevoegen, maar om elke image gooit die dan ook het eerste en laatste stuk tekst eromheen.
Zo:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?
<p>eerste stuk</p>
<img 1>
<p>2e stuk tekst</p>
<p>eerste stuk</p>
<img 2>
<p>2e stuk tekst</p>
?>
<p>eerste stuk</p>
<img 1>
<p>2e stuk tekst</p>
<p>eerste stuk</p>
<img 2>
<p>2e stuk tekst</p>
?>
Terwijl dit is wat ik nodig heb:
ik zie alleen niet waar die images vandaan komen.
Ivo P op 21/04/2016 15:33:14:
ik zie alleen niet waar die images vandaan komen.
Die zitten in de introtext, het zijn images die zijn toegevoegd in een joomla cms. Ze staan dus in de database opgeslagen tussen de tekst gewoon als <img src="plaatjeslink">
dus hoe komen die dan alsnog op het scherm?
Ivo P op 21/04/2016 16:58:49:
maar op regel 22 snij je die er tussenuit
dus hoe komen die dan alsnog op het scherm?
dus hoe komen die dan alsnog op het scherm?
Wat bedoel je? Ik snijd niks eruit maar split de introtext in 3en, op de image tag. Maar dat werkt alleen als er 1 image tag in de introtext staat, ik kan dan niet meerdere image tags toevoegen, dan laat die die plaatjes gewoon niet zien.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[ivo@server6 tmp]$ cat test.php
<?php
$string = 'abcXdefXghi';
$a = preg_split('#X#', $string);
print_r($a);
?>
[ivo@server6 tmp]$ php test.php
Array
(
[0] => abc
[1] => def
[2] => ghi
)
<?php
$string = 'abcXdefXghi';
$a = preg_split('#X#', $string);
print_r($a);
?>
[ivo@server6 tmp]$ php test.php
Array
(
[0] => abc
[1] => def
[2] => ghi
)
In dit geval split ik op de letter X.
Die zie ik niet meer terug in het resulterende array.
Dus hoe kun jij dan (als je split op de images) de images nog in je resultaat hebben staan?
Ivo P op 22/04/2016 10:39:10:
demo:
In dit geval split ik op de letter X.
Die zie ik niet meer terug in het resulterende array.
Dus hoe kun jij dan (als je split op de images) de images nog in je resultaat hebben staan?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[ivo@server6 tmp]$ cat test.php
<?php
$string = 'abcXdefXghi';
$a = preg_split('#X#', $string);
print_r($a);
?>
[ivo@server6 tmp]$ php test.php
Array
(
[0] => abc
[1] => def
[2] => ghi
)
<?php
$string = 'abcXdefXghi';
$a = preg_split('#X#', $string);
print_r($a);
?>
[ivo@server6 tmp]$ php test.php
Array
(
[0] => abc
[1] => def
[2] => ghi
)
In dit geval split ik op de letter X.
Die zie ik niet meer terug in het resulterende array.
Dus hoe kun jij dan (als je split op de images) de images nog in je resultaat hebben staan?
Dat is toch hoe split werkt?
Met mijn code heb ik de volgende array als ik $splitartikel print:
Array ( [0] => begin stuk van de tekst
[1] => Image
[2] => Stuk tekst na de image
)
Ik wil de images er ook niet uithalen, maar juist laten zien.
De reden dat ik dit doe is omdat de images buiten de wrapper moeten vallen van de tekst. Dat lukt met de code die ik heb, alleen als ik meerdere image tags toevoeg dan laat hij er maar 1 zien.
Gewijzigd op 22/04/2016 10:49:38 door Snelle Jaap
Ik heb hem nog eens aangepast.
Krijg het alleen voorelkaar om bij 2 img achter elkaar een leeg array element te veroorzaken:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[ivo@server6 tmp]$ cat test.php && php test.php
<?php
$string = 'abc<img a><img c>def<img b>ghi';
$a = preg_split('#(\<img[^>]+\>)#', $string);
print_r($a);
?>
Array
(
[0] => abc
[1] =>
[2] => def
[3] => ghi
)
<?php
$string = 'abc<img a><img c>def<img b>ghi';
$a = preg_split('#(\<img[^>]+\>)#', $string);
print_r($a);
?>
Array
(
[0] => abc
[1] =>
[2] => def
[3] => ghi
)
Ivo P op 22/04/2016 10:53:38:
bij mij niet.
Ik heb hem nog eens aangepast.
Krijg het alleen voorelkaar om bij 2 img achter elkaar een leeg array element te veroorzaken:
Ik heb hem nog eens aangepast.
Krijg het alleen voorelkaar om bij 2 img achter elkaar een leeg array element te veroorzaken:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[ivo@server6 tmp]$ cat test.php && php test.php
<?php
$string = 'abc<img a><img c>def<img b>ghi';
$a = preg_split('#(\<img[^>]+\>)#', $string);
print_r($a);
?>
Array
(
[0] => abc
[1] =>
[2] => def
[3] => ghi
)
<?php
$string = 'abc<img a><img c>def<img b>ghi';
$a = preg_split('#(\<img[^>]+\>)#', $string);
print_r($a);
?>
Array
(
[0] => abc
[1] =>
[2] => def
[3] => ghi
)
Even gekeken op php.net en ik denk dat het ligt aan dit stuk:
PREG_SPLIT_DELIM_CAPTURE
If this flag is set, parenthesized expression in the delimiter pattern will be captured and returned as well.
Ik denk dat je beter af bent zonder die parameter
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
[ivo@server6 tmp]$ cat test.php && php test.php
<?php
$string = 'abc<img a><img c>def<img b>ghi';
$a = preg_split('#(\<img[^>]+\>)#', $string, PREG_SPLIT_DELIM_CAPTURE);
print_r($a);
?>
Array
(
[0] => abc
[1] => <img c>def<img b>ghi
)
<?php
$string = 'abc<img a><img c>def<img b>ghi';
$a = preg_split('#(\<img[^>]+\>)#', $string, PREG_SPLIT_DELIM_CAPTURE);
print_r($a);
?>
Array
(
[0] => abc
[1] => <img c>def<img b>ghi
)
je bent hiermee img A kwijt.
ik zou de split doen zonder de 3e parameter
en dan een extra preg_match_all() om alle afbeeldingen te verkrijgen.