Die Rotation innerhalb der Blöcke klappt gut, nur die Rotation der Blöcke mit der Urnenziehung funktioniert nicht richtig, da nur zwei Blöcke korrekt weitergeleitet werden, dann die Weiterleitung aber nicht mehr funktioniert.
Nun, wenn Sie die einzelnen Blöcke intern rotieren können, dann ist es eigentlich gar nicht mehr schwierig, auch noch zwischen den Blöcken zu rotieren. Was ich Ihrem Code auf den ersten Blick nicht entnehmen kann, ist die Kennung der ersten (fixen) Seite. Aber nehmen wir mal an, diese hieße 1BlockStart. Dann wäre das eine kleine Modifikation Ihres Codes:
$inner = array('1Block0-1Block0Erg', '1Block25-1Block25Erg', '1Block50-1Block50Erg');
shuffle($inner);
// Die fixen Seiten pro Block vorne und hinten ergänzen
$seitenVA = array_merge(array('1BlockStart'), $inner, array('1BlockDone'));
Da hätten wir also die Seite 1BlockStart fix am Anfang, dann die 3 Teile gemischt und dann 1BlockDone am Ende. Das kann man nun 5-mal machen (der Übersichtlichkeit halber hier nur 3-mal) und das wiederum in ein Array speichern. Dann hat man ein Array mit 5 Einträgen, die jeweils wieder ein Array sind. Dieses Array (also die Blöcke) mischt man nochmal.
if (!isset($seiten)) {
// Einmal
$inner = array('1Block0-1Block0Erg', '1Block25-1Block25Erg', '1Block50-1Block50Erg');
shuffle($inner);
$seitenVA = array_merge(array('1BlockStart'), $inner, array('1BlockDone'));
// Zweimal
$inner = array('2Block0-2Block0Erg', '2Block25-2Block25Erg', '2Block50-2Block50Erg');
shuffle($inner);
$seitenVB = array_merge(array('2BlockStart'), $inner, array('2BlockDone'));
// Dreimal
$inner = array('3Block0-3Block0Erg', '3Block25-3Block25Erg', '3Block50-3Block50Erg');
shuffle($inner);
$seitenVC = array_merge(array('3BlockStart'), $inner, array('3BlockDone'));
// Ein Array mit allen
$mix = array($seitenVA, $seitenVB, $seitenVC);
shuffle($mix);
// Jetzt noch die Teile hintereinander schreiben
$seiten = array_merge($mix[0], $mix[1], $mix[2]);
registerVariable($seiten);
}