Ankündigung

Einklappen
Keine Ankündigung bisher.

Ausgabe Tags

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

  • Tim
    antwortet
    Contao hat eine rekursive Funktion in der Database class: getChildRecords: https://github.com/contao/core/blob/...abase.php#L427
    Damit kannst du anhand einer oder mehrer Tags ID rekursiv alle Kind-Ids erfragen. Rückgabe ist ein Array mit den Ids. Daraufhin die Tags-Werte über diese Ids erfragen.

    Einen Kommentar schreiben:


  • substance
    antwortet
    Gibt es eigentlich die Möglichkeit den ganzen Baum der Tags im Frontend auszugeben.
    Im Backend ist es ja möglich.
    Wie kann man das rekursiv über die PID lösen?

    Danke für Anregungen!
    Zuletzt geändert von substance; 20.11.2017, 18:49.

    Einen Kommentar schreiben:


  • Tim
    antwortet
    Die PID des Kindelements ist die ID des Elternelements. Damit z.B. eine weitere Abfrage je Kind durchführen oder per JOIN innerhalb einer Abfrage. Etwas leichter zu handeln ist es sicher mit einer zusätzlichen Abfrage je Kind.
    Post #12 zeigt wie eine Schleife je Kind durchlaufen wird.

    Einen Kommentar schreiben:


  • Manuel
    antwortet
    Zitat von Tim Beitrag anzeigen
    bei genau einem Tag

    PHP-Code:
    $arrTags deserialize($entry->field('tag-name')->value()); // array (ids)
    $objTags = \Database::getInstance()->prepare("SELECT * FROM tl_pct_customelement_tags WHERE id IN(".implode(',',$arrTags).")")
    ->
    limit(1)
    ->
    execute();

    echo 
    $objTags->title
    Ist es möglich das jeweilige Elternelement des Tags auszugeben?
    Zuletzt geändert von Manuel; 24.10.2016, 10:02.

    Einen Kommentar schreiben:


  • Tim
    antwortet
    Alle Datensätze bekommst du ohne Limit und z.B. in einer while Schleife oder mit dem Aufruf ->fetchAllAssoc() bzw. direkt für ein Feld: fetchEach();
    Hier bitte selbstständig in Contaos core Codes schauen oder anderen Code als Referenz anschauen wie dort ähnliche Abfragen getätigt wurden.

    Hier ein Beispiel, Ausgabe Tags id 1,2,3

    PHP-Code:
    $arrTags = array(1,2,3);

    $objTags = \Database::getInstance()->prepare("SELECT * FROM tl_pct_customelement_tags WHERE id IN(".implode(',',$arrTags).")")->execute();
    if(
    $objTags->numRows 0)
    {
    echo 
    implode(','$objTags->fetchEach('title');


    Sobald der Code im Template des versteckten Felds eingesetzt wird, erscheint nur eine weiße Seite.
    Anfangen php debugger zu nutzen und Fehlermeldungen anzeigen zu lassen. Weisse Seite = php Fehler
    Unbedingt anfangen Arrays / Variablen zu prüfen, bevor man foreach Schleifen feuert.

    Einen Kommentar schreiben:


  • eblick
    antwortet
    Die Abfrage funktioniert ja auch bestens, wenn sie direkt im Leser Template verwendet wird.
    Sobald der Code im Template des versteckten Felds eingesetzt wird, erscheint nur eine weiße Seite.

    ---
    Nachtrag: mit dem Inserttag funktioniert es nun aber -> der Schreibfehler $objTags war die Ursache.

    Was nun nur noch fehlt, ist das nur das erste Tag ausgegeben wird.
    Wie können denn alle zum Datensatz gehörigen Tags ausgegeben werden?

    Konnte mir die Frage selbst beantworten...

    PHP-Code:
    <?php 
    $arrTags 
    deserialize($this->replaceInsertTags'{{customcatalog::cc_reisedetail::autoitem::reise_altersgruppe}}' )); // array (ids)
    $ar count($arrTags);    
    $i 0;
    ?>

    <input type="hidden" name="<?= $this->name ?>" value="<?php foreach ($arrTags as $arrTag => $tag):
    $i++;
    $objTags =  \Database::getInstance()->prepare("SELECT * FROM tl_pct_customelement_tags WHERE id=$tag")->execute();    
    echo(
    $objTags->title);
    if (
    $i<$ar): echo(", ");
    endif;
    endforeach;   
    ?>">
    Zuletzt geändert von eblick; 03.09.2016, 15:14.

    Einen Kommentar schreiben:


  • Tim
    antwortet
    Zitat von eblick Beitrag anzeigen
    Hab ich ja gemacht - siehe oben...#5
    Eigenes Template ist gut. Vielleicht noch die Schreibweisen beachten . Das fehlt ein "s" bei $objTag(s)

    echo $objTags->title;

    (ps. bei mir war's auch falsch und keiner hat's gesehen . Alle Mann hier schön die copy & paste Falle gelaufen ) (änder ich gleich mal oben)
    Zuletzt geändert von Tim; 02.09.2016, 13:29.

    Einen Kommentar schreiben:


  • eblick
    antwortet
    Hab ich ja gemacht - siehe oben...#5

    Einen Kommentar schreiben:


  • Tim
    antwortet
    Ich würde hier für das versteckte Feld auch nen eigenes Template nutzen und darin alles verpacken. Das sollte gut klappen.

    Einen Kommentar schreiben:


  • eblick
    antwortet
    Sag mal in Worten was Du vorhast.
    Der ist gut ;-)

    Ich habe ein Buchungsformular auf einer Leser-Seite. Bei Absenden werden über das Notification Center Benachrichtigungen an Kunde und Anbieter verschickt.
    Diese beinhalten neben den Formulardaten auch Infos zum Objekt (Reise) wie z.B. Reisenummer, Altergruppe (Tag-Feld) usw.
    Die Infos werden als versteckte Felder über Inserttag im Formular mit abgefragt damit sie dem Notification Center zur Verfügung stehen. Das funktioniert auch bei einfachen Textfeldern prima.

    Für Datumsfelder habe ich für die versteckten Felder jeweils ein eigenes umformatiertes Template genommen.
    Bei den Tag-Felder mags aber nicht so richtig klappen...



    Einen Kommentar schreiben:


  • Tim
    antwortet
    Wozu das Inserttag? Du bist doch sicher eh in einem Leser. Da brauchts kein Inserttag, alle Felder kommen rein.

    Mit der aktuellen Tags Version kannst du auch so abfragen:

    $objTagsModel = \PCT_Tags::findById('meineTagId');

    Sag mal in Worten was Du vorhast.

    Einen Kommentar schreiben:


  • eblick
    antwortet
    kann es sein, dass dies in Kombination mit Inserttags in einem versteckten Formularfeld nicht funktioniert?

    PHP-Code:
    <?php $arrTags deserialize($this->replaceInsertTags('{{customcatalog::cc_reisedetail::autoitem::reise_altersgruppe}}'));
    liefert
    Code:
    array(1) { [0]=> string(3) "271" }
    sobald die Datenbankabfrage ergänzt wird:
    PHP-Code:
    $objTags =  \Database::getInstance()->prepare("SELECT * FROM tl_pct_customelement_tags WHERE id IN(".implode(',',$arrTags).")")->limit(1)->execute($entry->field('tag')->value());
        echo 
    $objTag->title
    erhalte ich keine Ausgabe mehr...


    Einen Kommentar schreiben:


  • Tim
    antwortet
    bei genau einem Tag

    PHP-Code:
    $arrTags deserialize($entry->field('tag-name')->value()); // array (ids)
    $objTags =  \Database::getInstance()->prepare("SELECT * FROM tl_pct_customelement_tags WHERE id IN(".implode(',',$arrTags).")")
    ->
    limit(1)
    ->
    execute();

    echo 
    $objTags->title
    Zuletzt geändert von Tim; 02.09.2016, 13:19.

    Einen Kommentar schreiben:


  • Manuel
    antwortet
    Kannst du mir sagen wie so eine Abfrage aussieht oder einen Verweis geben, wo das beschrieben ist?

    Einen Kommentar schreiben:


  • Tim
    antwortet
    Datenbank-Abfrage mit der Tags-ID

    Einen Kommentar schreiben:

Lädt...
X