Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#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.079

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.

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.079

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>

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.079

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.

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

cyberman
Moderator
Ort: Dohna / Sachsen
Registriert: 13. September 2010
Beiträge: 6.825
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 roll ...


1. Wie bekomme ich hier schnelle Hilfe?
2. HowTo: Fehlersuche bei CMS/ms
---
„First they ignore you, then they laugh at you, then they fight you, then you win.“ Mahatma Ghandi

Offline

#9 17. November 2016 15:30

cyberman
Moderator
Ort: Dohna / Sachsen
Registriert: 13. September 2010
Beiträge: 6.825
Webseite

Re: [GELÖST] foreach options show selected

Der Vollständigkeit halber - natürlich gibt's da auch etwas von Ratiopharm, ähm nee Smarty cool

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...


1. Wie bekomme ich hier schnelle Hilfe?
2. HowTo: Fehlersuche bei CMS/ms
---
„First they ignore you, then they laugh at you, then they fight you, then you win.“ Mahatma Ghandi

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