Foreach loop

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Sefanja Brouwer

Sefanja Brouwer

04/05/2021 13:42:30
Quote Anchor link
Hoi,

Ik ben bezig met een webshop, dit doe ik met Wordpress en WooCommerce.
Bij onze korte beschrijving (post_excerpt) willen we een list hebben.
Al onze producten (ca 3500) staan in een csv bestand waarbij de list items ook vermeld staan.
In de csv staan de items gescheiden met een komma, het idee is om die string te pakken en bij elke komma een nieuwe li te maken.

Ik dacht dat een foreach loop daar goed bij zou passen maar helaas werkt de code die ik heb niet. Deze heb ik na wat zoekwerk gevonden. Hieronder de code zoals die nu is.

Is er iemand die weet wat ik fout doe of die een betere oplossing heeft voor onze wens?

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
<?php
if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly.
}

global $post;

$short_description = apply_filters( 'woocommerce_short_description', $post->post_excerpt );

if ( ! $short_description ) {
    return;
}


?>


<?php $words = str_getcsv(',', $short_description); ?>

<div class="woocommerce-product-details__short-description">
    
    <?php
    
        if(!empty($words)){
            echo '<ul>';
            foreach($words as $word){
                echo '<li>'.htmlspecialcharacters($word).'</li>';
            }

            echo '</ul>';
        }

    
    ?>

</div>
Gewijzigd op 04/05/2021 15:59:43 door - Ariën -
 
PHP hulp

PHP hulp

15/03/2025 05:14:51
 
Ozzie PHP

Ozzie PHP

04/05/2021 14:05:53
Quote Anchor link
Je roept volgens mij nergens je csv-bestand aan?
 
Sefanja Brouwer

Sefanja Brouwer

04/05/2021 14:13:11
Quote Anchor link
We hebben nu via een import plugin de waarde van de csv geplaatst in de short description.
Ik dacht dat die nu de short description leest, maar dat is dan mogelijk ook niet zo.
 
Ozzie PHP

Ozzie PHP

04/05/2021 14:18:31
Quote Anchor link
Na deze regel:

$words = str_getcsv(',', $short_description);

plaats eens

var_dump($words);

Zie je dan de inhoud van die csv?
 
Sefanja Brouwer

Sefanja Brouwer

04/05/2021 14:24:31
Quote Anchor link
Dan krijg ik dit te zien: array(1) { [0]=> string(1) "," }
 
Ozzie PHP

Ozzie PHP

04/05/2021 14:30:00
Quote Anchor link
En als je dit doet:

var_dump($short_description);
 
Sefanja Brouwer

Sefanja Brouwer

04/05/2021 14:31:52
Quote Anchor link
Als ik dat doe dan krijg ik de inhoud van de csv te zien.

string(61) "
elektrische gitaarversterker, 10W, 6,5? speaker

"
 
Ozzie PHP

Ozzie PHP

04/05/2021 14:34:28
Quote Anchor link
ipv $words = str_getcsv(',', $short_description);

dit

$words = explode(',', $short_description);
 
Sefanja Brouwer

Sefanja Brouwer

04/05/2021 14:36:41
Quote Anchor link
array(4) { [0]=> string(31) "
elektrische gitaarversterker" [1]=> string(4) " 10W" [2]=> string(2) " 6" [3]=> string(21) "5? speaker

" }

Dit is wat er dan uit komt, wel met de var_dump. Zonder dat laat die nog niets zien.
 
Ozzie PHP

Ozzie PHP

04/05/2021 14:40:13
Quote Anchor link
Waarschijnlijk omdat de functie 'htmlspecialcharacters' niet bestaat. Probeers eens 'htmlspecialchars'.
 
Sefanja Brouwer

Sefanja Brouwer

04/05/2021 14:44:51
Quote Anchor link
Ik krijg het nu bijna zoals ik het wil! Heel tof, alleen zie ik dat er een <p> tag in de tekst wordt geplaatst.

-<p>gitaar ukelele met gitaarmechanieken
-blauw</p>

Dit is wat ik nu zie.
 
Ozzie PHP

Ozzie PHP

04/05/2021 14:47:11
Quote Anchor link
Staat die ook in het csv-bestand?

Wellicht voegt WordPress die toe.
 
Sefanja Brouwer

Sefanja Brouwer

04/05/2021 14:50:04
Quote Anchor link
Die staat niet in het csv bestand, WordPress of WooCommerce voegt deze inderdaad toe maar ik kan hem niet vinden in de code.
 
Ozzie PHP

Ozzie PHP

04/05/2021 14:56:06
Quote Anchor link
Maar zet ie dat iedere keer eromheen?

ZIe je wel de <ul> en </ul> staan?
 
Sefanja Brouwer

Sefanja Brouwer

04/05/2021 14:59:53
Quote Anchor link
Ja die zie ik staan, als ik het via element inspecteren bekijk zie ik keurig een div, ul li staan. Alleen in die li voegt die letterlijk de p tag toe.
 
Ozzie PHP

Ozzie PHP

04/05/2021 15:05:09
Quote Anchor link
En als je htmlspecialchars weghaalt?
 
Sefanja Brouwer

Sefanja Brouwer

04/05/2021 15:40:06
Quote Anchor link
De p tag gaat dan weg uit de tekst, wel blijft die in de code zichtbaar.

Dit doet die wel op een gekke manier, bij het geval van 3 punten komt dit in de code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<li><p>electric guitar</p></li>
<li>Pirate serie</li>
<li>black<p></p></li>


Als er 2 li's zijn krijg ik dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<li><p>electric guitar</p></li>
<li>black<p></p></li>
Gewijzigd op 04/05/2021 15:59:09 door - Ariën -
 
Ozzie PHP

Ozzie PHP

04/05/2021 15:46:49
Quote Anchor link
Misschien, een wilde gok, staan er spaties in de tekst. Probeer dit eens:

echo '<li>'.trim($word).'</li>';
 
Sefanja Brouwer

Sefanja Brouwer

04/05/2021 15:50:52
Quote Anchor link
Dat heeft niets veranderd helaas.
 
Ozzie PHP

Ozzie PHP

04/05/2021 15:52:10
Quote Anchor link
Plaats nog eens een keer het hele stukje code.
 
Sefanja Brouwer

Sefanja Brouwer

04/05/2021 15:53:40
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
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly.
}

global $post;

$short_description = apply_filters( 'woocommerce_short_description', $post->post_excerpt );

if ( ! $short_description ) {
    return;
}


?>


<?php

    $words
= explode(',', $short_description);
//    var_dump($words);

?>


<div class="woocommerce-product-details__short-description">
    
    <?php
    
        if(!empty($words)){
            echo '<ul>';
            foreach($words as $word){
                echo '<li>'.trim($word).'</li>';
            }

            echo '</ul>';
        }

    
    ?>

</div>


Moderatie-edit:
Ik heb [code]-tags geplaatst voor betere leesbaarheid van het script.
Gelieve deze te gebruiken in het vervolg. Zie ook dit overzicht met alle beschikbare UBB-codes.


Toevoeging op 04/05/2021 16:10:08:

Ik heb nu op elk element een p toegevoegd, en met css de margin van de p op 0 gezet zodat het er wel uit komt te zien zoals we willen.
Misschien is er nog wel een betere manier maar voor nu lijkt me dit ook goed.

Bedankt voor de hulp!
Gewijzigd op 04/05/2021 15:58:37 door - Ariën -
 

Pagina: 1 2 volgende »



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.