Fonction s'arrêtant en cours de traitement
Posté : 11 oct. 2013, 10:55
Bonjour à toutes et à tous,
J'ai une fonction récursive servant au traitement d'un tableau et celle-ci contient quelques boucles imbriquées. Cependant, la première boucle, dès lors que je dynamise une vue, ne veut plus boucler et, pour le coup, je sèche.
Le tableau traité est le suivant :
Lorsque, dans cette vue, je mets :
En revanche, dès lors que j'essaie de dynamiser le tout en traitant mon tableau référent, la première boucle for n'itère plus.
J'ai mis ce code au sein de ma vue :
Auriez-vous une idée de mon erreur, s'il vous plait ?
Cordialement.
J'ai une fonction récursive servant au traitement d'un tableau et celle-ci contient quelques boucles imbriquées. Cependant, la première boucle, dès lors que je dynamise une vue, ne veut plus boucler et, pour le coup, je sèche.
Le tableau traité est le suivant :
$page_template = array(
'components' => array(
'entity:header' => array(
'tagName' => 'header',
'lines' => array(
'l1' => array(
'units' => array(
'u1' => array(
'size' => '40%',
'blocks' => array(
'logo' => array(
'tpl' => TPL_PATH . '/_cbm_tpl_blocks/_cbm_tpl_blocks_buttons/logo.tpl.php'
)
)
),
'u2' => array(
'blocks' => array(
'search' => array(
'tpl' => TPL_PATH . '/_cbm_tpl_blocks/_cbm_tpl_blocks_forms/search.tpl.php'
)
)
)
)
),
'l2' => array(
'units' => array(
'u1' => array(
'blocks' => array(
'menu' => array(
'tpl' => TPL_PATH . '/_cbm_tpl_blocks/_cbm_tpl_blocks_menus/menu.tpl.php'
)
)
)
)
)
)
),
'hybrid:content' => array(
'entity:leftCol' => array(
'tagName' => 'aside',
'lines' => array(
'l1' => array(
'units' => array(
'u1' => array(
'blocks' => array(
'submenu' => array(
'tpl' => TPL_PATH . '/_cbm_tpl_blocks/_cbm_tpl_blocks_menus/submenu.tpl.php'
)
)
)
)
)
)
),
'entity:mainCol' => array(
'tagName' => 'article',
'lines' => array(
'l1' => array(
'units' => array(
'u1' => array(
'blocks' => array(
'article1' => array(
'tpl' => TPL_PATH . '/_cbm_tpl_blocks/_cbm_tpl_blocks_articles/article1.tpl.php'
),
'searchMotor' => array(
'tpl' => TPL_PATH . '/_cbm_tpl_blocks/_cbm_tpl_blocks_forms/searchMotor.tpl.php'
),
'article2' => array(
'tpl' => TPL_PATH . '/_cbm_tpl_blocks/_cbm_tpl_blocks_articles/article2.tpl.php'
)
)
)
)
)
)
),
'entity:rightCol' => array(
'tagName' => 'aside',
'lines' => array(
'l1' => array(
'units' => array(
'u1' => array(
'blocks' => array(
'pub1' => array(
'tpl' => TPL_PATH . '/_cbm_tpl_blocks/_cbm_tpl_blocks_pubs/pub1.tpl.php'
),
'pub2' => array(
'tpl' => TPL_PATH . '/_cbm_tpl_blocks/_cbm_tpl_blocks_pubs/pub2.tpl.php'
)
)
)
)
)
)
)
),
'entity:footer' => array(
'tagName' => 'footer',
'lines' => array(
'l1' => array(
'units' => array(
'u1' => array(
'size' => '25%',
'blocks' => array(
'links1' => array(
'tpl' => TPL_PATH . '/_cbm_tpl_blocks/_cbm_tpl_blocks_listings/links1.tpl.php'
)
)
),
'u2' => array(
'size' => '50%',
'blocks' => array(
'links2' => array(
'tpl' => TPL_PATH . '/_cbm_tpl_blocks/_cbm_tpl_blocks_listings/links2.tpl.php'
)
)
),
'u3' => array(
'blocks' => array(
'links3' => array(
'tpl' => TPL_PATH . '/_cbm_tpl_blocks/_cbm_tpl_blocks_listings/links3.tpl.php'
)
)
)
)
)
)
)
)
);
et la fonction de traitement est la suivante :function applyTemplates($components, $tabs = "\t\t\t")
{
global $datas;
$componentsKeys = array_keys($components);
$componentsValues = array_values($components);
for($i = 0, $c = count($components); $i < $c; $i++) {
$id = substr($componentsKeys[$i], 7);
if(preg_match('/entity:/', $componentsKeys[$i])) {
$recursive = false;
}
elseif(preg_match('/hybrid:/', $componentsKeys[$i])) {
$recursive = true;
}
print "$tabs<" . (isset($componentsValues[$i]['tagName']) ? $componentsValues[$i]['tagName'] : 'section') . " id=\"$id\">\n";
if($recursive) {
print "\n";
applyTemplates($componentsValues[$i], "\t" . $tabs);
}
else {
$lines = $componentsValues[$i]['lines'];
$linesKeys = array_keys($lines);
$linesValues = array_values($lines);
for($j = 0, $d = count($lines); $j < $d; $j++) {
print "\t$tabs<section class=\"" . $linesKeys[$j] . " line\">\n";
$units = $linesValues[$j]['units'];
$unitsKeys = array_keys($units);
$unitsValues = array_values($units);
for($k = 0, $e = count($units); $k < $e; $k++) {
print "\t\t$tabs<section class=\"" . $unitsKeys[$k];
print (($k == $e - 1) ? ' lastunit">' : (' unit" style="width:' . $unitsValues[$k]['size'] . ';">')) . "\n";
$blocks = $unitsValues[$k]['blocks'];
$blocksKeys = array_keys($blocks);
$blocksValues = array_values($blocks);
for($l = 0, $f = count($blocks); $l < $f; $l++) {
$filename = substr($blocksValues[$l]['tpl'], strrpos($blocksValues[$l]['tpl'], '/') + 1);
print "\t\t\t$tabs<article class=\"block " . $blocksKeys[$l] . "\">\n";
print "<!-- $filename -->\n";
include $blocksValues[$l]['tpl'];
print "<!-- / $filename -->\n\t\t\t$tabs</article>\n";
}
print "\t\t$tabs</section>\n";
}
print "\t$tabs</section>\n";
}
}
print $tabs . "</" . (isset($componentsValues[$i]['tagName']) ? $componentsValues[$i]['tagName'] : 'section') . ">\n\n";
}
}
Comme vous pouvez le voir, il y a une include qui représente ma vue et je tentais de dynamiser mon menu (menu.tpl.php).Lorsque, dans cette vue, je mets :
<div>
<ul>
<li>Riri</li>
<li>Fifi</li>
<li>Loulou</li>
</ul>
</div>
... tout se déroule pour le mieux et la fonction arrive au bout de son traitement.En revanche, dès lors que j'essaie de dynamiser le tout en traitant mon tableau référent, la première boucle for n'itère plus.
J'ai mis ce code au sein de ma vue :
<div>
<?php
$urls = $datas['common']['menu']['url'];
$labels = $datas['common']['menu']['label'];
if(count($urls) == count($labels)) {
echo "\t", '<ul class="menu">', "\n";
for($i = 0, $c = count($urls); $i < $c; $i++) {
echo "\t\t", '<li><a href="', $urls[$i], '">', $labels[$i], '</a></li>', "\n";
}
echo "\t", '</ul>', "\n";
}
?>
</div>
Le menu s'affiche bien mais la fonction arrête son traitement juste après.Auriez-vous une idée de mon erreur, s'il vous plait ?
Cordialement.