Mise en forme affichage foreach

Petit nouveau ! | 8 Messages

23 sept. 2019, 20:17

Bonjour à tous,

Je viens vers vous pour vous demander de l'aide sur la mise en forme d'un foreach.

En effet, j'aimerais afficher une liste comme suit:
	<div id="accordeon">
        <div class="card">
			<div class="card-body">
				<h4 class="card-title">Liste pricipale</h4>
			</div>
			<div class="card-header">
				<a href="#item1" class="card-link" data-toggle="collapse" data-parent="#accordeon"><?= $v['shelf_name'] ?></a>
			</div>
			<div class="collapse" id="item1">
				<div class="card-body"> <!-- Ici on doit pouvoir afficher autant de input et label qu'on a d'article ID  dans la BDD -->
					<input type="checkbox" class="form-check-input" value="<?= $v['article_id'] ?>">
					<label class="form-check-label" for="defaultCheck1"><?= $v['article_name'] ?></label>
					<input type="checkbox" class="form-check-input" value="2"> <!-- Par exemple -->
					<label class="form-check-label" for="defaultCheck1">Lait</label>
					<input type="checkbox" class="form-check-input" value="3">
					<label class="form-check-label" for="defaultCheck1">Crème fraiche</label> <!-- Fin exemple -->
				</div>
			</div>
			<!-- On répéte fois X le nombre de shelf_name contenu dans la BDD -->
			<div class="card-header">
				<a href="#item1" class="card-link" data-toggle="collapse" data-parent="#accordeon"><?= $v['shelf_name'] ?></a>
			</div>
			<div class="collapse" id="item1">
				<div class="card-body">
					<input type="checkbox" class="form-check-input" value="<?= $v['article_id'] ?>">
					<label class="form-check-label" for="defaultCheck1"><?= $v['article_name'] ?></label>
					<input type="checkbox" class="form-check-input" value="<?= $v['article_id'] ?>">
					<label class="form-check-label" for="defaultCheck1"><?= $v['article_name'] ?></label>
				</div>
			</div>
        </div>
	</div>

J'avais fait un forum à une époque antérieure, mais je vous avoue que j'ai oublié comment procéder à la mise en forme.

Voici ma requête qui est dans une fonction (prévue pour un jour être dans une classe, mais j'y suis pas encore Oo), et la façon dont j'appel et je génère le foreach.


Récupération des articles
function recuperer_articles()
{
	global $cnx;
	$articles = array();
	$query = $cnx->prepare('
	SELECT 
		t_shelf.shelf_id,
		t_shelf.shelf_name,
		t_article.article_id,
		t_article.article_name,
		t_article.shelf_id
	FROM t_shelf
	INNER JOIN t_article
		ON t_shelf.shelf_id = t_article.shelf_id
	ORDER BY t_shelf.shelf_name ASC, t_article.article_name ASC');
	try {
		$query->execute()
		or die ('<div id="alert" class="alert alert-error">
				Une erreur est survenue, merci de contacter un administrateur ou le webmaster!
			</div>');
		while ($data = $query->fetch(PDO::FETCH_ASSOC)) 
		{
			$articles[] = $data;
		}
	}
	catch(PDOException $e){
		echo '<div id="alert" class="alert alert-error">
				Erreur : La requête à un problème, merci de contacter un administrateur ou le webmaster!
			</div>';
		exit;
	}
	return $articles;
	$query->CloseCursor();
}

Le Foreach
<?php
 	$articles = recuperer_articles();
	$rayon = '';
	foreach($articles as $v)
	{
		if($rayon!=$v['shelf_name']){
			echo  <<<HTML
			<h5 class="text-primary">{$v['shelf_name']}</h5>
HTML;
			$rayon=$v['shelf_name'];
		}
		echo <<<HTML
		<div class="form-check">
			<input type="checkbox" class="form-check-input" value="{$v['article_id']}">
			<label class="form-check-label" for="defaultCheck1">{$v['article_name']}</label>
		</div>
HTML;
	}
?>
Voilà, en espérant que vous pourrez m'aider.

D'ici là, bon courage à tous pour le taff et autre ;-)

Au plaisir et merci à vous.

Cordialement.