Mehrfachauswahl im Inputbereich eines Moduls

Gesperrt
Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Mehrfachauswahl im Inputbereich eines Moduls

Beitrag von Black Widow » Do 27. Nov 2003, 16:21

Hallöchen!

Ich brauch mal wieder nen kleinen Denkanstoß!
Ich möchte im Input-Bereich eines Moduls ne Mehrfachauswahl bereitstellen. Ist ja auch kein Thema ... nur hab ich das Problem, dass ich nicht alle Werte komme! Ich kann ja nur die CMS_VAR's benutzen, die dann ja auch einfach wieder ersetzt werden und da hab ich ja keine Chance, die als Array zu benutzen ...

Vielen Dank im Voraus,
Gruß,
Black Widow

Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Beitrag von Black Widow » Fr 28. Nov 2003, 13:55

Hat keiner ne Idee?

Also das Problem liegt ja schon in der Datenbank, weil dort nur ein Wert pro Übergabeparameter gespeichert wird. Wenn dieser aber mehrmals auftaucht (so wie bei der Mehrfachauswahl) wird dies nicht berücksichtigt!
Also müsste der Punkt, an dem die CMS_VARiablen in die Datenbank geschrieben werden, vielleicht so angepaßt werden, dass zunächst überprüft wird, ob es sich um ein Array handelt, und wenn, dass dann auch alle Werte in die DB geschrieben werden!
Ich hätte ja schon mal geschaut ob ich das hinbekommen, aber ich weiß nicht mal wo das in Contenido geschieht! (Bin in der Contenidostruktur (also in der Programmierstruktur) immer noch nicht ganz fit! :lol:)

Vielleicht kann mir ja jemand helfen,...
vielen Dank im Voraus!

Black Widow

Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Beitrag von Black Widow » Do 4. Dez 2003, 10:50

Hab immer noch keine Lösung gefunden!

Kann mir denn jemand sagen, wo diese Parameter aus dem Inputformular in die DB geschrieben werden? (oder noch besser ne Lösung :wink:)

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 4. Dez 2003, 14:17

Ich würde es mit ein bisschen JavaScript versuchen. Du speicherst die Werte einer Mehrfachauswahl mit einem Trennzeichen in einem String in einem CMS_VALUE.

Wenn Du die Informationen wieder abfragst, kannst Du mit der JS-Funktion split() (glaube ich) den String wieder auseinandernehmen und die Werte ggf. in einer Abfrage verwenden (z.B. beim "IN"-SQL-Operator, ist - glaube ich - SQL-Standard).

Wäre das was?

Gruß
HerrB

agon
Beiträge: 83
Registriert: Mi 29. Okt 2003, 16:01
Kontaktdaten:

Beitrag von agon » Do 4. Dez 2003, 16:50

Hallo,

das Problem dürfte nicht sein, die Variablen aus einem CMS_VALUE auszulesen und in ein Array zu verwandeln, wenn sie z.B. kommasepariert dort drin liegen (dazu brauche ich auch kein JS), sondern den Array, den mir das Formular zurückgibt, in einen CMS_VALUE zu bekommen.
Mir fällt im Moment nur ein, die Mehrfachauswahl nicht direkt in einen CMS_VALUE zu schreiben, sondern in eine Array-Variable, die übergeben und beim Wiederaufruf des Formulars abgefragt wird, um dann daraus einen kommaseparierten String zu machen, der dann per separatem SQL-Befehl in die Datenbank als CMS_VALUE eingetragen wird, um im Output entsprechend ausgelesen zu werden.

Ziemlich kompliziert!?
Andreas

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 4. Dez 2003, 18:37

Genau das meinte ich - allerdings brauchst Du es nicht unbedingt per besonderem SQL-Befehl machen, sondern ein onChange-Event ruft JS auf, welches in ein Hidden-Feld (dessen Inhalt in CMS_VALUE oder bei Dir CMS_VALUE gespeichert wird) die Komma-separierten Einträge ablegt...

