[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Problem mit SelectField in rex_form - DB Werte werden nicht angezeigt. - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
oliwan
Beiträge: 83
Registriert: 21. Jan 2010, 22:35
Wohnort: Hamm

Problem mit SelectField in rex_form - DB Werte werden nicht angezeigt.

20. Jan 2018, 18:47

Hey an alle!

Ich habe in einem rex_form folgenden Code für das Nutzen eines Selectfeldes

Code: Alles auswählen

        $field = $form->addSelectField('pk','pk',['class'=>'form-control selectpicker']); // die Klasse selectpicker aktiviert den Selectpicker von Bootstrap
	$field->setAttribute('multiple', 'multiple');
	$field->setAttribute("style","width:10em;");
	$field->setLabel("Preiskategorie");
	$select = $field->getSelect();
	$select->addOptions(['PK1','PK2','PK3','PK4','PK5'], true);
Beim Erfassen klappt alles super - die Daten landen top in der Datebnak als Pipegetrenntes Array - alles gut.

Nur wenn ich nun einen Datensatz editiere, werden mir die gespeicherten Daten in der Selectbox nicht angezeigt ?! Kann mir jemand
nen Tipp geben, was ich am Code falsch habe?!

THX in dolby

Oliwan
may the source be with you

oliwan
Beiträge: 83
Registriert: 21. Jan 2010, 22:35
Wohnort: Hamm

Re: Problem mit SelectField in rex_form - DB Werte werden nicht angezeigt.

21. Jan 2018, 17:26

... echt niemand kann mir helfen :?
Was macht ein Select Field im rex_form für einen Sinn, wenn die Verknüpfung mit nem Datenbankfeld nicht wieder geladen wird ?

Hier mein weiterer Code zur Auswahl einer Bilderkategorie:

Code: Alles auswählen

$field = $form->addSelectField('bilder_cat_id','bilder_cat_id',['class'=>'form-control selectpicker']); 
$field->setLabel("Bilderkategorie");
$select = $field->getSelect();
$select->setSize(sizeof(rex_media_category::getRootCategories()));
foreach (rex_media_category::getRootCategories() as $category) {
	$select->addOption($category->getName(),$category->getId());
}
ID landet nach Auswahl und KLick auf [Speichern] wie erwartet in der Datenbank - nur wenn man später den Datensatz "editiert" wird
die Kategorie nicht korrekt "selected" ?!
really need help

Oliwan
may the source be with you

Benutzeravatar
runstop64
Beiträge: 369
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: Problem mit SelectField in rex_form - DB Werte werden nicht angezeigt.

21. Jan 2018, 22:10

Hi,

du musst dich selbst um das setzen der Auswahl kümmern und die Werte mit $select->setSelected() übergeben:
https://github.com/redaxo/redaxo/blob/m ... #L117-L126
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

oliwan
Beiträge: 83
Registriert: 21. Jan 2010, 22:35
Wohnort: Hamm

Re: Problem mit SelectField in rex_form - DB Werte werden nicht angezeigt.

22. Jan 2018, 14:37

Hallo Daniel!
Vielen dank für deinen Hinweis. Ich hoffe es ist Ok, dass ich hier nochmal nachfrage - nur dass ich es richtig verstehe:

1) Ich gehe in den Ordner Core in meiner Installation, suche die von dir verlinkte Klasse und ergänze die Methode setSelected - da die aktuell nicht enthalten ist

2) Ich rufe die Methode schlicht mit $select->getSelected('bilderCatId') auf

ODER

Ich muss nix ändern sondern nur "Code einbauen" der sowas macht wie

Code: Alles auswählen

$select->getSelected(form->getDatabaseFieldContent('bilderCatId'));

Code: Alles auswählen

$select->getSelected('bilderCatId');
geht nicht

Code: Alles auswählen

	foreach($form->sql as $row){
	$select->setSelected($row-getValue("bilderCatId"));					
	}
wirft nen Fehler Cannot access protected property rex_form::$SQL
:?

Ich habe gerade überhaupt keine Idee, wie ich hier überhaupt an den Inhalt eines Datenbankfeldes im Rahmen meines Codes komme, da der Inhalt doch vom rex_form erst dynamisch gefüllt wird?! Wie soll ich also das selected selber machen, wenn ich gar nicht auf den Inhalt der DB zugreifen kann?

-> eigene Klasse von rex_form ableiten und die Methoden überschreiben?!

Hope for a hint
Oliwan
may the source be with you

Benutzeravatar
runstop64
Beiträge: 369
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: Problem mit SelectField in rex_form - DB Werte werden nicht angezeigt.

22. Jan 2018, 19:34

Hi Oliwan,

kannst du bitte mal den kompletten Formular-Code posten?
Das von mir beschriebene Vorgehen stimmt für rex_form nicht, daher muss dein Problem woanders liegen.
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

oliwan
Beiträge: 83
Registriert: 21. Jan 2010, 22:35
Wohnort: Hamm

Re: Problem mit SelectField in rex_form - DB Werte werden nicht angezeigt.

22. Jan 2018, 21:19

Na klar!

Anbei:

Code: Alles auswählen


//------------------------------> Eintragsliste
if ($func == '' && $thiscat!="uebersicht") {
    echo rex_api_function::getMessage();

  
    $title = rex_i18n::msg('theater_list_caption');

    $list = rex_list::factory('SELECT `id`,`jahr`,`titel` FROM ' . rex::getTable($table) . ' WHERE `kategorie` = "' . $thiscat . '" ORDER BY Jahr DESC');
    $list->addTableAttribute('class', 'table-striped');

    //Icon für jede Zeile
	$tdIcon = '<i class="rex-icon fa-ticket"></i>';
	// + Zeichen
    $thIcon = '<a href="' . $list->getUrl(['func' => 'add']) . '"><i class="rex-icon rex-icon-add-metainfo"></i></a>';
	
    $list->addColumn($thIcon, $tdIcon, 0, ['<th class="rex-table-icon">###VALUE###</th>', '<td class="rex-table-icon">###VALUE###</td>']);
    $list->setColumnParams($thIcon, ['func' => 'edit', 'id' => '###id###']);

    $list->removeColumn('id');

    $list->setColumnLabel('id', "Id");
    $list->setColumnLayout('id', ['<th class="rex-table-id">###VALUE###</th>', '<td class="rex-table-id" data-title="Id">###VALUE###</td>']);

    $list->setColumnLabel('jahr', "Jahr");
    $list->setColumnParams('jahr', ['func' => 'edit', 'id' => '###id###']);
	
	$list->setColumnLabel('titel', "Titel");
    $list->setColumnParams('titel', ['func' => 'edit', 'id' => '###id###']);
    
	$list->addColumn(rex_i18n::msg('minfo_field_label_functions'), '<i class="rex-icon rex-icon-edit"></i> ' . rex_i18n::msg('edit'));
    $list->setColumnLayout(rex_i18n::msg('minfo_field_label_functions'), ['<th class="rex-table-action" colspan="2">###VALUE###</th>', '<td class="rex-table-action">###VALUE###</td>']);
    $list->setColumnParams(rex_i18n::msg('minfo_field_label_functions'), ['func' => 'edit', 'id' => '###id###']);
    $list->addLinkAttribute(rex_i18n::msg('minfo_field_label_functions'), 'class', 'rex-edit');

    
    $list->setNoRowsMessage(rex_i18n::msg('theater_not_found'));

    $content .= $list->get();

    $fragment = new rex_fragment();
    $fragment->setVar('title', $title);


    $fragment->setVar('content', $content, false);
    $content = $fragment->parse('core/page/section.php');

}
//------------------------------> Formular
elseif ($func == 'edit' || $func == 'add') {
    $title = rex_i18n::msg('theater_bearbeiten');

	$form = rex_form::factory(rex::getTable($table), 'Theaterstuecke', 'id=' . rex_request('id', 'int', 0),'post',true);	
	
	$form->addParam('id', rex_request('id', 'int', 0));
	
	if ($func=='add'){
	$field = $form->addHiddenField('kategorie',$value=$thiscat);
	}else{
		$field = $form->addHiddenField('kategorie');		
	}
		
	$field = $form->addTextField('jahr');
	$field->setAttribute("style","width:10em;");
	$field->setLabel("Jahr");
	
	
	$field = $form->addTextField('titel');
	$field->setLabel("Titel");

	
	$field = $form->addRadioField ('wosichtbar');
	$field->setLabel('Sichtbar unter:');
	$field->addOption ('Programm', 1);
	$field->addOption ('Archiv', 2);

	$field = $form->addTextAreaField('teaser');
	$field->setLabel("Teaser");
	
	$field = $form->addTextAreaField('beschreibung');
	$field->setLabel("Beschreibung");
	
	$field = $form->addMediaField('hauptbild');
	$field->setLabel("Bild");
	
	$field = $form->addSelectField('bilderCatId','',['class'=>'form-control selectpicker']); 
	$field->setLabel("Bilderkategorie");
	$select = $field->getSelect();
	$select->setSize(sizeof(rex_media_category::getRootCategories()));
	foreach (rex_media_category::getRootCategories() as $category) {
		$select->addOption($category->getName(),$category->getId());
	}
		

	$field = $form->addRawField('<script>var amountValidTermine=0;function hideempty(){for (loop=1;loop<=25;loop++){if (document.getElementById("rex-theaterstuecke-theaterstuecke-termine-termin"+loop+"-termin").value==""){$("#rex-termin"+loop).toggle();}else{amountValidTermine++;}}}function plus(){amountValidTermine++;$("#rex-termin"+amountValidTermine).toggle("slow", function() {});if (amountValidTermine>25){$("#plus").toggle();}}$( "#plus" ).click(function() { plus();}); $( "#showTermine" ).click(function() { hideempty();var oldText = $("#showTermine").text();var newText = $("#showTermine").attr("data-text");if ($("#showTermine").text(oldText)) {$("#showTermine").text(newText); } else {$("#showTermine").text(oldText); }	 $("#showTermine").attr("data-text",oldText); $( "#termine" ).toggle("slow", function() {});});</script>');
  
	$field = $form->addRawField('<div style="cursor:pointer; color:teal; font-weight:bold;" data-text="Termine ausblenden" id="showTermine">Termine anzeigen</div>');
	$field = $form->addRawField('<div id ="termine" style="display:none;">');
	
	$fieldContainer = $form->addContainerField('termine');
	for ($i=1;$i<=25;$i++){
	
	// HTML Prefix für den Container
	$fieldContainer->setPrefix('<fieldset id="termin"'.$i.'" class="termin">');
	// HTML Sufix für den Container
	$fieldContainer->setSuffix('</fieldset>');

	$f = $fieldContainer->addGroupedField('termin'.$i, 'text', 'termin','',['style'=>'width:20em;']);
	$f->setLabel('Datum');

	$f = $fieldContainer->addGroupedField('termin'.$i, 'text', 'uhrzeit','',['style'=>'width:20em;']);
	$f->setLabel('Uhrzeit');

	$f = $fieldContainer->addGroupedField('termin'.$i, 'select', 'pk','',['class'=>'selectpicker','multiple'=>'multiple']);

	$f->setLabel('verfügbare Preiskategorien');
	$select = $f->getSelect();
	$select->addOptions(['PK1','PK2','PK3','PK4','PK5'], true);

	}
	$field = $form->addRawField('<div id ="plus" style="cursor:pointer;color:teal; font-weight:bold;">+Termin hinzufügen</div>');
	$field = $form->addRawField('</div>');

    $content .= $form->get();

    $fragment = new rex_fragment();
    $fragment->setVar('class', 'edit', false);
    $fragment->setVar('title', $title);
    $fragment->setVar('body', $content, false);
    $content = $fragment->parse('core/page/section.php');
}
}

