Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Contao 3.2.9] Nicht-sichtbare Attribute im Template als Wert abfragbar / Subpaletten und Template #402

Closed
cyberlussi opened this issue Apr 17, 2014 · 15 comments
Assignees
Labels
question We have a question, please elaborate on the ticket.
Milestone

Comments

@cyberlussi
Copy link

Bezugnehmend auf https://community.contao.org/de/showthread.php?49584-gel%F6st-Stand-MM-Subpaletten ein Feature- oder Optimierungs-Request:

In einem (FE) Template sind die Attribute verfügbar, die per Rendersettings "sichtbar" geschaltet wurden. Möchte man im Template aber auf "nicht sichtbare" Attribute zugreifen, so geht dies nicht, da diese im Array der Daten NULL sind. Es müsste eine Möglichkeit geben, im Template auf bestimmte oder alle Daten eines Eintrages zugreifen zu können, ohne dass diese angezeigt werden und die vorgefertigten Templates weitestgehend verwendet werdet können.

Während die Anfrage oben ganz allgemein ist, könnte man auch alternativ den Umgang mit Subpaletten im Speziellen verfeinern: nämlich dadurch, daß MM im Template automatisch Subpaletten und deren Sub-Attribute nach Belegung in- bzw. exkludiert werden. Das Attribut, welches die Subpaletten aktiviert, darf dann aber auch nicht ausgeben werden (z.B. "1"). Dies würde zumindest meinem Anwendungsfall vollständig genügen.

Beispiel (Subpalette "Galerie hinzufügen")

  • Subpalette "Galerie hinzufügen" aktiviert im BE ein "Galerie" File-Attribut. Die Galerie soll nur dann angezeigt werden, wenn dies durch den Nutzer per Checkbox "Galerie hinzufügen" gewünscht ist.
  • im FE Template z.B. metamodel_prerendered.html5 kann man zwar auf $this->data[] zugreifen, aber das Feld für "Galerie hinzufügen", welches im Template die Anzeige steuern soll ist NULL (egal ob 1oder 0 in DB gesetzt), da es nicht zur Anzeige (würde "1" ausgeben) gedacht ist und in den Rendersettings als nicht-sichbar geschaltet ist.
  • Als workaround muss man ein Template für die Subpaletten aktivierende Checkbox erstellen, das nichts ausgibt und das Attribut in den Rendereinstellungen sichtbar schalten, dann wird es in das $this->data[] array eingefügt und kann abgefragt werden, um die Galerie anzuzeigen oder auch auszublenden. Dies hat den Nachteil, dass 2 MM Templates manuell angepasst werden müssen.

Hinweis: alles unter der Annahme, dass im Modul "Keine Datensätze parsen" inaktiv ist (Verhalten von mir dann nicht geprüft)

@cyberlussi cyberlussi changed the title Nicht-sichtbare Attribute im Template als Wert abfragbar / Subpaletten und Template [Contao 3.2.9] Nicht-sichtbare Attribute im Template als Wert abfragbar / Subpaletten und Template Apr 21, 2014
@tim-bec
Copy link
Contributor

tim-bec commented Oct 22, 2014

#484

@tim-bec tim-bec added the Up for discussion This ticket will be up for discussion in one of our next calls label Oct 22, 2014
@tim-bec tim-bec added this to the Future milestone Oct 22, 2014
@zonky2
Copy link
Contributor

zonky2 commented Dec 30, 2015

Aktueller Stand: Contao 3.5.6 MM core 2.0.0-alpha8

Die raw-Daten werden immer ausgegeben - dazu können die Attribute ausgeblendet sein bzw. müssen nichtmal in der FE-Render-Ausgabe aufgefüht bzw. eingeladen sein

Siehe #484

@cyberlussi
Copy link
Author

Hi, nein das stimmt so glaube ich nicht. Ich habe auch den letzten Stand mit CTO 3.5.6 installiert (metamodels/core dev-master (900dbda)).

Wenn ich in den Rendersettings eines MM einzelne Attribute im FE ausblende (Auge mit Kreuz), erscheinenen diese nicht im [raw] Teil von $this->data - nur die sichbaren Attribute sind dort gelistet. Beispiel siehe unten: mal mit Bild, mal ohne.

Somit ist für mich dieses Ticket und #484 nicht gelöst (inhaltlich gleichwertig): Ich finde es sinnvoll, dass das $this->data[..][raw] Segment alle Elemente aus der Datenbank beinhaltet.

