Filter Checkbox JA/Nein im Frontend und zugehörige URLs
Closed this issue · 10 comments
Checklist before I submit this issue report
I confirm that:
- I have tested this with the latest version available
- I have read documentation @ http://metamodels.readthedocs.org/en/ or http://metamodels.readthedocs.org/de/
- I have checked the Contao community forums for references https://community.contao.org/
- I have checked existing issues for duplicates and found none @ https://github.com/MetaModels/attribute_checkbox/issues?q=is%3Aissue
My environment is:
(Please fill in the actual values from your environment)
| Key | Value | Comments |
|---|---|---|
| PHP version: | 7.0 | |
| Contao version: | 3.5.24 | |
| MetaModels version: | 2.0 | |
| Installation via composer | yes | |
| Installed MetaModels packages | keine, nur letzte Korrektur für die Checkboxanzeige im Frontend |
Issue description
Es geht um die Anzeige der Checkbox, die wie hier beschrieben eingerichtet wurde:
Die Box selber sieht nun so aus:
(CSS ist noch nicht ganz fertig, also bitte nicht an der doppelten Überschrift stören.)
Im Gegensatz zu allen anderen Boxen zeigt sich ein "-" anstatt des sonst üblichen Textes "Nicht filtern".
Schöner fände ich auch die umgekehrte Anordnung von erst "Ja" und dann "Nein", wie es beim Catalog war. Gut, vielleicht reine Ansichtssache. Die Worte habe ich selber in Großschreibung geändert. Standardmäßig sind sie klein geschrieben. Was nun wirklich richtig ist, kann ich gar nicht sagen, aber wenn "Nicht filtern" groß beginnt, sollten auch "Ja" und "Nein" groß geschrieben werden, denke ich. So ist es zumindest einheitlich.
Describe the behaviour of the application
Schränkt der Nutzer nun die Liste mit Hilfe der Checkbox ein, so wird eine entsprechende URL erzeugt. Sie sieht folgendermaßen aus:
https://www.exapmle.com/seitenname/attributname/-1.html für "nein" (keine Nutzung von auto_item, sondern den Attributsnamen habe ich dort vermerkt, wo sonst das "auto_item" steht - Sinn: Nachbildung der Catalog URLs - Screens sind in verlinktem Ticket zur Anzeige der Box)
oder
https://www.exapmle.com/seitenname/attributname/1.html für "ja"
Describe the expected behaviour of the application
Im Sinne sprechender URLs wäre es gut, wenn diese folgendermaßen aussehen würden:
https://www.exapmle.com/seitenname/attributname/nein.html für "nein"
https://www.exapmle.com/seitenname/attributname/ja.html für "ja"
oder auch
https://www.exapmle.com/seitenname/attributname/no.html für "nein"
https://www.exapmle.com/seitenname/attributname/yes.html für "ja"
Für Umsteiger vom Catalog wäre am schönsten,
https://www.exapmle.com/seitenname/attributname/false.html für "nein"
https://www.exapmle.com/seitenname/attributname/true.html für "ja"
denn so war es dort. Dann müsste man keine URLs umschreiben, um die Links zu behalten. Allerdings finde ich Sprachenwechsel in der URL ja auch nicht so schön.
Die Entscheidung wie nun genau, bleibt natürlich euch überlassen.
zum Thema "doppelte Legenden/Überschriften": MetaModels/core#374 (comment)
@Shania567 du kannst mal testen: Checbox.php
/**
* {@inheritdoc}
*
* @SuppressWarnings(PHPMD.Superglobals)
*/
public function getParameterFilterWidgets(
$arrIds,
$arrFilterUrl,
$arrJumpTo,
FrontendFilterOptions $objFrontendFilterOptions
) {
$objAttribute = $this->getMetaModel()->getAttributeById($this->get('attr_id'));
$arrWidget = array
(
'label' => $this->prepareLabel($objAttribute),
'inputType' => ($this->get('ynmode') == 'radio' ? 'radio' : 'checkbox'),
'eval' => array(
'colname' => $objAttribute->getColName(),
'urlparam' => $this->getParamName(),
'ynmode' => $this->get('ynmode'),
'ynfield' => $this->get('ynfield'),
'template' => $this->get('template'),
'includeBlankOption' => ($this->get('ynmode') == 'radio' && $this->get('blankoption') ? true : false),
)
);
if ($this->get('ynmode') == 'radio') {
$arrWidget['options'] = array
(
1 => '1',
0 => '-1'
);
$arrWidget['reference'] = array
(
'1' => $GLOBALS['TL_LANG']['MSC']['yes'],
'-1' => $GLOBALS['TL_LANG']['MSC']['no']
);
if ($arrWidget['eval']['includeBlankOption']) {
$arrWidget['eval']['blankOptionLabel'] = $GLOBALS['TL_LANG']['metamodels_frontendfilter']['do_not_filter'];
}
}
$this->addFilterParam();
return array
(
$this->getParamName() => $this->prepareFrontendFilterWidget(
$arrWidget,
$arrFilterUrl,
$arrJumpTo,
$objFrontendFilterOptions
)
);
}
damit sollte geändert sein:
- "Nicht filtern" statt "-"
- Reihenfolge erst "ja" dann "nein"
Was für ein Timing. Ich war gerade mit einer anderen Sache fertig :-) .
Welche Checkboxdatei ist das? Die zwei in diesen Pfaden habe ich ausprobiert:
/system/modules/metamodelsattribute_checkbox/classes/src/MetaModels/Filter/Setting/Published
/system/modules/metamodelsattribute_checkbox/classes/src/MetaModels/Attribute/Checkbox
Da hat sich nichts geändert oder muss ich nach der Änderung irgend etwas aktualisieren oder so? Cache löschen hatte ich auch versucht.
Du hast doch angegeben "composer: yes" - also unter /composer/vendor/metamodels/filter_checkbox/src/MetaModels/Filter/Setting/...
...die meisten Betriebssysteme haben eine Funktion zum Suchen von Dateien ;-)
Hab es nun gefunden, danke.
Also, der Strich ist weg, es steht nun "Nicht filtern" dort :-) .
Die Ja-Auswahl geht - in der URL steht weiterhin eine 1.
Die Nein-Auswahl geht nicht - die URL springt auf den Stand ohne Auswahl. Ein Rückwechsel auf "Ja" geht, auf "Nicht filtern" ist das allerdings nicht möglich.
Beim Wechsel der Seite und zurück, bleibt die Auswahl ebenfalls erhalten. Die Erwartung wäre, dass die Auswahl verschwindet.
"Alle Filter zurücksetzen" setzt die URL zurück, die Punkte in der Checkbox bleiben aber erhalten und stehen nicht wie erwartet auf "keine Auswahl".
edit:
Das Vertauschen von "Ja" und "Nein" hat funktioniert.
Habe ein wenig rum probiert.
Das Problem ist wohl diese Stelle:
if ($this->get('ynmode') == 'radio') {
$arrWidget['options'] = array
(
1 => '1',
0 => '-1'
);
Man darf die Reihenfolge nicht drehen, dann funktioniert die Box nicht mehr.
belässt man das beim alten Stand:
0 => '-1',
1 => '1'
dann funktioniert sie wieder. In der Box steht wieder zuerst "Nein", dann "Ja".
Das "Nicht filtern" hat geklappt. Es gibt nur einen Fehler. Der Punkt ist nicht markiert, wenn man nicht filtert. Hab dann nochmal den alten Stand wiederhergestellt und das Problem gab es auch vorher schon.
damit sollte geändert sein:
"Nicht filtern" statt "-"
Reihenfolge erst "ja" dann "nein"
mehr nicht...
Das "Nicht filtern" hat geklappt. Es gibt nur einen Fehler. Der Punkt ist nicht markiert, wenn man nicht filtert. Hab dann nochmal den alten Stand wiederhergestellt und das Problem gab es auch vorher schon.
da hier das Standard-Contao-Widget zum Tragen kommt, wäre der "Bug" eher dort zu suchen...
Ja, habe jetzt erst entdeckt, dass es eben noch das Problem mit der Nichtmarkierung gibt.
Die Reihenfolge von "Ja" und "Nein" kann man auf diese Weise wohl nicht tauschen, schade. Aber wenigstens steht schonmal "Nicht filtern" da :) . Danke!
da hier das Standard-Contao-Widget zum Tragen kommt, wäre der "Bug" eher dort zu suchen...
Wenn man tags hat und dort das Template "radiobuttons" benutzt, dann ist alles o.k., aber das Template kann man für die Checkbox eben nicht verwenden. Nutzt das nicht das Standard-Contao-Widget?
Mus ich diesen Bug irgendwo gesondert einstellen oder gebt ihr das intern weiter?