Skip to content

Update multiselect_be-relations_no-truncate.md#428

Open
madiko wants to merge 1 commit into
FriendsOfREDAXO:mainfrom
madiko:yform_be-manager-relation_full-text_update_20260501
Open

Update multiselect_be-relations_no-truncate.md#428
madiko wants to merge 1 commit into
FriendsOfREDAXO:mainfrom
madiko:yform_be-manager-relation_full-text_update_20260501

Conversation

@madiko
Copy link
Copy Markdown
Contributor

@madiko madiko commented May 1, 2026

  • per default bleibt die Auswahl leer bis Redakteure aktiv einen Eintrag wählen (im Original wurde der erste Eintrag aus der Datenbank gesetzt, hier bessere Lösung gefunden)
  • Lösung für das Problem mit Dopplungen der Optionen gefunden und eingebaut, getestet mit Version REX 5.21.0
  • Code aufgeräumt
  • Bessere Doku im Code (Kommentare)

* per default bleibt die Auswahl leer bis Redakteure aktiv einen Eintrag wählen (bisher wurde der erste Eintrag aus der Datenbank gesetzt)
* Lösung für das Problem mit Dopplungen der Optionen gefunden und eingebaut, getestet mit Version REX 5.21.0
* Code aufgeräumt
* Bessere Doku im Code (Kommentare)
@skerbis
Copy link
Copy Markdown
Member

skerbis commented May 22, 2026

Danke fuer das Update, die Richtung ist gut (insb. gegen Truncation und fuer saubere Optionen). Beim Gegencheck sind mir 3 funktionale Punkte aufgefallen, die vor Merge korrigiert werden sollten:

  1. Wirkungslosigkeit der neuen Default-Logik
  • In der geaenderten Template-Version wird die Auswahl erst bewusst auf leer gesetzt (single/multi), danach aber unmittelbar wieder mit $this->getValue() ueberschrieben.
  • Ergebnis: Die neue Default-Logik greift faktisch nicht.
  1. Leere Option wird doppelt hinzugefuegt
  • Eine leere Option wird bereits im Single-Select-Zweig hinzugefuegt und spaeter nochmals global.
  • Ergebnis: doppelte leere Option (und bei Multi-Select ein unnoetiger leerer Eintrag).
  1. Abweichung von YForm-Core-Semantik fuer Empty-Option
  • Der PR erzwingt die leere Option unabhaengig von Konfiguration.
  • Im Core ist das Verhalten an empty_option/eoption gekoppelt.
  • Bitte entweder bewusst dokumentieren oder an die Core-Logik koppeln.

Vorschlag zur Korrektur:

  • Nur eine setSelected(...)-Zeile behalten.
  • Leere Option nur einmal und nur im Single-Select-Zweig hinzufuegen.
  • Verhalten zu empty_option explizit festlegen (kompatibel zum Core oder bewusst abweichend, dann dokumentiert).

Wenn die drei Punkte angepasst sind, sieht das fuer mich gut aus.

@skerbis
Copy link
Copy Markdown
Member

skerbis commented May 22, 2026

Hier ist ein korrigierter Codeblock fuer den Select-Teil (ohne doppelte leere Option, ohne wirkungslose Doppel-setSelected()-Logik):

$select = new rex_select();

// customise options (without truncation)
if (1 == $this->getRelationType()) {
    // multiple select
    $select->setName($this->getFieldName() . '[]');
    $select->setMultiple();
    $select->setSize($this->getRelationSize());
} else {
    // single select
    $select->setName($this->getFieldName());

    // keep default selection empty until editor actively chooses a value
    $select->addOption('', '');
}

$attributes = $this->getAttributeArray($attributes, ['required', 'readonly', 'disabled']);
$select->setAttributes($attributes);

// add options once (no duplicates)
foreach ($options as $option) {
    $select->addOption($option['name'], $option['id']);
}

// use the actual field value once
$select->setSelected($this->getValue());
echo $select->get();

Optional (falls strikt Core-kompatibel gewuenscht): die leere Option nur dann hinzufuegen, wenn empty_option aktiv ist.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants