Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 17. November 2016 09:45
- pWorker
- probiert CMS/ms aus
- Registriert: 20. Oktober 2016
- Beiträge: 78
[GELÖST] foreach options show selected
Hi alle,
ich hab folgendes Problem, finde aber nur php-Lösungen.
Folgender Code
<select id="{$field->idattr}" name="{$field->nameattr}">
{foreach item=row from=$users}<option value='{$row.username}'>{$row.username}</option>{/foreach}
</select>
Erstellt mir ein Dropdown Menu aus CGUsern. In der Datenbank wird der ausgewählte Wert auch übertragen, aber die Anzeige, die selected option, lässt sich nicht auf den field->value anwenden, also dass immer der Wert selected ist der auch in der DB eingetragen ist.
Hat wer `ne smarty Lösung dafür?
MfG
Beitrag geändert von pWorker (17. November 2016 09:51)
Offline
#2 17. November 2016 11:07
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.436
Re: [GELÖST] foreach options show selected
Naja Du brauchst halt eine zweite Variable mit dem Wert, der in der DB gespeichert ist.
Und dann kannst Du mit einer if-Bedingung vergleichen, ob der Wert der DB mit dem Wert aus $row.username übereinstimmt. Wenn ja, dann füge dem <option>-Element das Attribut "selected" hinzu. Das Problem ist, dass Du diese zweite Variable vermutlich nicht im Smarty-Template zur Verfügung hast. Ergo brauchst Du ein PHP-Script, welches diesen Wert aus der DB ausliest. Schau mal mit Hilfe des {get_template_vars} Plugins, welche Template-Variablen tatsächlich da sind.
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#3 17. November 2016 11:34
- pWorker
- probiert CMS/ms aus
- Registriert: 20. Oktober 2016
- Beiträge: 78
Re: [GELÖST] foreach options show selected
Hey,
Diese Variablen bekomme ich vom Feld:
$custom_fields (array) = [
.Autorenlabel (object of type: stdClass) = {
.value (string) = http://www.xxx.de/users/2//xxxtrash-mail.com
.nameattr (string) = m1_customfield[15]
.type (string) = dropdown
.idattr (string) = customfield_15
.prompt (string) = Autorenlabel
.size (integer) = 80
.max_len (integer) = 255
.delete (string) = m1_delete_customfield[15]
->options (array) = [
.{cms_module module (string) = 'CGUserDirectory' summarytemplate='benutzerauswahl'}
]
}
Es existieren mehrere $user
$users (array) = [
[0] (array) = [
.id (string) = 2
.username (string) = xxx@trash-mail.com
.createdate (string) = 2016-09-03 16:28:28
.expires (string) = 2037-01-03 00:00:00
.nonstd (string) = 0
.disabled (string) = 0
.salt (string) = dc942227abfa5258a4519eacade45cd2
.force_newpw (string) = 0
.force_chsettings (string) = 0
.detail_url (string) = http://wwwxxxx.de/users/2//xxxxmail.com
.groups (array) = [
.0 (string) = 1
]
...
...
...
[1] (array) = [
.id (string) = 1
.username (string) = xxx@gmail.com
.createdate (string) = 2016-08-29 13:12:25
.expires (string) = 2021-08-29 00:00:00
.nonstd (string) = 0
.disabled (string) = 0
.salt (string) = 409c15b1f7bf379b018db95e0c6a630a
.force_newpw (string) = 1
.force_chsettings (string) = 0
.refdate (string) = 2016-08-29 14:37:49
.detail_url (string) = http://cccc.de/users/1//cccmail.com
.groups (array) = [
.0 (string) = 1
]
Die foreach Schleife erzeugt, unabhängig von der Auswahl, immer nur einen $row user array.
$row (array) = [
.id (string) = 1
.username (string) = xxxx@gmail.com
.createdate (string) = 2016-08-29 13:12:25
.expires (string) = 2021-08-29 00:00:00
.nonstd (string) = 0
.disabled (string) = 0
.salt (string) = 409c15b1f7bf379b018db95e0c6a630a
.force_newpw (string) = 1
.force_chsettings (string) = 0
.refdate (string) = 2016-08-29 14:37:49
.detail_url (string) = http://www.xxx/users/1//xxxmail.com
.groups (array) = [
.0 (string) = 1
]
Der Autorenlabel.field->value ließe sich doch eventuell nutzen, oder? Der wird ja immer aktualisiert?
MfG
Offline
#4 17. November 2016 11:59
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.436
Re: [GELÖST] foreach options show selected
Die foreach Schleife erzeugt, unabhängig von der Auswahl, immer nur einen $row user array.
Da wird Dir im Prinzip exakt das gleiche angezeigt, wie für die Variable {$users}, weil er die ja Stück für Stück durchgeht.
Die einzige Beziehung zwischen custom_field und User, die ich anhand Deines Beispiels erkennen kann, ist nicht der Username, sondern die detail_url. D.h. es wird nicht der Username gespeichert sondern die URL zur Detail-Seite des Users. Also stimmt Dein Template nicht mit dem überein, was gespeichert wurde. Denn laut Template sollte der Username gespeichert werden.
So wie ich das jetzt verstanden habe, solltest Du das so machen können (wenn die URL gespeichert werden soll):
<select id="{$field->idattr}" name="{$field->nameattr}">
{foreach item=row from=$users}<option value='{$row.detail_url}'{if $custom_fields.Autorenlabel->value == $row.detail_url} selected="true"{/if}>{$row.username}</option>{/foreach}
</select>
Oder so wenn der Username gespeichert werden soll:
<select id="{$field->idattr}" name="{$field->nameattr}">
{foreach item=row from=$users}<option value='{$row.username}'{if $custom_fields.Autorenlabel->value == $row.username} selected="true"{/if}>{$row.username}</option>{/foreach}
</select>
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#5 17. November 2016 12:10
- pWorker
- probiert CMS/ms aus
- Registriert: 20. Oktober 2016
- Beiträge: 78
Re: [GELÖST] foreach options show selected
Hey nan,
gut erkannt ^^. Da hab ich wohl aus unterschiedlichen Zeiten geposted. Denn, ich brauche beide Werte. Ich will den Username als Option anzeigen lassen und hinterher im Template als "Überschrift", die detail url brauche ich als link value zur detail view... hatte es schon mit capture probiert, aber dann speichert er auch nur den row[1] value. Das ist schon komisch, dass die foreach Schleife bei 2 $usern nur 1 $row ausgibt, oder nicht?
Ich versuchs mal!
MfG
Offline
#6 17. November 2016 12:26
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.436
Re: [GELÖST] foreach options show selected
Das ist schon komisch, dass die foreach Schleife bei 2 $usern nur 1 $row ausgibt, oder nicht?
Die Variable $row ist eine Art Hilfsvariable und enthält immer nur einen einzigen Wert. Sie wird zur Laufzeit - also innerhalb der foreach-Schleife - immer wieder mit einem Wert aus $users überschrieben. Wenn die foreach-Schleife abgearbeitet ist, existiert die Variable $row außerhalb der foreach-Schleife immer noch. Der Gültigkeitsbereich der Hilfsvariable $row bezieht sich also nicht nur auf die foreach-Schleife sondern ab der foreach-Schleife für den Rest des gesamten Templates. Als Wert hat sie dann logischerweise immer den letzten Wert aus $users.
Kurz: $users enthält alle User, $row nur den laut foreach-Schleife aktuellen User.
Nur wenn Du innerhalb der foreach-Schleife den Wert der Variable $row ausgeben würdest (z.B. mit {$row|print_r}), nur dann würde Dir exakt das gleiche angezeigt werden, wie in der $users Variable.
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#7 17. November 2016 13:10
- pWorker
- probiert CMS/ms aus
- Registriert: 20. Oktober 2016
- Beiträge: 78
Re: [GELÖST] foreach options show selected
Hey,
{if $custom_fields.Autorenlabel.field->value == $row.username}, dann klappt`s! Danke!
Jetzt muss ich nur irgendwie die detail_url Variable mit übertragen.
MfG
Offline
#8 17. November 2016 15:23
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: [GELÖST] foreach options show selected
Die Detail-URL wird eigentlich dynamisch vom System generiert.
Eigentlich braucht es da nur die Modul action und die ID des Artikels ...
Offline
#9 17. November 2016 15:30
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: [GELÖST] foreach options show selected
Der Vollständigkeit halber - natürlich gibt's da auch etwas von Ratiopharm, ähm nee Smarty
Nennt sich html_options und ist ein in Smarty enthaltenes Plugin
www.smarty.net/docs/en/language.function.html.options.tpl
Hat auch einen Parameter für selected...
Offline
#10 17. November 2016 18:32
- pWorker
- probiert CMS/ms aus
- Registriert: 20. Oktober 2016
- Beiträge: 78
Re: [GELÖST] foreach options show selected
N`abernd,
Das mit der Modulaction verstehe ich nicht. Der Wert wird ja im Newsmodul eingetragen und soll dort im Detail-Template verarbeitet werden.
Mit den {html_options} hat alles angefangen...
{html_options values=feu_smarty::get_group_memberlist(1) output=feu_smarty::get_group_memberlist(1) selected=$field->value}
Das war der ursprüngliche Dropdown Code, allerdings mit cc Variablen, ohne detail_url.
Wenn ich dort als values=$user eintrage, dann geht der array durcheinander und ich kann auch alle anderen properties, wie Anrede oder Strasse auswählen.
Noch weniger kann ich dann die Verlinkung des Namens über CGUserDirectory im News Template steuern/ generieren.
MfG
Ich sag`s mal so, ich hätte 99% weniger Probleme, wenn man die Dropdown Listen und ähnliches vom Modul Custom Content embedden könnte und nicht nur die eingetragenen Werte. Geht das, oder ist das tatsächlich nur zum Abfragen von Werten, im Admin Backend eingestellt, zuständig?
Beitrag geändert von pWorker (17. November 2016 18:41)
Offline
Seiten: 1