Servus,
weil ich fast schon geknickt war, hab ich mir selbst geholfen, war so schwer dann auch nicht. Allerdings gibt es sicher schönere Lösungen, vielleicht mit den math Bedingungen aus phx. Wer weiß, habs leider nicht schnell gefunden und deshalb nicht weiter verfolgt.
1. Nummer des aktuellen Durchlaufes aus Ditto in einen Platzhalter extrahieren
Dafür muß das Ditto Snippet dran glauben. Ab Zeile ~933 beginnt die Scheife in der die Einträge verarbeitet werden. Hier wird der neue Platzhalter erstellt und gefüllt.
$resource[$x]['iteration'] = $x;
Also sieht der Fetzen dann so aus:
for ($x=$start;$x<$stop;$x++) {
$template = $ditto->template->determine($templates,$x,0,$stop,$resource[$x]["id"]);
// choose the template to use and set the code of that template to the template variable
/**
* erstelle und fülle einen neuen Platzhalter
* mit der Nummer des aktuellen Durchlaufes.
*/
$resource[$x]['iteration'] = $x;
$renderedOutput = $ditto->render($resource[$x], $template, $removeChunk, $dateSource, $dateFormat, $placeholders,$phx);
// render the output using the correct template, in the correct format and language
$modx->setPlaceholder($dittoID."item[".abs($start-$x)."]",$renderedOutput);
/*
Placeholder: item[x]
Content:
Individual items rendered output
*/
$output .= $renderedOutput;
// send the rendered output to the buffer
}
Tja, ob das nötig, unnötig, falsch oder richtig ist, ob vielleicht die Nummer der aktuellen Iteration schon woanderst herkommt oder nicht kann ich nicht sagen... un wenn schon...
Damit steht nun der Platzhalter "[+iteration+] " im Template zur Verfügung.
Sehr gut, jetzt brauchts noch die Moduloberechung mit deren Ergebnis man was mit PHx anstellen kann.
2. PHx Snippet( phx:modulo ) erstellen.
<?php
/**
* [+iteration:modulo=`n($options)`:is=`1`:then=`juhu`+]
*/
if ( ( (int)$output + 1 ) % (int)$options === 0 )
{
return 1;
}
else
{
return 0;
}
?>
Sieht vielleicht schei**e aus, kann ja noch(also niemals) um Parameterüberprüfung erweitert werden.
3. Benutzung im Template
Für n-ten Durchlauf
[+iteration:modulo=`n`:is=`1`:then=`n-te Interation`+]
z.B. [+ iteration:modulo=`4`:is=`1`:then=`<div class="clearboth"></div>` +]
Wenn als Parameter 2 übergeben wird, hat man schon sowas wie eine Imitation der "cycle" Methode von Smarty
[+iteration:modulo=`2`:is=`1`:then=`cycle_1`:else=`cycle_2`+]
Beispiel:
<div style="float:[+iteration:modulo=`2`:is=`0`:then=`left`:else=`right`+]"> links oder rechts? </div>
Konkretes Beispiel anhand meiner Anforderung für einen vierspalter
<div class="s4">
<div class="s4Innen [+iteration:modulo=`4`:is=`1`:then=`sRechts`+]">
[*content*]
</div>
</div>
[+iteration:modulo=`4`:is=`1`:then=`<div class="clearboth vertikalAbstand20"></div>`+]
Soweit funktioniert das bei mir. Wenn jemand Bock drauf hat und eine gescheidigere Lösung findet(ist die überhaupt gesucht?), wäre es nett die hier zu posten.
Danke
ciao, Stefan