Ankündigung

Einklappen
Keine Ankündigung bisher.

CustomElement Widget im CC als Attribut

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • CustomElement Widget im CC als Attribut

    Ich habe ein CE-Widget als Attribut in CC verwendet.
    Es handelt sich um ein Text-Extended Element, das dupliziert werden kann.
    Zwei Probleme hierbei:

    1. Der Titel und die Beschreibung werden bei den CE-Widgets nicht in der Bearbeitung angezeigt
    2. Wenn ich das CE dupliziere, kann nur das erste Element editieren. Das zweite oder nachfolgende Elemente lassen sich nur nach einem ersten Speichern editieren.

    Können diese Dinge gelöst werden?
    Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Bildschirmfoto 2017-10-26 um 15.04.10.png
Ansichten: 49
Größe: 37,6 KB
ID: 8935

  • #2
    1. Speichere einfach nochmal das CE bzw. die Textfelder. Es sollten alle veröffentlichten Felder in veröffentlichten Gruppen da sein.
    2. Nein, da es eine Textarea ist und der Tiny nur nach einem Reload initialisiert wird. Das Phänomen existiert seit CE 1.0. Nutze einfach keinen Tiny.
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      1. die Titel und Beschreibungen im CE werden korrekt angezeigt, wie im Bild zu sehen. Was allerdings fehlt ist der Titel/Beschreibung des CustomCatalog Attribut-Felds -> Hier im Beispiel: In einem CC gibt es ein Attribut namens "Link zu Details" und eine Beschreibung dazu. Bei der Datensatzbearbeitung werden diese Infos aber nicht angezeigt, sondern nur das CE mit seinen Feldern.
      2. verstanden. Ist zwar in der Bearbeitung unpraktisch, weil der Redakteur erst speichern muss....

      Noch eine Frage zur Ausgabe im Template bei eingebundenen CE-Widgets:

      Wenn ich die Widget-Attribute direkt im CC-Template ausgeben will, wie gehe ich da vor?

      Beispiel:

      "ce_widget" ist der Alias des CC-Attributs (CE-Widget Hyperlink-Extended). Im CC gibt es hier lediglich einen value des widget-alias (z.B. hyperlink-extended)

      PHP-Code:
      <?php if($entry->field('ce_widget')->value()): ?>
      <?php 
      echo $entry->field('ce_widget')->html() ?>
      <?php 
      endif; ?>
      Die If-Abfrage hier funktioniert nicht sauber bzw. wenn einmal ein Link gesetzt war, lässt sich dieser nicht wieder löschen -> die Widget-Ausgabe erscheint dann immer, selbst wenn hier kein Link mehr vorhanden ist.

      Ich würde daher die If-Abfrage lieber auf das Link-Feld des CE-Widgets field('link') verwenden. Wie komme ich da ran?

      Außerdem gibt es ja in CC die Möglichkeit, ein individuelles html-Template auf Feldebene zu verwenden echo $this->entries[1]->html('customcatalog_item_custom');
      Das wäre bei der Einbindung von CE-Widgets ebenfalls sehr praktisch.
      Also in diesem Fall:

      PHP-Code:
      <?php if($entry->field('ce_widget')->value()): ?>
      <?php 
      echo $entry->field('ce_widget')->html('customelement_hyperlink_extended_custom'?>
      <?php 
      endif; ?>
      Please make this happen!

      Kommentar


      • #4
        Ich sage nicht es ist unmöglich, aber schon höhere Physik in einem CC Template die einzelnen Werte eines CE Widgets "bequem" ausgeben zu lassen. Man nutze auch hier für die Ausgabe die ->html() Methode und für die Ausgabe des CEs selbst das CE Template.

        Ein CE Widget ist ein Feld, quasi wie ein Textfeld ein Feld ist. Damit ist ein CE-Widget Attribut "nur" ein Geschwisterchen zu anderen Attributen. Auf Sichtbarkeit der Gruppen und Felder prüfen.
        http://www.premium-contao-themes.com

        Kommentar


        • #5
          Ja, die einzelnen Werte wären auch obsolet, wenn es mit dem individuellen Template ginge, wie oben beschrieben.
          Evtl. ist das ja mal umsetzbar.

          Kommentar


          • #6
            Das CE Widget nutzt das in den CE-Einstellungen eingestellte Template NICHT das Attribut-Template als Hauptausgabe-Template. Es ist eigentlich nichts anderes als bei einem normalen Inhaltselement hier.
            http://www.premium-contao-themes.com

            Kommentar


            • #7
              Zitat von Tim Beitrag anzeigen
              Das CE Widget nutzt das in den CE-Einstellungen eingestellte Template NICHT das Attribut-Template als Hauptausgabe-Template. Es ist eigentlich nichts anderes als bei einem normalen Inhaltselement hier.
              Das ist klar. Wenn ich aber für ein CC ein solches CE nutzen und ein individuelles Template verwenden möchte geht dies nicht. Ich müsste das Haupttemplate des CE ändern. bzw. das CE duplizieren und ein individuelles Template dafür verwenden. Ist ja auch kein Problem, ich dachte nur, es wäre ein nettes Feature, ein individuelles CE-Template direkt im CC-Template anzugeben.

              Kommentar


              • #8
                Die html("meinEigenesTemplate") bzw. render() Methode erlaubt die Übergabe eines Template-Strings - in CE, als auch CC. Siehe: http://forum.premium-contao-themes.c...late-variablen > Eigenes Template je Datensatz

                Ohne Eingabe wird das Template aus den Einstellungen genutzt. Möchte man eine Template-Auswahl generieren, kann man ein eigenes Feld spendieren oder auf das Vorlagentemplate Attribut zurückgreifen.
                http://www.premium-contao-themes.com

                Kommentar


                • #9
                  Zitat von Tim Beitrag anzeigen
                  Die html("meinEigenesTemplate") bzw. render() Methode erlaubt die Übergabe eines Template-Strings - in CE, als auch CC. Siehe: http://forum.premium-contao-themes.c...late-variablen > Eigenes Template je Datensatz

                  Ohne Eingabe wird das Template aus den Einstellungen genutzt. Möchte man eine Template-Auswahl generieren, kann man ein eigenes Feld spendieren oder auf das Vorlagentemplate Attribut zurückgreifen.

                  Ich kram das hier kurz mal vor...

                  Wenn ich genau diesen Weg versuche, kommt absolut nichts im Frontend raus. Woran kann das liegen? Selbst wenn ich den exakt gleichen Code in das neue Template schreibe, wie er im Standard-Template steht – also das Template das über $entry->field('test')->html() einwandfrei gerendert wird – kommt nichts an.

                  Also:

                  $entry->field('test')->html() FUNKTIONIERT
                  $entry->field('test')->html('anderes_template') FUNKTIONIERT NICHT

                  Kommentar


                  • #10
                    $entry->field('test')->html() FUNKTIONIERT
                    $entry->field('test')->html('anderes_template') FUNKTIONIERT NICHT

                    Du wandelst in diesem Fall das Ausgabe-Format/Logik zu der eines Attribut-Templates. Das wird nicht funktionieren.
                    In diesem Fall wäre die html Ausgabe plötzlich in $this->value.

                    Du musst, wenn du dynamische Templates für CE Widget nutzen willst, das CE Objekt selbst manipulieren und dort ein neues Template einschleusen. Quasi als ob in den CE-Einstellungen ein neues Template gewählt wurde. CE bedient sich immer des Template aus seinen Einstellungen.

                    Man erstellt daher ein eigenes CE object und rendert es unter neuen Bedingungen. Mein CE Attribut heisst = ce_widget_1 und bekommt das neue Template "customelement_ce_widget_1"

                    Code:
                     [COLOR=#333333][FONT=Monaco][SIZE=11px] [COLOR=#878787]<?php[/COLOR]
                          [COLOR=#197020]// CC CE-attribute object[/COLOR]
                          [COLOR=#8735a5]$objAttribute[/COLOR] [COLOR=#000000]=[/COLOR] [COLOR=#8735a5]$entry[/COLOR][COLOR=#000000]->[/COLOR][COLOR=#3f6e7d]field[/COLOR]([COLOR=#dd2400]'ce_widget_1'[/COLOR])[COLOR=#000000]->[/COLOR][COLOR=#3f6e7d]attribute[/COLOR]();
                          [COLOR=#197020]// CE object[/COLOR]
                          [COLOR=#8735a5]$objCE[/COLOR] [COLOR=#000000]=[/COLOR] \PCT\CustomElements\Core\CustomElementFactory[COLOR=#000000]::[/COLOR][COLOR=#3f6e7d]findById[/COLOR]( [COLOR=#8735a5]$objAttribute[/COLOR][COLOR=#000000]->[/COLOR][COLOR=#3f6e7d]get[/COLOR]([COLOR=#dd2400]'include_item'[/COLOR]) );
                          
                          [COLOR=#0045aa]if[/COLOR]( [COLOR=#8735a5]$objCE[/COLOR] )
                          {
                              [COLOR=#197020]// assign new template and prepare CE for rendering in CC[/COLOR]
                              [COLOR=#8735a5]$objCE[/COLOR][COLOR=#000000]->[/COLOR][COLOR=#3f6e7d]set[/COLOR]([COLOR=#dd2400]'template'[/COLOR],[COLOR=#dd2400]'customelement_ce_widget_1'[/COLOR]);
                              [COLOR=#8735a5]$objCE[/COLOR][COLOR=#000000]->[/COLOR][COLOR=#3f6e7d]setGenericAttribute[/COLOR]( [COLOR=#8735a5]$objAttribute[/COLOR][COLOR=#000000]->[/COLOR][COLOR=#3f6e7d]get[/COLOR]([COLOR=#dd2400]'id'[/COLOR]) );
                              [COLOR=#8735a5]$objCE[/COLOR][COLOR=#000000]->[/COLOR][COLOR=#3f6e7d]setOrigin[/COLOR]( [COLOR=#8735a5]$objAttribute[/COLOR][COLOR=#000000]->[/COLOR][COLOR=#3f6e7d]getOrigin[/COLOR]() );
                              [COLOR=#0045aa]echo[/COLOR] [COLOR=#8735a5]$objCE[/COLOR][COLOR=#000000]->[/COLOR][COLOR=#3f6e7d]render[/COLOR]();
                          }
                          [COLOR=#878787]?[/COLOR][COLOR=#878787]>[/COLOR]
                     [/SIZE][/FONT][/COLOR]
                    ----

                    Je nach Anwendungsbereich kann es effektiver oder einfacher sein, einfach im CE Template Fallunterscheidungen zu machen für die Ausgabe.
                    ---
                    Für eine kommende CE Version werde ich für das CE Widget eine Art "Template"-Override vorsehen, direkt über die html() Methode
                    Zuletzt geändert von Tim; 27.05.2019, 08:22.
                    http://www.premium-contao-themes.com

                    Kommentar


                    • #11
                      Dann hab ich die Vorgehensweise ursprünglich wohl falsch interpretiert...

                      Ich konnte das Problem jetzt so lösen, wie Du vorgeschlagen hast - in dem konkreten Fall war es sogar schlauer, Fallunterscheidungen im CE Template zu machen.
                      Danke für das Feedback.

                      Ein Override wäre m.M.n. durchaus begrüßenswert

                      Kommentar

                      Lädt...
                      X