Im Moment gibt es doch schon eine MM-List Einstellung unter "MetaModel Render-Einstellung > Keine geparsten Items über "$data" ausgeben", könnte man da nicht noch eine Einstellung "Alle Attribute eines Items über "$data" ausgeben" hinzufügen, die entweder den aktuellen Zustand "raw = nur sichtbare" oder "raw = alle" darstellt?

2016-01-04_12_34_28_-metamodels-_contao_open_source_cms_3_5

Array
(
    [0] => Array
        (
            [raw] => Array
                (
                    [id] => 3
                    [pid] => 0
                    [sorting] => 128
                    [tstamp] => 1451409283
                    [title] => Sed auctor neque eu tellus rhoncus ut eleifend
                    [image] => Array
                        (
                            [bin] => Array
                                (
                                    [0] => 5�b
��I���e�O
                                )

                            [value] => Array
                                (
                                    [0] => 35cc620d-d097-11e4-b849-f6950765e54f
                                )

                            [path] => Array
                                (
                                    [0] => files/upload/photo-1426443177319-df7c639993c8.jpg
                                )

                        )

                    [attachments] => Array
                        (
                            [bin] => Array
                                (
                                )

                            [value] => Array
                                (
                                )

                            [path] => Array
                                (
                                )

                        )

                    [detailed_text] => Vivamus hendrerit arcu sed erat molestie vehicula. 

2016-01-04_12_35_31_-metamodels-_contao_open_source_cms_3_5

Array
(
    [0] => Array
        (
            [raw] => Array
                (
                    [id] => 3
                    [pid] => 0
                    [sorting] => 128
                    [tstamp] => 1451409283
                    [title] => Sed auctor neque eu tellus rhoncus ut eleifend
                    [attachments] => Array
                        (
                            [bin] => Array
                                (
                                )

                            [value] => Array
                                (
                                )

                            [path] => Array
                                (
                                )

                        )

                    [detailed_text] => Vivamus hendrerit arcu sed erat molestie vehicula.

@MacKP
Copy link
Contributor

MacKP commented Jan 4, 2016

Wenn, dann sollte das konfigurierbar sein. Pauschal immer alles Ausgeben ist nicht gut, da man ja mehrere Listen auf einer Seite ausgeben kann mit jeweils unterschiedlichen Attributen (um das Layout besser hin zu bekommen). Wenn da immer alles drinn wäre, dann würde das recht lahm werden.

Viele Grüße

@zonky2
Copy link
Contributor

zonky2 commented Jan 4, 2016

@cyberlussi
Ich habe nochmal mit dem selben dev-master (900dbda) die Sache getestet - wie gesagt, ich kann die Attribute in der Render-Einstellung löschen und es werden (trotzdem) bei raw alle Attribute angezeigt - kannst Du bitte prüfen, ob Du irgendwelche Caches an hast?

@cyberlussi
Copy link
Author

@xantippe
In meiner lokale MAMP Umgebung (PHP 5.6.10) habe ich den Cache auf "aus". Ich habe in CTO "Internen Cache umgehen" aktiv und Komprimierungen aus. "MetaModels Cache" hat angeblich 0 Dateien. Habe unter Systemwartung alle "Daten bereinigt" und in der Paketverwaltung mal aus releases gestellt.
contao-community-alliance/dc-general 2.0.0-beta31
metamodels/core 2.0.0-alpha8
Meine Ausgabe erfolgt direkt im Artikel-Baum als "MetaModel-Liste", ich bin in einer Detailansicht mit eigenem Template, Ausgabe erfolgt per "dump($this->data);"
Ich wüsste jetzt nicht, wo ich da noch einen Cache habe. --> Gleiches Verhalten wie von mir oben beschrieben!

Wie gibst du denn die RAW Werte aus? Per Modul?

@cyberlussi
Copy link
Author

Moment ... du sagst "in den Rendereinstellungen löschen" .... kurz probiert: auch ein gelöschtes Attribut in den Render-Einstellungen wird nicht als RAW angezeigt.

@cyberlussi
Copy link
Author

Mit der Umgebung von Xantippe konnte ich folgendes, ich denke auffälliges Verhalten nachvollziehen - ist das so gewollt?

Render-Einstellungen vollständig ohne Attribute
-> alle Attributwerte im RAW array gelistet

Ich habe dann alle Attribute durch "alle hinzufügen" hinzugefügt - aber alle noch unsichtbar gelassen
-> alle Attributwerte im RAW array gelistet

Dann habe ich das erste Attribut sichtbar gemacht (Name)
-> Ausgabe in RAW array enthält nur noch "name"!!!!

    [0] => Array
        (
            [raw] => Array
                (
                    [id] => 93
                    [pid] => 0
                    [sorting] => 0
                    [tstamp] => 1451566598
                    [name] => Avery
                )

            [text] => Array
                (
                    [name] => Avery
                )

            [attributes] => Array
                (
                    [name] => Name
                )

            [html5] => Array
                (
                    [name] => <span class="text">Avery</span>
                )

            [class] => first even
            [jumpTo] => Array
                (
                )
        )

Wenn also wenigstens ein Element sichtbar ist, werden nur die sichtbaren ins RAW array hinzugefügt ....

@zonky2
Copy link
Contributor

zonky2 commented Jan 4, 2016

Interessanter Effekt

  • Einmal alle Attribute hinzufügen
  • Alle auf Sichtbar schalten
  • Anschließend unsichtbar schalten oder löschen

=> Nachdem ein Attribut einmal auf sichtbar geschaltet wurde, ist es offensichtlich in raw enthalten... und kann dann aber wieder entfernt werden

... ob das so gewollt war??

@discordier
Copy link
Member

Nein war es nicht. Das ist definitiv falsch.

@zonky2
Copy link
Contributor

zonky2 commented Jan 5, 2016

o.k. - vielleicht wäre ein guter Kompromiss, wenn in raw immer dann angezeigt wird, wenn das Attribut in der Render-Liste als Attribut auftaucht - egal ob sichtbar oder nicht.

somit könnte man alle "drei Zustände"

  • nicht in Liste: gar keine Ausgabe
  • in Liste (aber deaktiviert): in raw
  • in Liste und aktiv: in raw und HTML5 bzw. Text

recht leicht bewerkstelligen

@cyberlussi
Copy link
Author

+1

@zonky2 zonky2 added the bug A bug! A bug! Fast, squish it! label Jun 3, 2016
@zonky2 zonky2 modified the milestones: 2.0.0, Future Jun 3, 2016
@zonky2 zonky2 added the question We have a question, please elaborate on the ticket. label Aug 27, 2016
@zonky2
Copy link
Contributor

zonky2 commented Aug 27, 2016

I'll check, have the current version the same phenomenon...

@zonky2
Copy link
Contributor

zonky2 commented Aug 27, 2016

Test mit MM core a13 und DCG beta38

MM mit "Mitarbeiterliste" (siehe Handbuch) mit einigen Textfeldern und einem Select auf MM "Abteilung"

Rendering für FE angelegt und MM-CE-Liste - keine Filter oder sonstige Einstellungen - Standardtemplate mit Debugausgabe (siehe Handbuch)

Start:
1.) Render-Einstellungen OHNE Attribute
shot268

=> im Ausgabearray ist für jedes Daten-Item ein Knoten vorhanden, raw ist vollständig gefüllt
shot269

=> das hat zur Folge, dass in dem Template die Ausgabeschleife durchlaufen wird - zwar ohne Ausgabe, da HTML- bzw. Text-Knoten leer - aber die umschließenden HTML-Divs ausgegeben werden
hier sollte ggf. die Ausgabe "keine Daten gefunden rein" - die kommt dann aber nicht im if-else-Statement
shot270

2.) Attribut "Name" in Render-Einstellung als Attribut + aktiv

=> dann wird die Ausgabe im raw-Knoten gekürzt auf die "Standard-Attribute" und dem gewählten Attribut "Name"
shot271

3.) Attribut "Name" in Render-Einstellung als Attribut aber deaktiviert

=> nun ist wieder der komplette raw-Knoten zu sehen

4.) Attribut "Vorname"in Render-Einstellung als Attribut aktiviert - "Name" bleibt deaktiviert

=> Ansicht wie bei 2.) aber Vorname wird ausgegeben

@zonky2 zonky2 removed the bug A bug! A bug! Fast, squish it! label Aug 30, 2016
@zonky2
Copy link
Contributor

zonky2 commented Aug 30, 2016

@cyberlussi - ich habe das Thema mit @discordier durchgesprochen und es ist, so wie es ist, genau "richtig" - was, wann passiert, sieht man an meinem letztem Kommentar.

Es kommt auf Deine Anforderungen an, aber man kann über den raw-Knoten und einem eigenen Template alle gewünschten Ausgaben erzeugen.

Das Ticket wird somit geschlossen...

@zonky2 zonky2 closed this as completed Aug 30, 2016
@discordier discordier removed the Up for discussion This ticket will be up for discussion in one of our next calls label Apr 25, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question We have a question, please elaborate on the ticket.
Projects
None yet
Development

No branches or pull requests

5 participants