Ankündigung

Einklappen
Keine Ankündigung bisher.

Auf Inhalte anderer Kataloge zugreifen

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

  • Auf Inhalte anderer Kataloge zugreifen

    Moin zusammen,

    Ich habe zwei unterschiedliche Kataloge konfiguriert und befüllt (Projekte und Mitarbeiter). Ist es möglich, im Projekt einen Mitarbeiter auszuwählen, um diesen dann mit dem Projekt zu verknüpfen?

    Viele Grüße
    Manuel

  • #2
    Hi,
    du kannst dafür die Tags nutzen oder ein Auswahl-/Select Datenbank Feld. Beide Attribute erlauben die Auswahl eigener Tabellen.

    Viele Grüße,
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Wie funktioniert das denn mit den Tags? Ich wüsste nicht, wie ich die nutzen kann, um die Einträge zu verknüpfen.

      Kommentar


      • #4
        Man wählt dann im Tags-Feld das / oder die (wenn mehrfach) Einträge und hat dann quasi die IDs dieser. Damit kann man im Frontend die Einträge via Datenbank-Abfrage holen.
        http://www.premium-contao-themes.com

        Kommentar


        • #5
          Ich müsste dann also ein Tag "Mitarbeiter" schaffen. In "Mitarbeiter" habe ich dann die verschiedenen Mitarbeiter z.B. Max Mustermann. Im Eintrag von Max Mustermann wähle ich dann das Tag "Max Mustermann" aus. Im entsprechenden Projekt würde ich dann den jeweiligen Mitarbeiter auswählen, korrekt?

          Kommentar


          • #6
            Zitat von Manuel Beitrag anzeigen
            Ich müsste dann also ein Tag "Mitarbeiter" schaffen. In "Mitarbeiter" habe ich dann die verschiedenen Mitarbeiter z.B. Max Mustermann. Im Eintrag von Max Mustermann wähle ich dann das Tag "Max Mustermann" aus. Im entsprechenden Projekt würde ich dann den jeweiligen Mitarbeiter auswählen, korrekt?
            Etwas zu komplex beschrieben, aber ich denke du meinst es richtig.

            Backend:
            - Du erstellst ein Tags Feld auf die Tabelle, die deine Mitarbeiter verwaltet (könnte auch tl_member sein, dann wäre es direkt ein Contao Mitgliedsdatensatz).
            - Im CC Eintrag kannst du nun den gewünschten Mitarbeiter via Tags-Feld wählen

            Frontend:
            - Hier wird erstmal nur die ID des Datensatzes kommen. Mit dieser erstellt man sich eine Datenbank-Abfrage auf die Quelle und holt den Datensatz (wenn man Infos daraus benötigt).
            http://www.premium-contao-themes.com

            Kommentar


            • #7
              Gibt es hier im Forum schon ein Beispiel für diese Abfrage?

              Kommentar


              • #8
                Zitat von Manuel Beitrag anzeigen
                Gibt es hier im Forum schon ein Beispiel für diese Abfrage?
                Ja. Referenzierte Kataloge wurden mehrfach behandelt. Imgrunde reicht eine direkte Datenbankabfrage auf die referenzierte Tabelle mit dem Wert aus dem Feld (in der Regel die ID des referenzierten Eintrags)

                (myTable gegen die ref. Tabelle ersetzen und das ref. Feld)
                --- CC-liste foreach schleife start ---
                Code:
                $intEntry = $entry->field('myRefSelect')->value();
                $objRefEntry = \Database::getInstance()->prepare("SELECT * FROM myTable WHERE id=?")->limit(1)->execute($intEntry);
                echo $objRefEntry->id;
                --- foreach schleife ende ---

                Hier noch weitere nützliche Abfragen z.B. für Eltern-Kind
                https://forum.premium-contao-themes....hild-tablellen
                http://www.premium-contao-themes.com

                Kommentar


                • #9
                  Hallo zusammen,

                  das hier gelistete Beispiel ist recht anschaulich und Jene im verlinkten Thread auch, ich vermisse aber ein wenig Erläuterung zu der "Magie" im Hintergrund. Das Beispiel hier zeigt ja den Fall einer einfachen Verknüpfung, aber was genau passiert bei Mehrfachauswahl?
                  Wenn z.B.
                  Code:
                  $foreignTableIdEntries = $entry->field('myRefSelect')->value();
                  ausgeführt wird und "myRefSelect" ein Mehrfachauswahlfeld vom Typ "Tags" oder "Datenbankauswahl" ist, muss man dann mittels foreach über "$foreignTableIdEntries" iterieren oder kann man es direkt dem Prepared Statement übergeben und das Ganze wird korrekt zusammen gebastelt?

                  Wie würde es beispielweise ganz konkret aussehen, wenn ich eine "Externe Links"-Datenbank habe (mit den Feldern Überschrift, Beschreibungstext, Sortierfeld und URL), ein paar Einträge aus dieser DB bei einem Produkt mittels eines Tagfeldes auswähle und anhand dieser Auswahl dann im Reader eine sortierte Liste von Infoboxen mit Links generieren möchte? Ein vollständiges Codebeispiel zum einem solch simplen Demo-Use-Case wäre Gold wert.

                  Zudem ist das Beipsiel aus dem vorherigen Post zwar super, um verknüpfte Daten direkt in den Reader oder die Listenausgabe zu integrieren, aber was ich bei meiner Suche nach Antworten weder in der Dokumentation noch in diesem Forum gefunden habe ist, wie genau Reader und die Customcatalog-Liste im Rahmen von "Verwandte Produkte" verknüpft sind, denn das wäre für meinen konkreten Fall der wesentlich bessere Lösungsansatz... wenn ich es denn zum Laufen bekäme.

                  Daher mal konkret gefragt:
                  Woher genau kommen in der Datei "customcatalog_productcatalog_related.html5" die unter "$this->entries" erreichbaren Datensätze her?
                  Irgendwo muss ja eine Verbindung zum Reader bestehen, damit die in dem Modul gelisteten Produkte so gefiltert werden, dass sie den Einträgen aus dem Feld "Verwandte Produkte" des im Reader betrachteten Produkts entsprechen. Ich habe gesucht, aber kann die Verbindung zwischen dem betrachteten Produkt, dessen Tagauswahl und dem Listenfilter nicht finden.

                  Mein Problem ist aktuell nämlich das Folgende:

                  Ich habe die beiden Kataloge "Händler" und "Produkte" größtenteils unverändert aus der Productcatalog-Demo übernommen, dann aber noch den zusätzlichen Katalog "Zubehör" angelegt (der etwas abgespeckter als "Produkte" daher kommt) und in "Produkte" den Objektdaten das Tagfeld "Zubehörartikel" verpasst. Dann habe ich zwischen Reader und der Customcatalog-Liste für verwandte Produkte eine weitere Liste eingefügt und für Diese in der Modulkonfiguration als Datenquelle die Zubehörtabelle angegeben. Wenn ich dann aber unter Filtersets einen Filter übergeben möchte, der mit den Einträgen aus dem "Zubehörartikel"-Tag-Datenfeld des im Reader betrachteten Produkts gefüttert wird, funktioniert das nicht, da anscheinend nur Filtersets akzeptiert werden, die zu der Zubehörtabelle gehören, Filtersets die der Produkttabelle zugehörig sind, funktionieren hier nicht.
                  Gebe ich gar kein Filterset an, so sehe ich alle Zubehörteile, die Liste ist also korrekt aufgesetzt. Aber ich muss die dargestellten Einträge ja auf jene Beschränken, die beim Produkt eingepflegt sind, sonst hat es keinen Sinn.

                  Wie bekomme ich dies also hin, welche Einstellungen und welcher Code sind der Kitt, welche die ID-Werte meines Tagfeldes des aktuell betrachteten Datensatzes als Filterkriterium für die Zubehörliste nutzbar macht?

                  Aktuell vermute ich, dass es bei "Verwandte Artikel" nur funktioniert, weil das zugehörige Tagfeld auf die gleiche Tabelle zu der auch das betrachtete Produkt gehört zeigt, Customcatalog-Listen also nur für Selbstreferenzen funktionieren. Sollte dies tatsächlich der Fall sein, wäre das sehr schade und ich müsste tatsächlich den Produktreader stark erweitern um dann dort eine entsprechende Listenausgabe zu erzeugen. Das wäre ziemlich clunky und widerspricht stark dem CMS-Ansatz, ich hoffe also stark, dass ich mich irre.

                  Beste Grüße
                  Stefan

                  Kommentar


                  • #10
                    CC hat einen Filter "Verwandte Einträge", damit ist die Demo aufgebaut. Der Filter hat zwei Modi. In der Regel und auch in der Demo sind die "Verwandten" Einträge der gleichen DB. Liste-Module zum Beispiel denken selbsterklärend auch nur in der gesetzten Tabelle.

                    Innerhalb der Templates kann man alles in die Ausgabe holen, wenn man möchte.
                    Beispiele dafür haben wir hier im Forum wie Fremd-Ausgaben ergänzt werden. Das geht auf vielfältige Art und Weise. Hier ein paar Referenzen, die ganze CC-Liste-Module quer referenzieren.

                    https://forum.premium-contao-themes....plate-ausgeben

                    Für die Ausgabe von ein paar Werten aus einem fremd-Einträge, würde ich im Template eine foreach Schleife nutzen (oder while je nach DB-Result) und dann im Template die gewünschte Ausgabe aufbauen. Das hat einige Vorteile, weil der Wert direkt in den gewünschten HTML-Aufbau ausgegeben werden kann. Referenziert man ein komplettes Modul, hat man zwar alle Macht der Modul-Templates, aber auch deren (event. an dieser Stelle unerwünschten) Ausgabe.
                    ---
                    DB-Abfragen auf mehrere IDs können entweder per foreach-Schleife durchgeführt werden oder per Mysql IN(...). Letzteres liefert ein Datenbank-Resultat, das die gefunden Zeilen beinhaltet. Diese müssen wiederum durchlaufen werden, wenn man gezielt Einzelausgaben tätigen möchte.


                    ---
                    Filter arbeiten standardmäßig ausschließlich für die jeweilige CC-Konfiguration und in deren Scope. Komplexe Filterstrukturen, die erweiterte menschliche Logiken benötigen, können über den Hook-Callback Filter selbstständig implementiert werden. Die generelle Liste-Ausgabe gilt, wie oben erwähnt, nur für den gewählten Katalog. Aber wie gesagt, in den Templates kann man quasi alles machen.
                    Zuletzt geändert von Tim; 23.11.2020, 09:02.
                    http://www.premium-contao-themes.com

                    Kommentar


                    • #11
                      Beispiel mit mehreren Ids und direkter SQL-Abfrage

                      Code:
                         <?php
                        $arrIds = array(1,2,3);
                        $objResults = \Database::getInstance()->prepare("SELECT * FROM myTable WHERE id IN(".implode(',',$arrIds).")")->execute();
                        ?>
                        <ul>
                        <?php while($objResults->next()): ?>
                        <li><?= $objResults->id; ?></li>
                        <?php endwhile; ?>
                        </ul>
                       
                       
                      Beispiel mit dyn. Model (nur mit CC möglich).
                      Code:
                       <?php
                      $arrIds=array(1,2,3);
                      $objContaoModel = new \ContaoModel; // Klasse existiert nur mit CC
                      $objContaoModel->setTable('myTable');
                      $objModels = $objContaoModel->findMultipleByIds($arrIds); // siehe Contao Model Klasse
                      ?>
                      <ul>
                      <?php foreach($objModels as $objModel): ?>
                      <li><?= $objModel->id; ?></li>
                      <?php endforeach; ?>
                      </ul>
                      Zuletzt geändert von Tim; 23.11.2020, 09:10.
                      http://www.premium-contao-themes.com

                      Kommentar


                      • #12
                        Feature Request: Erweiterung des Include-Attributes.
                        Das Include Attribut erlaubt im Eintrag die Auswahl von entweder einem Inhaltselement, Artikel oder Modul.
                        Man kann es erweitern auf die Auswahl eines (oder mehrerer) Einträge aus Fremden-CCs. Im Attribut zusätzlich eine Auswahl für das customcatalog_ Ausgabe Template.

                        Damit bleibt das System in sich sicher, was bei einer losen Auswahl z.B. über Tags nicht gegeben wäre.
                        http://www.premium-contao-themes.com

                        Kommentar

                        Lädt...
                        X