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.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Eigenes CC Objekt und SimpleFilter
Einklappen
X
-
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:
-
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:
-
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;
…
Danke und viele Grüße,
Dennis
Einen Kommentar schreiben:
-
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:
-
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, dassPHP-Code:<?php echo $entry->get('more'); ?>
Oder muss ich mir den Link im Child-Template zusammenbauen?
Einen Kommentar schreiben:
-
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,
DennisStichworte: -
Einen Kommentar schreiben: