Bonjour à tous !
J'ai un petit problème qui me prend la tête depuis ce matin et malgré mes recherches sur le net ou sur le forum, je n'ai pas trouvé de réponses pouvant m'éclairer...
Pour résumé la situation, j'ai créé un carrousel administrable pour lequel je peux choisir les images du carrousel et les info (texte) que je peux faire passé sur chaque slide, les deux provenant de deux tables différentes.
J'utilise donc 2 foreach imbriqués afin de récupérer les données dans la vue mais le problème survient avec mon deuxième foreach. La boucle duplique le contenu de chaque div et je me retrouve avec 4 slides au lieu de 2 (par exemple...)
Voici la fonction dans mon Controller pour les récupérer et les envoyer à la vue :
public function index(){
$d'caroussel'] = $this->Caroussel->find('all', array(
'conditions' => array('home' => 1),
'fields' => array('file')
));
$this->LoadModel('Service');
$this->Service->recursive = 0;
$d'services'] = $this->Service->find('all', array(
'conditions' => array('online' => 1, 'media_id!=0')
));
if ($this->request->is('requested')) {
return $d;
} else {
$this->set('caroussel', $d);
}
}
le code de ma vue avec les foreach incriminés...
<?php $d = $this->requestAction(array('controller' => 'caroussels', 'action' => 'index')); ?>
<div id="layerslider" style="width:100%;height:436px;">
<?php foreach($d'caroussel'] as $k => $v): $v = current($v); ?>
<?php foreach($d'services'] as $kk => $vv): $vv= current($vv); ?>
<div class="ls-slide">
<?php echo $this->Html->image($v'file'], array('class' => 'ls-bg')); ?>
<h2 class="ls-l carrousel-title" style="top:25%;left:15%;font-size:50px"><?php echo $vv'name']; ?></h2>
<p class="ls-l carrousel-desc" style="top:50%;left:25%;width:450px;font-size:18px"><?php echo $vv'service-desc']; ?></p>
<?php echo $this->Html->image($vv'thumb'], array('class' => 'ls-l')); ?>
</div>
<?php endforeach; ?>
<?php endforeach; ?>
</div>
et un débug du tableau pour que vous puissiez bien comprendre la structure du tableau :
array(
'caroussel' => array(
(int) 0 => array(
'Caroussel' => array(
'file' => '/img/uploads/2014/05/asus-and-intel-3.jpg',
'type' => 'pic',
'icon' => '/img/uploads/2014/05/asus-and-intel-3.jpg'
)
),
(int) 1 => array(
'Caroussel' => array(
'file' => '/img/uploads/2014/05/asus-and-intel-2.jpg',
'type' => 'pic',
'icon' => '/img/uploads/2014/05/asus-and-intel-2.jpg'
)
)
),
'services' => array(
(int) 0 => array(
'Service' => array(
'id' => '8',
'name' => 'service 1',
'service-desc' => 'test de la description d'un service qui peux s'afficher sur la page d'accueil.',
'media_id' => '1',
'thumb' => '/img/uploads/2014/06/desktop.png',
'link' => array(
'controller' => 'services',
'action' => 'show',
'id' => '8',
'slug' => 'service-1'
)
),
'Thumb' => array(
'id' => '1',
'ref' => 'Service',
'ref_id' => '8',
'file' => '/img/uploads/2014/06/desktop.png',
'position' => '0',
'type' => 'pic',
'icon' => '/img/uploads/2014/06/desktop.png'
)
),
(int) 1 => array(
'Service' => array(
'id' => '9',
'name' => 'service 2',
'service-desc' => 'Deuxième test de la description d'un service qui peux s'afficher sur la page d'accueil dans le carrousel.',
'media_id' => '2',
'thumb' => '/img/uploads/2014/06/generic_office_desktop.png',
'link' => array(
'controller' => 'services',
'action' => 'show',
'id' => '9',
'slug' => 'service-2'
)
),
'Thumb' => array(
'id' => '2',
'ref' => 'Service',
'ref_id' => '9',
'file' => '/img/uploads/2014/06/generic_office_desktop.png',
'position' => '0',
'type' => 'pic',
'icon' => '/img/uploads/2014/06/generic_office_desktop.png'
)
)
)
)
Si vous avez une idée pour éviter que les div soient dupliquées, je suis preneur... Pour ma part, je sèche pour le moment
Rom
Lorsque ton 1er foreach s'occupe de la première entrée 'caroussel', le 2e parcourt les 2 entrées dans 'service', ensuite le 1er foreach s'occupe de la 2e entrée 'caroussel', et rebelotte il parcourt encore les 2 entrées de 'service'. Voilà pourquoi tout est dupliqué, enfin si ce que je dit est juste ;)
Ca devrai donner un truc de ce genre (je suis encore moins sur de mon code que de ma réponse ci-dessus :) )
<?php foreach($d'services'] as $k => $v): $v = current($v); $d = current($d); ?>
<div class="ls-slide">
<?php echo $this->Html->image($d'caroussel']$v'media_id']]'Caroussel']'file'], array('class' => 'ls-bg')); ?>
<h2 class="ls-l carrousel-title" style="top:25%;left:15%;font-size:50px"><?php echo $v'name']; ?></h2>
<p class="ls-l carrousel-desc" style="top:50%;left:25%;width:450px;font-size:18px">
<?php echo $v'service-desc']; ?>
</p>
<?php echo $this->Html->image($v'thumb'], array('class' => 'ls-l')); ?>
</div>
<?php endforeach; ?>
Salut nebjix, en effet, c'est bien le deuxième foreach qui pose problème en dupliquant les entrée précédentes...
J'ai testé ton code et cela ne fonctionne pas. En l'utilisant, je ne peux plus accéder aux valeurs de caroussel dans le tableau...
Je vais voir si je trouve une autre solution ou si quelqu'un sur le forum à une autre idée.
Merci pour ton aide ;)