Dropdown aus mysql abfrage.

Torpedos

Grünschnabel
ich versuche aus diesem code:

PHP:
<?php
/*
 *  shipping_table.php
 *	Lies alle Einstellungen/Versandkosten aus und erzeugt eine übersictliche Tabelle 
 *  Copyright 2005 by Sergej Stroh.
 *  22.12.2005
 */
  $module_smarty = new Smarty;
  $module_smarty->assign('tpl_path','templates/'.CURRENT_TEMPLATE.'/');
	
//-- DIESEN TEIL KANN MAN WEITER ERWEITERN --
	$shipping_array = array('DP','UPS','UPSE', 'AP','ZONES'); // Versandart definieren
	$shipping_names = array('Deutsche Post','United Parcel Service (UPS)','United Parcel Service Express (UPS Express)','Austrian Post','Versand nach Zonen'); // Versandartbezeichnung
	$num_of_zones = array('7','8','15','9','35'); // Anzahl der Zonen +1
	
//-- AB HIER KEINE ÄNDERUNGEN MEHR --

	// array mit allen Versandarten bilden um eine Liste zu erzeugen
	$shipping_count = count($shipping_array);
	
	// Länder array
	$countries_array = array();
	$shipping_list = array();
			
	for($w = 0; $w < $shipping_count; $w++){
		// Modul aktiv?
		$active_query = xtc_db_query("SELECT configuration_value FROM ".TABLE_CONFIGURATION." 
			WHERE configuration_key = 'MODULE_SHIPPING_$shipping_array[$w]_STATUS'");	
		$active = xtc_db_fetch_array($active_query);
	
		// active?
		if($active['configuration_value'] == 'True' || $active['configuration_value'] == 'true'){
			$module_smarty->assign('MODUL_ACTIVE', '1');
	
			// Übersicht-Liste erzeugen
			$shipping_list[] = array(
				'NAME' => $shipping_names[$w],
				'LINK' => $_SERVER['SCRIPT_NAME']);			
	
			// Bearbeitungsgebühr für diese Versandart in Euro
			// MODULE_SHIPPING_HANDLING
			$handling_query = xtc_db_query("SELECT configuration_value FROM ".TABLE_CONFIGURATION." 
				WHERE configuration_key = 'MODULE_SHIPPING_$shipping_array[$w]_HANDLING'");
			$handling = xtc_db_fetch_array($handling_query);
	
			$module_smarty->assign('COUNTRY_SHIPPING_HANDLING_TEXT', COUNTRY_SHIPPING_HANDLING_TEXT);
			
			// Versand erlaubt nur nach, 
			// MODULE_SHIPPING_ALLOWED
			$shipping_allowed_query = xtc_db_query("SELECT configuration_value FROM ".TABLE_CONFIGURATION." 
				WHERE configuration_key = 'MODULE_SHIPPING_$shipping_array[$w]_ALLOWED'");
			$shipping_allowed = xtc_db_fetch_array($shipping_allowed_query);
			$shipping_allowed_true = xtc_db_num_rows($shipping_allowed);
			
			$module_smarty->assign('COUNTRY_SHIPPING_ALLOWED_TEXT', COUNTRY_SHIPPING_ALLOWED_TEXT);

			// Array bilden
			$countries_array[$w] = array(
					'SHIPPING_NAME' => $shipping_names[$w],
					'SHIPPING_HANDLING' => $handling['configuration_value'],
					'SHIPPING_ALLOWED' => $shipping_allowed['configuration_value'],
					'TOP_LINK' => $_SERVER['SCRIPT_NAME'],
					'SHIPPING_MODUL' => ''); // countries anhängen
			
/*			NOCH NICHT FERTIG
				if($shipping_allowed_true > 0){
				// -- Länder laden --
				$countries_allowed_table = preg_split('[,]', $shipping_allowed['configuration_value']);
				$countries_allowed_count = count($countries_allowed_table);
				
				// versandkosten in diese länder filtern
			}else{
			// falls keine einzelne versandzonen vorhanden
*/			
			for($i = 1; $i < $num_of_zones[$w]; $i++){
				$countries_query = xtc_db_query("SELECT configuration_value FROM ".TABLE_CONFIGURATION." 
					WHERE configuration_key = 'MODULE_SHIPPING_$shipping_array[$w]_COUNTRIES_".$i."'");
				$countries = xtc_db_fetch_array($countries_query);
		
				$cost_query = xtc_db_query("SELECT configuration_value FROM ".TABLE_CONFIGURATION." 
					WHERE configuration_key = 'MODULE_SHIPPING_$shipping_array[$w]_COST_".$i."'");
				$cost = xtc_db_fetch_array($cost_query);
				
				// -- Länder laden --
				$countries_table = preg_split('[,]', $countries['configuration_value']);
				$countries_count = count($countries_table);
		
				for($a=0; $a<$countries_count; $a++){
					$new_countries_list .= $countries_table[$a];
					// letzte kommata entfernen und neu bilden
					if($a+1 != $countries_count) $new_countries_list .= ', ';
				}
			
				// -- Kosten und Gewicht laden ---		
				$cost_table = preg_split('/[:,]+/', $cost['configuration_value']);
				$cost_count = count($cost_table);
				
				for($b=0; $b<$cost_count; $b++){
					$new_weight_cost_list .= '<tr><td bgcolor="'.($b%4?'#eeeeee':'#ffffff').'">'. COUNTRY_COST_BY . $cost_table[$b] . COUNTRY_WEIGHT .'</td>';
					$new_weight_cost_list .= '<td bgcolor="'.($b%4?'#eeeeee':'#ffffff').'"> '. $cost_table[$b+1] . COUNTRY_COST_EUR .'</td></tr>';
				
				$b++;	
				}
				
				$countries_array[$w]['SHIPPING_MODUL'][$i] = array(
					'COUNTRIES' => $new_countries_list,
					'WEIGHT_COST' => $new_weight_cost_list);
					
				$new_countries_list = '';	// Liste leeren
				$new_weight_cost_list = '';		
				
			} // Kosten EOF	
		//} // IF allowed
		}	// IF active
	}	// FOR shipping
	
	$module_smarty->assign('shipping_modules',$countries_array);
	$module_smarty->assign('modul_list',$shipping_list);
	
	// Text
	$module_smarty->assign('COUNTRY_SHIPPING_TEXT', COUNTRY_SHIPPING);
	$module_smarty->assign('COUNTRY_COST_TEXT', COUNTRY_COST);
	
	$module_smarty->assign('language', $_SESSION['language']);
	$module_smarty->assign('COUNTRY_SHIPPING_TRUE_TEXT', COUNTRY_SHIPPING_TRUE);
	// kein cache
	$module_smarty->caching = 0;
  echo $module_smarty->fetch(CURRENT_TEMPLATE.'/module/shipping_table.html');
?>

ein dropdown der Länder zu machen die dann die richtige tabelle ausgibt zu machen.. leider scheitere ich kläglich mangels php kenntnissen.. kann mir hier jemand nachhelfen?

Lg
 
Zuletzt bearbeitet:
nachhelfen, kann ich, aber du müsstest mir ein wenig helfen den code zu verstehen.
Herkunft des Code's wäre auch interessant ( selbst geschrieben? von einer Seite/Freund? ).

hiermit meine ich... Welches Ergebnis liefert der Code derzeit? die Komplette Tabelle mit allen Ländern oder nur 1 Land?

Damit weis man einmal ob wir sortieren, filtern oder etwas tiefer gehen müssen bzw einfach nur die richtige Tabelle anzeigen.

Diese Datenbank im Hintergrund kommt mir ehrlich gesagt auch interessant vor.
gibt es hier ein Diagramm (bzw uml) ? (eine einfache Beschreibung reicht fürn Anfang auch )


Das Array ist allerdings nicht nach länder sortiert sondern nach shipping_names:

PHP:
$countries_array[$w] = array(
                    'SHIPPING_NAME' => $shipping_names[$w],
                    'SHIPPING_HANDLING' => $handling['configuration_value'],
                    'SHIPPING_ALLOWED' => $shipping_allowed['configuration_value'],
                    'TOP_LINK' => $_SERVER['SCRIPT_NAME'],
                    'SHIPPING_MODUL' => ''); // countries anhängen
Es sind zu jedem dieser shipping_names, die erlaubten Länder angehängt, wenn ich es richtig versteh
PHP:
$shipping_names = array('Deutsche Post','United Parcel Service (UPS)','United Parcel Service Express (UPS Express)','Austrian Post','Versand nach Zonen'); // Versandartbezeichnung

Die Länder sind mit "," getrennt im shipping_modul vorhanden:
PHP:
$countries_array[$w]['SHIPPING_MODUL'][$i] = array(
                    'COUNTRIES' => $new_countries_list,
                    'WEIGHT_COST' => $new_weight_cost_list);
Länder sind für jede Zone angegeben, also hast du pro shipping_name pro zone eine mit "," getrennte Liste von Ländern.

Nur willst du jetzt eine dropdownliste der Länder... (hmm.. )

PS: Ich glaube ich habe es schon ziemlich gut verstanden ;)

mfg,
Doomt
 
Hey danke für die Antwort!

Es ist eine sehr alte Erweiterung eines Xtcmodified bzw Xt:Commerce Moduls, das Modul liest die aktiven Versandmodule und die gewählten Länder aus und gibt diese Tabellarisch aus. (Einfach nur Versand nach XYZ, und die Kostentabelle in einer Wurscht.

Das Modul habe ich sehr amateurhaft angepasst damit es überhaupt mal funktioniert.

Die Ausgabe erfolgt über eine html datei

nun möchte ich die Anzeige der Daten so Darstellen dass man zunächst ein Land wählt und danach die dazugehörige Tabelle ausgegeben wird, meine Überlegung war ob der Code diesbezüglich überhaupt etwas taugt..

Mangels Wissen und Verstehen.. gelingt mir das natürlich nicht, daher habe ich das mühsam in Html geschrieben.. (Dropdown mit selects und ner Jquery für die ausgabe/verstecken der Tabelle)

Interessanter wäre es natürlich wenn dies automatisch ausgelesen werden würde anstatt nach jeder Änderung der Versandkosten auch die html datei ändern zu müssen.

Quelle ist von hier:http://www.xtc-load.de/2010/06/versandkostentabelle-fur-xtcommerce/

Lg
Torpedos
 
Zuletzt bearbeitet:
Hmm,

Okee ich bin nur etwas verwirrt, weil es mir so vorkommt als würdest du die liste umdrehen wollen.

Da das php skript, ein Array aufbaut wo die Länder pro zustellservice abgespeichert werden

vielleicht hilft soweit möglich ein screenshot der ausgabe.

Also ich glaube dass ich mich besser auskenn wenn ich die Ausgabe sehe.

Die Länder-liste könnte man mit php sicher dynamisch aufbauen, aus der Datenbank bekommt man sicher eine Liste aller Länder zusammen:
Wenn man das hier nimmt:
PHP:
$countries_query = xtc_db_query("SELECT configuration_value FROM ".TABLE_CONFIGURATION." 
                    WHERE configuration_key = 'MODULE_SHIPPING_$shipping_array[$w]_COUNTRIES_".$i."'");

und es so nochmal ausführt:
PHP:
$countries_query = xtc_db_query("SELECT distinct configuration_value FROM ".TABLE_CONFIGURATION." 
                    WHERE configuration_key like 'MODULE_SHIPPING_%_COUNTRIES_%'");

Entweder mit dem distinct oder mit einem group by arbeiten entfernt, die doppelten einträge.

in der ausgabe kann man aus diesem Array eine Liste der vorhandenen Länder generieren, welche immer durch die Datenbank auf einem Stand ist.

mfg,
Doomt

PS:Selbst verwirrt von der Struktur versuche ich zu helfen ^^
 
Zurück