Versions Compared
Key
- This line was added.
- This line was removed.
- Formatting was changed.
Table of Contents | ||||
---|---|---|---|---|
|
Custom your homepage template
Let's modify the Resources/views/content/full/root_folder.html.twig
adding a call to a subrequest to display the list of all existing Rides with pagination:
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
{% extends "pagelayout.html.twig" %} {% block content %} <script src="http://maps.google.com/maps/api/js?sensor=false"></script> <h3 class="center bottom-plus new-header">{{ ez_content_name(content) }}</h3> <div class="col-xs-10 text-justified"> {{ render( controller( "AppBundle:Homepage:getAllRides" ) ) }} {% endblock %} |
For the moment, we use a simple render()
Twig function but when we talk about cache, we will use render_esi
.
Create your sub controller to display list of Rides
Create your /src/AppBundle/Controller/HomepageController.php
with the function getAllRidesAction
:
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<?php namespace AppBundle\Controller; use eZ\Publish\API\Repository\Values\Content\Query; use eZ\Publish\API\Repository\Values\Content\Query\Criterion; use eZ\Publish\Core\MVC\Symfony\Controller\Controller; use eZ\Publish\API\Repository\Values\Content\Query\SortClause; use eZ\Publish\Core\Pagination\Pagerfanta\ContentSearchAdapter; use Pagerfanta\Pagerfanta; use Symfony\Component\HttpFoundation\Request; use eZ\Publish\API\Repository\Values\Content\Location; use eZ\Publish\API\Repository\Values\Content\LocationQuery; class HomepageController extends Controller { public function getAllRidesAction(Request $request) { $repository = $this->getRepository(); $locationService = $repository->getLocationService(); $contentService = $repository->getContentService(); $rootLocationId = $this->getConfigResolver()->getParameter('content.tree_root.location_id'); $rootLocation = $locationService->loadLocation($rootLocationId); $currentLocationId = 2; $currentLocation = $locationService->loadLocation($currentLocationId); $currentContent = $contentService->loadContentByContentInfo($currentLocation->contentInfo); $query = new Query(); $query->query = new Criterion\LogicalAnd( array( new Criterion\Subtree($rootLocation->pathString), new Criterion\Visibility(Criterion\Visibility::VISIBLE), new Criterion\ContentTypeIdentifier(array('ride')) ) ); $query->sortClauses = array( new SortClause\DatePublished(Query::SORT_ASC) ); $pager = new Pagerfanta( new ContentSearchAdapter($query, $this->getRepository()->getSearchService()) ); //FIXME : get $limit value from a custom parameter $limit = 10; $pager->setMaxPerPage($limit); $pager->setCurrentPage($request->get('page', 1)); return $this->render( 'content/view/list/rides.html.twig', array( 'location' => $currentLocation, 'content' => $currentContent, 'pagerRides' => $pager, ) ); } } |
Create template to display the list of Rides
Create app/Resources/AppBundle/views/list/rides.html.twig
template. You use a <table> to display the list of rides. The <thead> of the <table> is in this Ride list template and each <tr> (line of the table) is in the line ride template.
So each time you will use the line Ride template, you have to remember the choice of using a <tr>.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
{#Only display pagerfanta navigator if needed.#} {% if pagerRides.haveToPaginate() %} <nav class="text-center"> <ul class="pagination"> <div class="pagerfanta"> {{ pagerfanta( pagerRides, 'twitter_bootstrap_translated', {'routeName': location } ) }} </div> </ul> </nav> {% endif %} <div class="row regular-content-size"> <div class="col-md-8 col-md-offset-2 box-style"> <h3 class="center bottom-plus new-header">{{ 'List of all Rides' | trans }}</h3> {# Loop over the page results #} {% for ride in pagerRides %} {% if loop.first %} <table class="table table-hover"> <thead> <tr class="table-header"> <th></th> <th>Name</th> <th>Starting Point</th> <th>Ending Point</th> <th>Length</th> <th>Level</th> </tr> </thead> <tbody> {% endif %} {{ render( controller( 'ez_content:viewLocation', { 'locationId': ride.versionInfo.contentInfo.mainLocationId, 'viewType': 'line' } )) }} {% if loop.last %} </tbody> </table> {% endif %} {% endfor %} </div> </div> {#Only display pagerfanta navigator if needed.#} {% if pagerRides.haveToPaginate() %} <nav class="text-center"> <ul class="pagination"> <div class="pagerfanta"> {{ pagerfanta( pagerRides, 'twitter_bootstrap_translated', {'routeName': location } ) }} </div> </ul> </nav> {% endif %} |
The next step is to create the override rule to use a dedicated template for the view line of Rides.
To do so, you need to configure your bundle to inject override configuration.
Use a custom template to display view line of a Ride
You add the rule for the line_ride template to be used in your app/config/ezplatform.yml
file.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
system: site_group: content_view: line: line_ride: template: "content/view/line/ride.html.twig" match: Identifier\ContentType: "ride" |
Create your app/Resources/AppBundle/views/content/view/line/ride.html.twig
template. Remember, it's only one line of a table, so you will find a <tr> tag with some <td> tags.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<tr> <td> {{ ez_render_field( content, 'image', { parameters: { 'alias': 'small' }} ) }} </td> <td> <strong> <a href="{{ path( "ez_urlalias", { 'locationId': content.contentInfo.mainLocationId } ) }}" target="_self"> {{ ez_content_name( content ) }} </a> </strong> <p class="pre-small"> {{ ez_render_field( content, 'author') }} </p> </td> <td> {{ ez_render_field(content, 'starting_point', {'parameters': {'width': '100%', 'height': '100px', 'showMap': true, 'showInfo': true }} ) }} </td> <td> {{ ez_render_field(content, 'ending_point', {'parameters': {'width': '100%', 'height': '100px', 'showMap': true, 'showInfo': true }} ) }} </td> <td> <p>{{ ez_render_field( content, 'length' ) }} Km</p> </td> <td> <p>{{ ez_render_field( content, 'level' ) }}</p> </td> </tr> |
< Previous
Section | |||||||
---|---|---|---|---|---|---|---|
|
|
Panel | ||||||
---|---|---|---|---|---|---|
| ||||||
|