Mehrfachauswahl im Inputbereich eines Moduls
-
- Beiträge: 174
- Registriert: Mi 22. Okt 2003, 11:08
- Kontaktdaten:
Mehrfachauswahl im Inputbereich eines Moduls
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
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
-
- Beiträge: 174
- Registriert: Mi 22. Okt 2003, 11:08
- Kontaktdaten:
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! )
Vielleicht kann mir ja jemand helfen,...
vielen Dank im Voraus!
Black Widow
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! )
Vielleicht kann mir ja jemand helfen,...
vielen Dank im Voraus!
Black Widow
-
- Beiträge: 174
- Registriert: Mi 22. Okt 2003, 11:08
- Kontaktdaten:
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
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
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
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
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
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
-
- Beiträge: 174
- Registriert: Mi 22. Okt 2003, 11:08
- Kontaktdaten:
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
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
-
- Beiträge: 174
- Registriert: Mi 22. Okt 2003, 11:08
- Kontaktdaten:
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:
Hidden-Input-Element definiert, dass die Daten letztendlich übergibt:
JavaScript-Funktion geschrieben:
Somit enthält CMS_VALUE[1] dann alle selektierten Werte durch _ separiert!
Bis denn,
Black Widow
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();">
Code: Alles auswählen
<input type="hidden" name="CMS_VAR[1]" value="" />
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;
}
Bis denn,
Black Widow
-
- Beiträge: 174
- Registriert: Mi 22. Okt 2003, 11:08
- Kontaktdaten:
Hi!
Hab noch nen kleinen Fehler gefunden!
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:
Gruß,
Black Widow
Hab noch nen kleinen Fehler gefunden!
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]" />
Black Widow
Mehrfachauswahl Modul Input mit JavaScript
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)
Viel Spaß!
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>";
}
?>
Re: Mehrfachauswahl im Inputbereich eines Moduls
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)
Ich vermute, dass das Array nicht richtig gefüllt wird unter
Nur weiß ich nicht, wie ich es umschreiben muss (falls es der Fehler ist). Vielleicht kann mir jemand dabei helfen !?
Danke vorab!
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";
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")
);
}
Danke vorab!
Benki