Split artikel op alle image tags

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Snelle Jaap

Snelle Jaap

21/04/2016 13:42:06
Quote Anchor link
Ik heb een artikel die ik split in 3en omdat de afbeeldingen in het artikel buiten de bootstrapbreedte moeten vallen (het artikel is de volle breedte binnen een wrapper, en de images in het artikel moeten de volledige breedte worden ook buiten de wrapper.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>
?>


Maar wat ik dus wil dat mogelijk is, is dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>
?>


Op deze manier heb ik het eerste voorbeeld voor elkaar gekregen:

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
<?
<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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?
// Articles
    $content    = "SELECT * FROM `lb_content` WHERE alias = '".$conn->real_escape_string($_GET['alias'])."' ";
    $contentcon = $conn->query($content);
    $contenti   = array();
    while ($contenti[] = $contentcon->fetch_array());
?>
 
PHP hulp

PHP hulp

29/03/2024 02:58:03
 
Peter K

Peter K

21/04/2016 14:03:06
Quote Anchor link
Kijk eens naar de explode functie: http://php.net/manual/en/function.explode.php

Je kunt hiermee splitsen in stukken.
 
Ivo P

Ivo P

21/04/2016 14:36:28
Quote Anchor link
vanaf regel 22:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php foreach($splitartikel as $part) : ?>
<div class="container-fluid relative" style="padding: 0px;">
    <div class="row">
        <div class="col-sm-12">
            <div class="middleimage">
                <?php echo $part; ?>
            </div>
        </div>
    </div>
</div>  
<?php endforeach ?>


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
 
Snelle Jaap

Snelle Jaap

21/04/2016 15:12:12
Quote Anchor link
Dat werkt inderdaad voor meerdere images, maar het probleem is dat hij de tekst ook looped. Ik probeer alleen meerdere images toe te voegen.
 
Ivo P

Ivo P

21/04/2016 15:19:24
Quote Anchor link
ik snap je probleem nog niet helemaal. Wat bedoel je met "looped"?

Dat $part eventueel leeg kan zijn als 2 images achter elkaar staan?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php foreach($splitartikel as $part) :
  if(trim($part)) :
 ?>


....
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
  endif;
endforeach; ?>
 
Snelle Jaap

Snelle Jaap

21/04/2016 15:26:16
Quote Anchor link
Ivo P op 21/04/2016 15:19:24:
ik snap je probleem nog niet helemaal. Wat bedoel je met "looped"?

Dat $part eventueel leeg kan zijn als 2 images achter elkaar staan?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php foreach($splitartikel as $part) :
  if(trim($part)) :
 ?>


....
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
  endif;
endforeach; ?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
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>
?>


Terwijl dit is wat ik nodig heb:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?
<p>eerste stuk</p>
    <
img 1>
    <
img 2>
<
p>2e stuk tekst</p>
?>
 
Ivo P

Ivo P

21/04/2016 15:33:14
Quote Anchor link
ik zie alleen niet waar die images vandaan komen.
 
Snelle Jaap

Snelle Jaap

21/04/2016 15:58:33
Quote Anchor link
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">
 
Ivo P

Ivo P

21/04/2016 16:58:49
Quote Anchor link
maar op regel 22 snij je die er tussenuit

dus hoe komen die dan alsnog op het scherm?
 
Snelle Jaap

Snelle Jaap

22/04/2016 10:16:06
Quote Anchor link
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?


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.
 
Ivo P

Ivo P

22/04/2016 10:39:10
Quote Anchor link
demo:
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
[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
)


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?
 
Snelle Jaap

Snelle Jaap

22/04/2016 10:47:32
Quote Anchor link
Ivo P op 22/04/2016 10:39:10:
demo:
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
[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
)


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
 
Ivo P

Ivo P

22/04/2016 10:53:38
Quote Anchor link
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:

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
[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
)
 
Snelle Jaap

Snelle Jaap

22/04/2016 10:57:40
Quote Anchor link
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:

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
[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
)


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.
 
Ivo P

Ivo P

22/04/2016 13:44:49
Quote Anchor link
ik zag die parameter net nog staan. (stond wat buiten beeld).

Ik denk dat je beter af bent zonder die parameter
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
)


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.
 



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.