heimrichhannot / contao-news-pagination-bundle
Automatic or manual content pagination for news or other content in contao.
Installs: 696
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 6
Forks: 1
Open Issues: 1
Type:contao-bundle
Requires
- php: ^8.1
- contao/core-bundle: ^4.13
- heimrichhannot/contao-head-bundle: ^1.12
- heimrichhannot/contao-utils-bundle: ^2.230
- symfony/http-foundation: ^5.4 || ^6.0
- wa72/htmlpagedom: ^1.3 || ^2.0
This package is auto-updated.
Last update: 2024-10-23 11:34:50 UTC
README
This bundle offers automatic content pagination for the core news reader module and the heimrichhannot/contao-reader-bundle.
Features
- add a pagination for navigating between the news parts
- automatic splitting
- split news articles by an adjustable character amount respecting html tags
- manual splitting
- split news content by wrapping the content elements in special start and stop content elements
- optional support for hofff/contao-content-navigation
Usage
Setup
-
Install with composer or contao manager
composer require heimrichhannot/contao-news-pagination-bundle
-
Update database
-
You'll find new configuration options in the news reader frontend module or your reader configuration
-
Add
<?= $this->newsPagination ?>
to your details template (e.g. "news_full") to output the pagination navigation
Known limitations for automatic pagination
- currently only ce_text not nested in another content element (like an accordion) is supported for splitting, other elements are removed properly according to current page number though (completely)
Developers
PaginationUtil
The script to do the automatic pagination can be used by developers by using the PaginationUtil
.
Example:
use HeimrichHannot\NewsPaginationBundle\Util\PaginationUtil; use Wa72\HtmlPageDom\HtmlPageCrawler; class ParseArticlesListener { /** @var PaginationUtil */ protected $paginationUtil; public function __invoke(FrontendTemplate $template, array $newsEntry, Module $module) { $result = $this->paginationUtil->paginateHtmlText($template->text, 500, 1, [ 'selector' => '.ce_text_custom div.text', 'removePageElementsCallback' => function (array $result, int $currentPage, int $page) { // Always show page 1 if (1 === $page) { return false; } // Insert custom html after page 3 if (3 === $page) { $someCustomInsertion = new HtmlPageCrawler('<div class="alert">Custom Notice!</div>'); $someCustomInsertion->insertAfter(end($result[$page])['element']); } // Remove all element not on the current page (default) return $page != $currentPage; } ]); } }