// *********************************************
public function getTotalTabla($tabla)
{
$datos = $this->getDoctrine()
->getManager()
->createQueryBuilder('edcBundle:'.$tabla)
->select('Count(c)')
->from('edcBundle:'.$tabla,'c')
->getQuery()
->getSingleScalarResult();
return $datos;
}
...
// **************************************
public function listarCineastasAction(Request $request)
{
// check si está logado
$session = $request->getSession();
if(!$session->has("id")) {
$this->get('session')->getFlashBag()->add(
'mensaje',
'Debe estar logueado para ver este contenido'
);
return $this->redirect($this->generateUrl('login'));
}
// Crear la paginación
$total_count = $this->getTotalTabla('cineastas');
$page = $request->get('page');
$porpagina = 4;
$totalPaginas = ceil($total_count/$porpagina);
// echo "TOTALPAGINAS:".$totalPaginas;exit;
if(!is_numeric($page)) {
$page=1;
}else
{
$page = floor($page);
}
if($total_count <= $porpagina)
{
$page=1;
}
if(($page*$porpagina) > $total_count)
{
$page = $totalPaginas;
}
$offset = 0;
if($page > 1)
{
$offset = $porpagina*($page-1);
}
$em = $this->getDoctrine()
->getManager()
->createQueryBuilder('edcBundle:cineastas')
->select('c')
->from('edcBundle:cineastas','c')
->orderBy("c.nombre","asc")
->setFirstResult($offset)
->setMaxResults($porpagina)
->getQuery();
$datos=$em->getArrayResult();
return $this->render('edcBundle:Default:listarCineastas.html.twig',
compact("datos", "porpagina", "totalPaginas", "total_count", "page"));
}
La vista listarCineastas.html.twig (tienes que tener incluido Bootstrap):
{% extends 'edcBundle::viewEDC.html.twig' %}
{# En la vista de viewEDC ya tiene tanto el CSS como el JS de Bootstrap #}
{% block body %}
{{ parent() }}
<h1>Listado de cineastas con Paginación</h1>
{% for flashMessage in app.session.flashbag.get('mensaje') %}
<span class="alert-success">
{{ flashMessage }}
<hr />
</span>
{% endfor %}
<hr />
<table class="table table-bordered">
<tbody>
<th>Nombre</th>
</tbody>
{% for dato in datos %}
<tr>
<td>{{dato.nombre}}</td>
<td>
<a href="{{ path('editCineasta', {'id':dato.id}) }}" title="Editar">Editar</a>
-
<a onclick="return eliminarCineasta({{ dato.id }},'{{ dato.nombre }}');" href="{{ path('delCineasta', {'id':dato.id}) }}" title="Eliminar">Eliminar</a>
</td>
</tr>
{% endfor %}
{# PAGINACION #}
<tr>
<td colspan="3" style="text-align: right;">
<ul class="pagination">
{% for i in 1.. totalPaginas %}
{% if loop.first %}
<li {% if page == 1%} class="disabled" {% endif %}>
<a href="{{path('listarCineastas')}}?page={{page-1}}" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
{%endif%}
<li {% if page == loop.index %} class="active" {% endif %}>
<a href="{{path('listarCineastas')}}?page={{loop.index}}">{{loop.index}}</a>
</li>
{%if loop.last %}
<li {% if page == totalPaginas%} class="disabled" {% endif %}>
<a href="{{path('listarCineastas')}}?page={{page+1}}" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
{% endif %}
{% endfor %}
</ul>
</td>
</tr>
</table>
<script>
function eliminarCineasta(idCineasta, nombre) {
if (confirm("¿Estás seguro de querer eliminar el cineasta "+nombre+"?"))
return true;
else
return false;
}
</script>
{% endblock %}

No hay comentarios:
Publicar un comentario