Ankündigung

Einklappen
Keine Ankündigung bisher.

Eltern- und Kind-Elemente in einer Liste

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

  • Eltern- und Kind-Elemente in einer Liste

    Hallo Zusammen,

    ist es möglich eine Liste auszugeben, welche zu den Eltern-Elementen alle Kind-Elemente enthält.

    Also zu zum Beispiel:

    1. Eltern-Element
    - Kindelement
    - Kindelement

    2. Eltern-Element
    - Kindelement
    ​- Kindelement
    - Kindelement

    3. Eltern-Element
    - Kindelement

    Wie muss ich hierbei vorgehen?

    Vielen Dank im Voraus.

    Grüße
    Jörg

  • #2
    Ich habe folgende Tabellen:

    cc_hersteller (Elterntabelle)
    cc_produkte (Kindtabelle)

    Es wird eine Liste für cc_hersteller ausgegeben. Nun habe ich eine Detailseite mit einem Listenmodul für cc_produkte angelegt und hier unter SQL-Bedingung
    pid={{customcatalog::cc_hersteller::autoitem::id}} angegeben.

    Beim Aufruf der Listenausgabe für cc_hersteller erhalte ich folgende Fehlermeldung:
    Code:
    [2019-12-02 02:03:23] app.CRITICAL: An exception occurred. {"exception":"[object] (Doctrine\\DBAL\\Exception\\SyntaxErrorException(code: 0): An exception occurred while executing 'SELECT COUNT(*) AS count FROM cc_hersteller WHERE pid=':\n\nSQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 at /home/shishame/public_html/contao44/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php:79, Doctrine\\DBAL\\Driver\\PDOException(code: 42000): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 at /home/shishame/public_html/contao44/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:80, PDOException(code: 42000): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 at /home/shishame/public_html/contao44/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:75)"} []
    Das Template der Listenansicht für cc_hersteller habe ich wie in dem Beitrag angepasst.
    https://forum.premium-contao-themes....plate-ausgeben

    Wo liegt mein Fehler?

    Grüße
    Jörg

    Kommentar


    • #3
      Du kannst den Inserttag nur einsetzen, wenn du wirklich in einer Leser-Seite bist, sonder läuft der Wert leer und schmeisst besagten SQL Fehler, weil die Abfrage pid=LEER läuft.
      ---
      Eine Eltern-Kind-Darstellung kann CC mit Bordmitteln ausgeben.

      Ausgehend vom customcatalog_default Template:

      Jedes Element der Eltern-Liste bekommt einen "Weitere Einträge..." Link (nicht zu verwechseln mit "Weiterlesen..."), dieser beinhaltet alle wichtigen Informationen (pid, table) für eine Kind-CC-Liste auf der Detailseite. Diese reagiert autom. und wird nur die Kind-Einträge zeigen.

      Legende:
      Weitere Einträge... -> Link zu eingestellter Weiterleitungsseite mit Parametern für Kind-CC-Liste
      Weiterlesen... -> Klassischer Detaillink für Leser.

      ---
      Andere Lösungen wie "Kind-Einträge direkt in Liste darstellen", finden sich vielerlei hier im Forum. Als auch im Vorlagen-Pool: https://forum.premium-contao-themes....plate-ausgeben
      http://www.premium-contao-themes.com

      Kommentar


      • #4
        Irgendwie checke ich es nicht. Ich habe eine Seite mit einer Listenausgabe. Hier sollen alle Hersteller mit ihren zugehörigen Produkten angezeigt werden.

        Ich habe ein Listenmodul für Hersteller und ein Listenmodul für Produkte angelegt.
        Wenn ich die folgende Anleitung richtig verstehe, muss lediglich ein {{insert_module::ID}} im Template der Hersteller-Liste eingefügt werden?!
        https://forum.premium-contao-themes....plate-ausgeben

        Mein Template:
        Code:
         <div class="with_childtable_list <?php echo $this->class; ?> block" <?php echo $this->cssID; ?>>
          <?php if(!$this->empty): ?>
          <?php foreach($this->entries as $entry): ?>
          <div class="<?php echo $entry->class; ?> block">
          <?php foreach($entry->get('fields') as $field): ?>
          <?php echo $field->html(); ?>
          <?php endforeach; ?>
           
          <!-- render my child list module -->
          <div class="childtable block"></div>
          {{insert_module::577}}
          </div>
           
          </div>
          <?php endforeach; ?>
          <?php else: ?>
          <p class="info empty"><?php echo $this->empty; ?></p>
          <?php endif;?>
          </div>
        Wenn ich das mache, werden mir zu jedem Hersteller alle Produkte von allen Herstellern angezeigt und nicht nur die jeweiligen Produkte des Herstellers.
        Das Händlerverzeichnis-Demo konnte mir auch nicht weiterhelfen, da man dort immer eine Seite weiter springt. Ich hätte gerne alles in einer Liste.

        Muss noch eine Einstellung im Listenmodul der Produkte vorgenommen werden, damit der Händler gefiltert wird?
        Wenn ich es richtig verstehe, aber eigentlich nicht, das Bordmittel von CustomCatalog!?!

        Besten Dank
        Jörg

        Kommentar


        • #5
          Bordmittel wäre das Händlerverzeichnis.

          Bitte vergleiche mein Template aus dem Thread mit deinem. Da gibt es schon deutliche Unterschiede.
          Es fehlt der ganze Bereich mit \Input::setGet...
          Ich nutze auch mit Absicht nicht einfach das rohe Inserttag, sondern die replaceInsertTag Methode.
          http://www.premium-contao-themes.com

          Kommentar


          • #6
            Servus Tim,

            jetzt habe ich das Template von Dir 1zu1 übernommen und nur die Kindtabelle und die Modul-ID der Kind-Liste angepasst.

            Das Ergebnis ist nun,dass bei allen Herstellern nur ein und das gleiche Produkt angezeigt wird,obwohl dieses nur zu einem Hersteller gehört.


            Code:
             <div class="with_childtable_list <?php echo $this->class; ?> block" <?php echo $this->cssID; ?>>
              <?php if(!$this->empty): ?>
              <?php foreach($this->entries as $entry): ?>
              <div class="<?php echo $entry->class; ?> block">
              <?php foreach($entry->get('fields') as $field): ?>
              <?php echo $field->html(); ?>
              <?php endforeach; ?>
               
              <!-- render my child list module -->
              <div class="childtable block"></div>
              <?php // mal die CC Liste etwas austricksen und eine Kind-Tabellen-Liste vorgaukeln | trick the CC list module here
              \Input::setGet('pid',$entry->get('id'));
              \Input::setGet('table','cc_produkte');
              // einfach das Kindtabellen Liste-Modul inkludieren | just include the childtable list module
              echo $this->replaceInsertTags('{{insert_module::577}}');
              ?>
              </div>
               
              </div>
              <?php endforeach; ?>
              <?php else: ?>
              <p class="info empty"><?php echo $this->empty; ?></p>
              <?php endif;?>
              </div>
            ???

            Kommentar


            • #7
              Nutzt du zum Test in der Kind-Liste eines der customcatalog_default Templates. Nicht, dass du dort nur ein Element ausgibst. Ich check mal aus, ob dieser Trick noch in aktuellen Contao-Versionen geht. Unter Symphony ist Caching ja immer so ein Thema.

              Jup, das replaceInserttag cached zu hoch, selbst wenn man es auf "nocache" stellt.

              Es muss damit ersetzt werden:

              Code:
              echo \Controller::getFrontendModule(577);
              Zuletzt geändert von Tim; 03.12.2019, 09:41.
              http://www.premium-contao-themes.com

              Kommentar


              • #8
                Hallo Tim,

                vielen Dank! Jetzt funktioniert es einwandfrei.

                Grüße
                Jörg

                Kommentar


                • #9
                  Eine Frage hätte ich dennoch.

                  Kann ich auf einer Liste (Kindelemente) auch ein zugehöriges Elternelement ausgeben?
                  Wie geht das?

                  Kommentar


                  • #10
                    Zitat von joerg.dietrich Beitrag anzeigen
                    Eine Frage hätte ich dennoch.

                    Kann ich auf einer Liste (Kindelemente) auch ein zugehöriges Elternelement ausgeben?
                    Wie geht das?

                    ID des Eltern-Eintrags = PID des Kind-Eintrags. Beispiele finden sich auch im Forum.

                    Ich denke es lohnt sich diesen Thread zu studieren: https://forum.premium-contao-themes....htelten-listen

                    Ein Beispiel für die Liste-Einstellung: Eigene SQL Abfrage auf Kind-Leser-Seiten, die die Eltern in einer Liste anzeigen soll:
                    https://forum.premium-contao-themes....=1221#post1221
                    Zuletzt geändert von Tim; 04.12.2019, 08:48.
                    http://www.premium-contao-themes.com

                    Kommentar

                    Lädt...
                    X