MetaModels/attribute_checkbox

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:

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:

MetaModels/core#1111

Die Box selber sieht nun so aus:

texte

(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)

checkbox_url_no

oder

https://www.exapmle.com/seitenname/attributname/1.html für "ja"

checkbox_url_yes

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?

moved #19