web-dev-qa-db-fra.com

Comment retourner un foreach dans un shortcode

J'ai le code suivant

 function stock_agenda() {

        $days = json_decode(file_get_contents('json_file'));

        unset($days[0]);

        return  '<table class="table">
   <thead>
     <tr>
      <th> Title </th>
      <th>Content</th>
      <th>Date</th>
     </tr>
    </thead>
    <tbody>
     '. foreach($days as $day){.'
      <tr>
       <td>'.$day[0].'</td>
       <td>'.$day[1].'</td>
       <td>'.$day[2].'</td>
      </tr>
     '. }.'
     </tbody>
</table>' ;
    }

Comment l'assigner à un shortcode? Si j'écris foreach dans la méthode return, j'obtiens une erreur.

1
Radu033

Comme je l'ai dit dans le commentaire, vous pouvez utiliser la mise en mémoire tampon comme ceci

function stock_agenda() {
    $days = json_decode(file_get_contents('json_file'));
    unset($days[0]);
    ob_start(); // start buffer
    ?>
    <table class="table">
        <thead>
            <tr>
                <th> Title </th>
                <th>Content</th>
                <th>Date</th>
            </tr>
        </thead>
        <tbody>
            <?php foreach($days as $day) { ?>
            <tr>
                <td><?php echo $day[0]; ?></td>
                <td><?php echo $day[1]; ?></td>
                <td><?php echo $day[2]; ?></td>
            </tr>
            <?php } ?>
        </tbody>
    </table>
    <?php
    $output = ob_get_clean(); // set the buffer data to variable and clean the buffer
    return $output;
}
2
Shibi

Vous pouvez utiliser:

function stock_agenda() {

    $days = json_decode(file_get_contents('json_file'));

    unset($days[0]);


    $include_variable = '';
    foreach($days as $day){
        $include_variable  .= <<<EOD
            <tr>
            <td>$day[0]</td>
            <td>$day[1]</td>
            <td>$day[2]</td>
            </tr>
            EOD;
    }

    $str = <<<EOD
        <table class="table">
        <thead>
        <tr>
        <th> Title </th>
        <th>Content</th>
        <th>Date</th>
        </tr>
        </thead>
        <tbody>
        $include_variable 
        </tbody>
        </table>
    EOD;

    return $str;
}
0
Drupalizeme