Ankündigung

Einklappen
Keine Ankündigung bisher.

Eigenes CC Objekt und SimpleFilter

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

  • denniserdmann
    hat ein Thema erstellt Eigenes CC Objekt und SimpleFilter

    Eigenes CC Objekt und SimpleFilter

    Moin Tim,

    ich habe folgenden Code:

    PHP-Code:
    <?php
    // CC objekt erstellen
    $objChildCC = \PCT\CustomElements\Plugins\CustomCatalog\Core\CustomCatalogFactory::findByTableName('MYTABLE');
    $objChildCC->setLayoutTemplate('customcatalog_default');
                   
    ?>
                            
    <?php // einen einfachen filter erstellen für das Feld ID
    $objChildFilter = new \PCT\CustomElements\Filters\SimpleFilter();
    $options = array
                            (
                                
    'column'    => 'id',
                                
    'operation'    => 'IN',
                                
    'value'        => '1,4'// ist eigentlich eine Variable mit einer kommaseparierten ID-Liste
                            
    );
                            
    $objChildFilter->setOptions($options);
                            
    $objChildCC->addFilter($objChildFilter);
                
    // den CC rendern, durchläuft das oben gesetzte Template, wo dann auch wieder die Template-Variablen greifen.
    echo 'ausgabe: '.$objChildCC->render();
                
    ?>

    Der Filter sollte eigentlich 2 Produkte erkennen und übergeben. Bei mir ist es aber nur ein Produkt. Verwende ich den falschen Filter? Oder fehlt noch irgendwas?

    Viele Grüße,
    Dennis

  • Tim
    antwortet
    Wenn Du eine Pagination möchtest, musst du eine CC-Liste erzeugen.
    Der einfachste Weg dafür ist meines Erachtens das Inserttag. Man kann auch über Controller::getFrontendModule(...) gehen, ist aber imgrunde das gleiche. Den vollständigen OOP Weg würde ich hier nicht gehen.
    Zuletzt geändert von Tim; 08.02.2021, 07:28.

    Einen Kommentar schreiben:


  • denniserdmann
    antwortet
    Moin Tim,

    danke für dein Feedback.

    Eigentlich fanden wir doch beide, dass die jetzige Lösung ohne Inserttag viel eleganter ist. Bedeutet dass, das eine Pagination nur mit Inserttag möglich wäre?

    Viele Grüße und schönes Wochenende!
    Dennis

    Einen Kommentar schreiben:


  • Tim
    antwortet
    Hi Dennis,
    Paginationen werden in Liste Modulen erstellt. Du musst quasi ein CC-Liste-Modul simulieren.

    Erstell dir ein Psydo-Liste-Modul mit allen gewünschten Einstellungen und setze es via Inserttag dort ein, wo es angezeigt werden soll.

    Diese Vorlage macht es vor: https://forum.premium-contao-themes....plate-ausgeben

    Möchte man vorher noch Filterungen ansetzen, kann man diese via dyn. GET-Parameter vor dem Inserttag definieren.
    In der Vorlage wird die Kind-Listen-Filterung dyn. angesprochen.
    Zuletzt geändert von Tim; 02.02.2021, 07:18.

    Einen Kommentar schreiben:


  • denniserdmann
    antwortet
    Moin Tim,

    ich wollte mein CC Objekt nun um eine Pagination erweitern, also habe ich noch die Zeile customcatalog_perPage ergänzt (analog zum FE-Modul):

    PHP-Code:
     // CC objekt erstellen
    $objModule = new \StdClass;
    $objModule->customcatalog 'myTable';
    $objModule->customcatalog_jumpTo 10//
    $objModule->customcatalog_template 'customcatalog_default';
    $objModule->customcatalog_filter_showAll '';
    $objModule->customcatalog_perPage 4;
    … 
    Aber es werden weiterhin alle Produkte ausgegeben. Wird die Pagination nicht unterstützt, muss sie über den Filter laufen oder läuft es ganz anders?

    Danke und viele Grüße,
    Dennis

    Einen Kommentar schreiben:


  • Tim
    antwortet
    Du lässt den CC ja rendern, das Rendern erstellt dir auch die Links. Korrekt, das wäre in dem Child-Template. Hier gibt es einige Methoden die Links direkt auszuwerten. Schau mal hier: https://forum.premium-contao-themes....late-variablen

    ---
    Du kannst CC quasi ein Liste-Modul vorgauckeln. Nutze hier die Tabellennamen von CC aus tl_module. Das ist fast der beste Weg, weil das CC Objekt dann alle Infos direkt einsetzt

    $objModule = new \StdClass;
    $objModule->customcatalog = 'myTable';
    $objModule->customcatalog_jumpTo = 10; // detailseite auf id=10
    $objModule->customcatalog_template = 'customcatalog_default'
    ...

    $objCC = \Contao\CustomCatalog::findByModule($objModule); (diese Klasse erbt von CustomCatalogFactory. Macht das Schreiben kürzer )

    ---
    Links ausserhalb des dazugehörigen CC-Templates erstellen geht auch über das CC Objekt. Du brauchst aber den Datensatz für der Link gelten soll. Die Methoden sind öffentlich in der CustomCatalog Klasse:

    $objRow = DATENBANK_RESULTAT ODER MODEL des CC-Eintrags

    $arrLinks = $objCC->prepareDetailsLinks($objRow);
    var_dump($arrLinks);

    // direkt den Link
    $strLink = $objCC->generateDetailsUrl($objRow, $intJumpTo);
    var_dump($strLink);

    Einen Kommentar schreiben:


  • denniserdmann
    antwortet
    Ah, das war's. Danke jetzt klappt es.

    Wo wir gerade beim eigenen CC Objekt sind: Kann ich (so wie fürs Template) auch eine Weiterleitung für den Reader angeben? Also so, dass
    PHP-Code:
    <?php echo $entry->get('more'); ?>
    den korrekten Link enthält. Wenn ja, kann ich alle Möglichkeiten zur Übergabe irgendwo nachlesen?

    Oder muss ich mir den Link im Child-Template zusammenbauen?

    Einen Kommentar schreiben:


  • Tim
    antwortet
    Mach value mal zum array mit den Ids.

    Einen Kommentar schreiben:

Lädt...
X