echo $content;

Oliwan
may the source be with you

oliwan
Beiträge: 83
Registriert: 21. Jan 2010, 22:35
Wohnort: Hamm

Re: Problem mit SelectField in rex_form - DB Werte werden nicht angezeigt.

23. Jan 2018, 10:44

Hallo Daniel!

ich habe nun mal den Code in der Art angepasst, dass ich das Feld so initialisiere:

Code: Alles auswählen

	$field = $form->addSelectField('bilderCatId');
	$field->setAttribute("class","form-control selectpicker");
	$field->setLabel("Bilderkategorie");
Und siehe da, wenn man es so macht, funktioniert auch die Anzeige des Datenbankwertes!
Irgendwas scheint also mit der Initialisierung auf diese Art

Code: Alles auswählen

$field = $form->addSelectField('bilderCatId','',['class'=>'form-control selectpicker']); 
falsch zu laufen ?!

Vielen Danke für deine Hilfsbereitschaft - nun läufts ja :D
Oilwan
may the source be with you

Benutzeravatar
runstop64
Beiträge: 369
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: Problem mit SelectField in rex_form - DB Werte werden nicht angezeigt.

23. Jan 2018, 12:30

Hi,

ja, der zweite Parameter definiert, welche Werte das Feld anzeigt. Er muss null sein, damit die Werte aus der Datenbank genommen werden.

Mit

Code: Alles auswählen

$field = $form->addSelectField('bilderCatId',null,['class'=>'form-control selectpicker']); 
sollte es also gehen.
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

oliwan
Beiträge: 83
Registriert: 21. Jan 2010, 22:35
Wohnort: Hamm

Re: Problem mit SelectField in rex_form - DB Werte werden nicht angezeigt.

24. Jan 2018, 09:34

Na klar - das ist er wieder, Wald den man wegen der vielen Bäume nicht sieht '' ist nicht null :roll:

Vielen Dank dir!

Oliwan
may the source be with you

Zurück zu „AddOns / Packages [R5]“