Qu'est ce que tu penses d'une solution comme ça ?Pour chaque résultat :
est ce que la catégorie est identique à la précédente ?
- - - OUI : Combien d articles sont déjà présents sur la ligne ?
- - - - - - - : 1 ou 2 : on ajoute l'article sur la ligne
- - - - - - - : 3 : on ajoute une nouvelle ligne
- - - NON : On ajoute une nouvelle ligne
$mainareahtml = '<div class="showcase'.$jxtc.'">';
$index = 1;
$itemPages = array_chunk(array_slice($items,0,($columns*$rows*$pages)),($rows * $columns));
$itemPagesCount = count($itemPages);
$p=1;
foreach ($itemPages as $page) {
$mainareahtml .= '<div class="sframe'.$jxtc.'"';
if ($transmode == 'wind' || $transmode == 'winz' || $p > 1) {
$mainareahtml .= ' style="display:none"';
}
if ($itemPagesCount == 1) { $pageclass = 'singlepage'; } // Page class
elseif ($p == 1) { $pageclass = 'firstpage'; }
elseif ($p == $itemPagesCount) { $pageclass = 'lastpage'; }
else { $pageclass = 'centerpage'; }
$pageclass = ($p%2) ? 'oddpage '.$pageclass : 'evenpage '.$pageclass;
$mainareahtml .= '><table class="table'.$jxtc.' '.$pageclass.' page-'.$p.'" width="100%" cellpadding="0" cellspacing="0">';
$itemRows = array_chunk($page,$columns);
var_dump($itemRows);
$itemRowsCount = count($itemRows);
$r=1;
foreach ($itemRows as $row) {
if ($itemRowsCount == 1) { $rowclass = 'singlerow'; } // Row class
elseif ($r == 1) { $rowclass = 'firstrow'; }
elseif ($r == $itemRowsCount) { $rowclass = 'lastrow'; }
else { $rowclass = 'centerrow'; }
$rowclass .= ($r%2) ? ' oddrow' : ' evenrow';
$mainareahtml .= '<tr class="'.$rowclass.' row-'.$r.'">';
$itemColumnCount = count($row);
$c=1;
// ici pour test de la catégorie
// $test = array();
foreach ($row as $item) {
$itemhtml = $itemtemplate;
require JModuleHelper::getLayoutPath($module->module, 'default_parse');
if ($itemColumnCount == 1) { $colclass = 'singlecol'; } // Col class
elseif ($c == 1) { $colclass = 'firstcol'; }
elseif ($c == $itemColumnCount) { $colclass = 'lastcol'; }
else { $colclass = 'centercol'; }
$colclass .= ($c%2) ? ' oddcol' : ' evencol';
// EG : ajout de la catégorie du tour en cours pour comparaison avec la précédente et tentative infructueuse :
/*$test[$c] = $item->category_name;
if ($c>1) {
echo $c." : ";
echo "c = ".$test[$c]." et c-1 = ".$test[$c-1];
if ($test[$c] != $test[$c-1]) {
echo " -> c'est différent <br/>";
// c'est bon, ca sort bien de la boucle, mais ca n'affiche pas les catégories différentes
break 1;
}
else {
echo " -> c'est tout pareil <br/>";
}
}
*/
// c'est à ce niveau qu'on insere les produits dans les cases.......
$mainareahtml .= '<td class="'.$colclass.' col-'.$c.'" style="width:'.$cell_width.'%" >'.$itemhtml.'</td>';
$c++;
$index++;
}
$mainareahtml .='</tr>';
$r++;
}
$mainareahtml .= '</table></div>';
$p++;
}
$mainareahtml .= '</div>';<table>
<?php
// soit $items tout tes articles (sous la forme d'un array)
// $item->category_name la categorie
// $item->titre_produit; le nom du produit
$titrecategorieproduitprecedent = false;
$numeroligneproduit = 0;
$nombreditems = count($items);
$nombreditemsentableau = 0;
// pour chaque item
foreach ($items as $monitem) {
if ($titrecategorieproduitprecedent === false)
// ne s'affichera qu'au premier tour pour être sur que notre tableau commence bien par un tr
echo '<tr>';
// si l item est de la meme categorie que la precedente
if ($monitem->category_name == $titrecategorieproduitprecedent) {
// les 2 items sont de la même cat = on continue
if ($numeroligneproduit < 3) {
// il y a moins de 3 produits affiches sur la meme ligne
// on ajoute sur la même ligne
$numeroligneproduit++;
} else {
// Sinon on ferme la ligne et on en cree une nouvelle
echo '</tr>'; // on ferme la ligne
echo '<tr>';
}
} else {
// c est une autre cat : donc nouvelle ligne
echo '<tr>';
}
// on affiche nos infos produits
echo '<td>' . $item->titre_produit . '</td>';
// si y'a plus d objets a afficher on ferme la ligne ouverte
if ($nombreditems = $nombreditemsentableau)
echo '</tr>';
$titrecategorieproduitprecedent=$monitem->category_name;
$nombreditemsentableau++;
}
?>
</table>
Est ce que tu comprends bien ?foreach ($itemRows as $row) {
if ($itemRowsCount == 1) { $rowclass = 'singlerow'; } // Row class
elseif ($r == 1) { $rowclass = 'firstrow'; }
elseif ($r == $itemRowsCount) { $rowclass = 'lastrow'; }
else { $rowclass = 'centerrow'; }
$rowclass .= ($r%2) ? ' oddrow' : ' evenrow';
$mainareahtml .= '<tr class="'.$rowclass.' row-'.$r.'">'; // soit $page tout tes articles (sous la forme d'un array)
// $item->category_name la categorie
// $item->titre_produit; le nom du produit
$titrecategorieproduitprecedent = false;
$numeroligneproduit = 0;
$nombreditems = count($page);
//echo $nombreditems;
$nombreditemsentableau = 0;
// pour chaque item
foreach ($page as $item) {
$itemhtml = $itemtemplate;
require JModuleHelper::getLayoutPath($module->module, 'default_parse');
echo "COL : ".$numeroligneproduit." /// ITEMS = ".$nombreditemsentableau." /// RES = ".$res." /// CAT = ".$item->category_name." /// CAT PREC = ".$titrecategorieproduitprecedent."<br/>";
if ($titrecategorieproduitprecedent === false) {
// ne s'affichera qu'au premier tour pour être sur que notre tableau commence bien par un tr
$mainareahtml .= '<tr>';
}
// si l item est de la meme categorie que la precedente
if ($item->category_name == $titrecategorieproduitprecedent) {
// les 2 items sont de la même cat = on continue
$res = "ok";
if ($numeroligneproduit < 3) {
// il y a moins de 3 produits affiches sur la meme ligne
// on ajoute sur la même ligne
$numeroligneproduit++;
$res.= " Ok";
} else {
// Sinon on ferme la ligne et on en cree une nouvelle
$mainareahtml .= '</tr>'; // on ferme la ligne
$mainareahtml .= '<tr>';
$res.= " Ko";
}
} else {
// c est une autre cat : donc nouvelle ligne
$mainareahtml .= '<tr>';
$res = "KO";
}
// on affiche nos infos produits
$mainareahtml .= '<td style="width:'.$cell_width.'%" >'.$itemhtml.'</td>';
// si y'a plus d objets a afficher on ferme la ligne ouverte
if ($nombreditems = $nombreditemsentableau) {
$mainareahtml .= '</tr>';
}
$titrecategorieproduitprecedent=$item->category_name;
$nombreditemsentableau++;
}
je vire chèvre : j'ai mis des affichages de resultat des tests : COL : 0 /// ITEMS = 0 /// RES = /// CAT = Garden Tools /// CAT PREC =
COL : 0 /// ITEMS = 1 /// [b]RES = KO[/b] /// CAT = Garden Tools /// CAT PREC = Garden Tools
COL : 1 /// ITEMS = 2 /// RES = ok Ok /// CAT = Garden Tools /// CAT PREC = Garden Tools
COL : 2 /// ITEMS = 3 /// RES = ok Ok /// CAT = Hand Tools /// CAT PREC = Garden Tools
COL : 2 /// ITEMS = 4 /// RES = KO /// CAT = Hand Tools /// CAT PREC = Hand Tools
COL : 3 /// ITEMS = 5 /// RES = ok Ok /// CAT = Hand Tools /// CAT PREC = Hand Tools
COL : 3 /// ITEMS = 6 /// RES = ok Ko /// CAT = Hand Tools /// CAT PREC = Hand Tools
COL : 3 /// ITEMS = 7 /// RES = ok Ko /// CAT = Indoor Tools /// CAT PREC = Hand Tools
COL : 3 /// ITEMS = 8 /// RES = KO /// CAT = Outdoor Tools /// CAT PREC = Indoor Tools
COL : 3 /// ITEMS = 9 /// RES = KO /// CAT = Peintures Acryliques /// CAT PREC = Outdoor Tools
COL : 3 /// ITEMS = 10 /// RES = KO /// CAT = Peintures Acryliques /// CAT PREC = Peintures Acryliques
COL : 3 /// ITEMS = 11 /// RES = ok Ko /// CAT = Peintures Acryliques /// CAT PREC = Peintures Acryliques
COL : 3 /// ITEMS = 12 /// RES = ok Ko /// CAT = Power Tools /// CAT PREC = Peintures Acryliques
COL : 3 /// ITEMS = 13 /// RES = KO /// CAT = Power Tools /// CAT PREC = Power Tools
comme on le voit, le test renvoit KO au lieu de OK lorsque les categories sont identiques.$col = 1;
$previous_value = '';
$ncol = 3;
$mainareahtml .= '><table class="table'.$jxtc.' '.$pageclass.' page-'.$p.'" width="100%" cellpadding="0" cellspacing="0"><tr>';
foreach ($page as $item) {
$itemhtml = $itemtemplate;
require JModuleHelper::getLayoutPath($module->module, 'default_parse');
// echo 'col' . $col;
// echo 'cur' . $previous_value;
// echo 'value' . $item->category_name;
// echo '<br/>';
if ($previous_value !== '' && $previous_value != $item->category_name) {
for ($i = 0; $i <= ($ncol - $col); $i++) {
$mainareahtml .= '<td> </td>';
}
$col = 1;
$mainareahtml .= '</tr>';
}
$mainareahtml .= '<td style="width:'.$cell_width.'%" >'.$itemhtml.'</td>';
if ($col == $ncol) {
$previous_value='';
$col = 1;
$mainareahtml .= '</tr><tr>';
}
else {
$col++;
$previous_value = $item->category_name;
}
}
// finalisation du tableau
if ($col != $ncol + 1) {
for ($i = 0; $i <= ($ncol - $col); $i++) {
$mainareahtml .= '<td> </td>';
}
$mainareahtml .= '</tr>';
}
$mainareahtml .= '</table>';