Keine Ahnung, ob das funktioniert (jetzt von der JS-Seite).

Ich halte halt JS für eine einfache Lösung. Ne' andere als Deine oder meine fällt mir gerade nicht ein.

Gruß
HerrB

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Do 4. Dez 2003, 21:46

das mit hidden field funktioniert nicht... zumindestens bei mir...
besser ein input field mit style=\"visibility: hidden;\"
sonst braucht man fast immer ein onsubmitscript...

Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Beitrag von Black Widow » Fr 5. Dez 2003, 11:36

Oh, danke für die zahlreichen Antworten!

Muss mal checken, was davon möglich ist!
Das Problem ist, wie von emergence angesprochen, das man wohl nen onsubmit bräuchte. Aber an das <form>-Tag komme ich ja nicht ran (und will es auch nicht für den einen Fall verändern), das liegt ja schon im template!
Aber ich glaube ... mir fällt da was ein ... JS ist auf jeden Fall schon mal gut!

DANKE,
ich meld mich deswegen nochmal ...

Black Widow

Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Beitrag von Black Widow » Mi 17. Dez 2003, 17:03

Hi Leute!

So ... bin erst jetzt dazu gekommen mich diesem Problem nochmal anzunehmen! :)
Hab es jetzt wie folgt gelöst (für den Fall, dass noch jemand eine Mehrfachauswahl im Input-Bereich seines Moduls nutzen möchte ...):


Mehrfachauswahl definiert:

Code: Alles auswählen

<select name="multiSelect" size="10" multiple="multiple" onchange="javascript:return registerValues();">
Hidden-Input-Element definiert, dass die Daten letztendlich übergibt:

Code: Alles auswählen

<input type="hidden" name="CMS_VAR[1]" value="" />
JavaScript-Funktion geschrieben:

Code: Alles auswählen

	function registerValues()
	{
		selectedVals = ''
		for(i = 0; i < document.forms['tplcfgform'].elements['multiSelect'].length; i++)
			if(document.forms['tplcfgform'].elements['multiSelect'].options[i].selected == true)
				selectedVals += document.forms['tplcfgform'].elements['multiSelect'].options[i].value + "_";
		
		document.forms['tplcfgform'].elements['CMS_VAR[1]'].value = selectedVals.substr(0,selectedVals.length-1);
		return false;
	}
Somit enthält CMS_VALUE[1] dann alle selektierten Werte durch _ separiert!

Bis denn,
Black Widow

Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Beitrag von Black Widow » Do 18. Dez 2003, 13:03

Hi!

Hab noch nen kleinen Fehler gefunden! :wink:
Dem Hidden-Input-Element muss natürlich sein ursprünglicher Wert zugewiesen werden, sonst geht der Wert verloren, wenn man erneut in die Konfiguration geht und sie bestätigt, ohne die Mehrfachauswahl zu ändern!

Somit sieht es dann wie folgt aus:

Code: Alles auswählen

<input type="hidden" name="CMS_VAR[1]" value="CMS_VALUE[1]" />
Gruß,
Black Widow

goach
Beiträge: 15
Registriert: Mo 16. Aug 2004, 19:05
Wohnort: Wien
Kontaktdaten:

Mehrfachauswahl Modul Input mit JavaScript

Beitrag von goach » Fr 11. Mär 2005, 16:01

Hab ein bisschen im Code von Black Widow geändert, da das onchange-Event bei der Mehrfachauswahl nicht immer auslöst etc.

Anbei Beispielcode für Mehrfachauswahl von Kategorien (getestet auf 4.4.5)

Code: Alles auswählen

/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname   :     Kategorieauswahl Multiselect
* Author      :     Gerhard Müller
* Copyright   :     MKO
* Created     :     12.3.2005
* Version     :     $Id$
* Modified    :     $Date$
************************************************/

