Shadowbox nicht initialisert nach AJAX refresh

DiDiJo

Erfahrenes Mitglied
Hi Leute,

ich hab nen Fotoalbum-Modul gebastelt wo Leute Ihre Bilder hochladen und bewerten können.

http://foto.wavepoint.de/

Die Bewertung findet in einem Shadowbox-Frame statt was soweit auch wunderbar funktioniert. Nun möchte, dass die Bilder-Übersicht "refresht" sobald man die Shadowbox schließt. Dafür hab ich mir auch schon ne kleine Ajax funktion gebastelt, die mir einfach meine Gallerie ausgibt.... das Ganze sieht dann inetwa so aus:

HTML-Struktur:

HTML:
[...]
<script type="text/javascript" src="js/functions.js" ></script>
<script type="text/javascript" src="shadowbox/shadowbox.js"></script>
<script type="text/javascript" src="js/swfobject.js" ></script>
<script type="text/javascript" src="js/ajax.main.js"></script>
</head>
<body>
    <div id="main">
        <div id="content_text"><strong>Wähle Deinen Favoriten!</strong> Vergrößere dafür einfach ein Bild Deiner Wahl per Mausklick und bewerte es per 5-Sterne System.</div>
        <div id="galerie">
    		<?=formatBilder(PICS_PER_SITE)?>
        </div>
    </div>
[...]
<script type="text/javascript">
	initialisiereShadowbox();
</script>
</body>
</html>

JS + AJAX Funktionen:
Code:
function refreshContent(text) {
	ajaxSuccess = schreibeContentNeu;	
	makeGETRequest('../ajax/ajax.bilder.php','action=refresh');			
}

function schreibeContentNeu(text) {	
        //initialisiereShadowbox();
	document.getElementById('galerie').innerHTML = text;
	initialisiereShadowbox();
}

function initialisiereShadowbox() {
	Shadowbox.init({    
		language:   "de-DE",
		players:    ["qt","wmp","qtwmp","img","iframe","swf","flv"],
		
		overlayColor: '#ffffff',
		overlayOpacity:0.0,
		displayNav:false,
		modal:true,
			
		//onClose: refreshContent
	});
}

ajax-bilder.php:
PHP:
if ($_REQUEST['action'] == 'refresh') {
	$meldung = formatBilder(PICS_PER_SITE);
}

echo $meldung;

noch eine PHP Funktion
PHP:
function formatBilder($anz,$admin = false) {
	$x = 1;
	$pics_per_row = PICS_PER_ROW;	
	$ausgabe = array();
	
	$start = ($_REQUEST['start']) ? $_REQUEST['start'] : '0';
	$status = ($admin) ? 'status = 0' : 'status = 1';
	
	if ($admin) {
		switch ($_SESSION['show']) {
		case 'not_activate' : $status = "status = 0"; break; 
		case 'all' : $status = "1"; break; 	
			
		default: $status = "status = 0"; break;		
		}
		
		$sort_atr = "timestamp DESC";
		
	} else {
		$status = 'status = 1';
		switch ($_SESSION['sortby']) {
			case 'timestamp' : $sort_atr = "timestamp DESC"; break; 
			case 'random' : $sort_atr = "rand() ASC"; break; 
			case 'wertung' : $sort_atr = "akt_wertung DESC"; break; 
			
			default: $sort_atr = "timestamp DESC"; break; 
		}		
	}

	$rs = mysql_query("SELECT id FROM foto_images WHERE $status");
	$anz_global = mysql_num_rows($rs);

	$sql = "SELECT * FROM foto_images WHERE $status ORDER BY $sort_atr LIMIT $start,$anz"; 

	$rs = mysql_query($sql);	
	if (mysql_num_rows($rs))  {
		while($row = mysql_fetch_array($rs)) {
			$class = ($x % $pics_per_row == 0) ? 'last' : ''; 
			$clear = ($x % $pics_per_row == 0) ? '<div class="clear"></div>' : ''; 
			$ausgabe[] = ($admin) ? formatBildBoxAdmin($row['id'],$class) : formatBildBox($row['id'],$class);		
			$ausgabe[] = $clear;
			$x++; 
		}
	} else {
		$ausgabe[] = '<strong>Keine Bilder vorhanden</strong>';	
	}
		
	$ausgabe[] = '<div class="clear"></div>';
	if ($anz_global > $anz) $ausgabe[] = '<div class="seitenWechsler">'.formatiereSeitenWechsler($anz,$anz_global).'</div>';	
	$ausgabe[] = '<input type="hidden" name="sortBy" value="'.$sortby.'" />';
		
	return implode("\r\n",$ausgabe);
}


Soweit ist alles sehr simpel und es funktioniert auch FAST alles. Ich hab jetzt aber noch 2 kleine Probleme die ich nicht gelöst kriege.

1. Wenn ich meine Shadowbox schließe und die die Gallerie "refresht" wird, stimmt die Sortierung nicht mehr, obwohl das Sortierkriterium in einer $_SESSION Variable steht. In der foramtBilder() Funktion sieht man ja genau wie ich auf die Sortierung eingehe (die aber nach einem Refresh ignoriert wird (bzw. es wird immer der DEFAULT wird in der switch Anweisung ausgeführt)).

2. Nach dem Refresh funktioniert die Shadowbox nicht mehr. Ich initialiesiere Sie zwar in meiner schreibeContentNeu() JS-Funktion neu aber der Browser interessiert sich relativ wenig dafür. Meiner Meinung nach macht dieses Verhalten nicht viel Sinn, da ich ja nur den Inhalt des galerie-DIV ändere und nicht die komplette Seite neu schreibe. Außerdem sieht man ja, dass ich versuche die Shadowbox nach dem Refresh neu zu Initialisieren. Aber aus irgendeinem Grund kalppt das nicht.

vlt kann mir ja von euch mal eben unter die Arme greifen :)
 
Zuletzt bearbeitet:
Zurück