?>
<script language="JavaScript" type="text/JavaScript">
<!--
function getMultiSelVals(el) 
{ // return multiselect array as string
	if ( !el ) { alert("Bitte das Multiselect Element angeben!");return }
	selectedVals = '' 
	sep='|'
	for(i = 0; i < el.length; i++) 
		if ( el.options[i].selected == true ) 
			selectedVals += (selectedVals>''? sep: '') + el.options[i].value; 
	return (selectedVals); 
}
-->
</script>

<table cellspacing="0" cellpadding="0" cellpadding="0">
	<td>Kategorieauswahl (Multiselect):</td>

<?php

	$sql = "SELECT
				 A.idcat,
				 C.name
			FROM
				 ".$cfg["tab"]["cat_tree"]." AS A,
				 ".$cfg["tab"]["cat"]." AS B,
				 ".$cfg["tab"]["cat_lang"]." AS C
			WHERE
				 A.idcat     = B.idcat AND 
				 B.idcat     = C.idcat AND 
				 A.level     = '1' 
			ORDER BY
				 A.idtree";
	
	$db = new DB_Contenido;
	$db->query($sql);
	$size = max(1,$db->num_rows());

	echo '<td style="padding: 10px;">';
	echo '<input name="CMS_VAR[6]" type="hidden" value="CMS_VALUE[6]" />';
	echo '<select name="multisel" size="'.$size.'" 
			onBlur="javascript:this.form.elements[\'CMS_VAR[6]\'].value=getMultiSelVals(this);" multiple>';
	
	$selvals=explode('|',"CMS_VALUE[6]");
	while ( $db->next_record() ) 
	{
		echo sprintf ( '<option value="%s" %s>%s</option>', 
								$db->f("idcat"),
								( in_array ( $db->f("idcat"), $selvals )? 'selected="selected"': '' ),
								$db->f("name")
						);
	}
	echo '</select></td></tr>';
	echo '</table>';

/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     Kategorieauswahl Multiselect
* Author      :     Gerhard Müller
* Copyright   :     MKO
* Created     :     12.3.2005
* Version     :     $Id$
* Modified    :     $Date$
************************************************/

<?php

	$selvals=explode('|',"CMS_VALUE[6]");

	foreach ( $selvals as $k=>$v )
	{
		echo "Auswahl Nr. $k: $v<br>";
	}

?>
Viel Spaß!

Benki
Beiträge: 93
Registriert: Mi 28. Sep 2005, 13:04
Kontaktdaten:

Re: Mehrfachauswahl im Inputbereich eines Moduls

Beitrag von Benki » Mo 6. Apr 2009, 16:08

Hallo,

vielleicht kann mir jemand helfen. Ich denke dies ist das richtige Modul für mich. Ich möchte in der Artikelkonfiguration einem Artikel mehrere Dateien zuordnen. Hintergrund ist, das für eine Produktdetailansicht mehrer Datenblätter hinterlegt werden müssen. Es soll hier einfach nur das Verzeichnis /upload/datenblaetter/ ausgelesen werden, die PDF-Dateien in der Liste angezeigt und dann ausgewählt werden. Vielleicht gibt es noch eine andere, besser Lösung als diese Modul?

Ich habe die SQL-Abfrage so umgeschrieben: (Direkt in der SQL-DB bekomme ich dadurch die richtigen Werte zurück geliefert)

Code: Alles auswählen

       $sql = "SELECT
                 filename
             FROM
                 ".$cfg["tab"]["upl"].",
             WHERE
                 dirname = 'datenblaetter/'
             ORDER BY
                 filename";
Ich vermute, dass das Array nicht richtig gefüllt wird unter

Code: Alles auswählen

       while ( $db->next_record() )
       {
          echo sprintf ( '<option value="%s" %s>%s</option>',
                            $db->f("idcat"),
                            ( in_array ( $db->f("idcat"), $selvals )? 'selected="selected"': '' ),
                            $db->f("name")
                      );
       }
Nur weiß ich nicht, wie ich es umschreiben muss (falls es der Fehler ist). Vielleicht kann mir jemand dabei helfen !?

Danke vorab!
Benki

Gesperrt