Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Paginador KnpPaginator en plantilla PHP

3 de septiembre de 2014

Hola buenas,

La verdad es que he invertido bastante tiempo buscando y aún no he conseguido hacer que el KnpPaginator funcione en una plantilla de PHP. Copié todo el template.twig y lo llevé a PHP cambiando esto:

{% if pageCount > 1 %}
<div class="pagination">
    {% if first is defined and current != first %}
        {{ path(route, query|merge({(pageParameterName): first})) }}">&lt;&lt;</a>
        </span>
    {% endif %}
 
    {% if previous is defined %}
        {{ path(route, query|merge({(pageParameterName): previous})) }}">&lt;</a>
        </span>
    {% endif %}
 
    {% for page in pagesInRange %}
        {% if page != current %}
            {{ path(route, query|merge({(pageParameterName): page})) }}">{{ page }}</a>
            </span>
        {% else %}
            {{ page }}</span>
        {% endif %}
 
    {% endfor %}
 
    {% if next is defined %}
        {{ path(route, query|merge({(pageParameterName): next})) }}">&gt;</a>
        </span>
    {% endif %}
 
    {% if last is defined and current != last %}
        {{ path(route, query|merge({(pageParameterName): last})) }}">&gt;&gt;</a>
        </span>
    {% endif %}
</div>
{% endif %}

por esto:

<?php if ($pageCount > 1): ?>
<div class="pagination">
    <?php if ($first && $current != $first): ?>
        <?php echo $view['router']->generate('route', array_merge(array('pageParameterName' => 'first'))) ?>">&lt;&lt;</a>
        </span>
    <?php endif ?>
 
    <?php if ($previous): ?>
        <?php echo $view['router']->generate('route', array_merge(array('pageParameterName' => 'previous'))) ?>">&lt;</a>
        </span>
    <?php endif ?>
 
    <?php foreach ($pagesInRange as $key => $page): ?>
        <?php if ($page != $current ):?>
            <?php echo $view['router']->generate('route', array_merge(array('pageParameterName' => 'page'))) ?>"><?php echo $page ?></a>
            </span>
        <?php else: ?>
            <?php echo $page ?></span>
        <?php endif; ?>
 
    <?php endforeach; ?>
 
    <?php if (defined($next)): ?>
        <?php echo $view['router']->generate('route', array_merge(array('pageParameterName' => 'next'))) ?>">&gt;</a>
        </span>
    <?php endif; ?>
 
    <?php if (defined($last) && $current != $last): ?>
        <?php echo $view['router']->generate('route', array_merge(array('pageParameterName' => 'last'))) ?>">&gt;&gt;</a>
        </span>
    <?php endif; ?>
</div>
<?php endif; ?>

Pero me está generando errores:

"Notice: Undefined variable: previous in K:\xampp\htdocs\asaptimesheets\src\Asap\TimesheetsBundle\Resources\views\Default\sliding.html.php line 9"

De antemano gracias


Respuestas

#1

El código PHP esta bien, y lo que te tira no es un error, es un "Notice". En la mayoría de los servidores no te larga ese notice. Lo tienes que configurar bien en el servidor modificando el php.ini.

Si no tienes acceso al php.ini puedes agregar lo siguiente al comienzo de los archivos app.php y app_dev.php:

<?php
 
error_reporting(E_ALL ^ E_NOTICE);
 
// ...

Busca en Google error_reporting. O también puedes hacer:

$previous= isset($previous) ? $previous: null;
<?php if ($previous): ?>
 
// o para tu caso simplemente
<?php if (isset($previous)): ?>

@AjPZZO

4 septiembre 2014, 3:11
#2

Muchas Gracias por tu pronta respuesta @AjPZZO sin embargo ahora tengo problemas con la url, es seguro que mi conversión de la expresión twig a php no e fue la correcta. Actualmente hice lo siguiente, cambie esto:

<a href="{{ path(route, query|merge({(pageParameterName): previous})) }}">&lt;</a>

A esto:

<a href="<?php echo $view['router']->generate('route', array_merge(array('pageParameterName' => 'page'), true)) ?>"><?php echo $page ?></a>

Me podrian ayudar a hacer la conversion funcional?, se que mi error esta en la expresión twig query|merge que yo cambie a array_merge() en php pero no esta funcionando.

Gracias de antemano

@ponceelrelajado

4 septiembre 2014, 18:59
#3

Buenas ya conseguí la solución, Gracias a Dios. Posteo el sliding.html.php por si alguien mas lo requiere:

<?php if ($pageCount > 1): ?>
    <div class="pagination">
        <?php if (isset($first) && $current != $first): ?>
            <a href="<?php echo $view->escape($view['router']->generate($route, \array_merge($query, [$pageParameterName => $first]))); ?>">«</a>
        <?php endif; ?>
 
        <?php if (isset($previous)): ?>
            <a href="<?php echo $view->escape($view['router']->generate($route,\array_merge($query, [$pageParameterName => $previous]))); ?>" rel="prev">‹</a>
        <?php endif; ?>
 
        <?php foreach ($pagesInRange as $page): ?>
            <?php if ($page != $current): ?>
                <a href="<?php echo $view->escape($view['router']->generate($route, \array_merge($query, [$pageParameterName => $page]))); ?>"><?php echo $page; ?></a>
            <?php else: ?>
                <?php echo $page; ?></span>
            <?php endif; ?>
        <?php endforeach; ?>
 
        <?php if (isset($next)): ?>
            <a href="<?php echo $view->escape($view['router']->generate($route, \array_merge($query, [$pageParameterName => $next]))); ?>" rel="next">›</a>
        <?php endif; ?>
 
        <?php if (isset($last) && $current != $last): ?>
            <a href="<?php echo $view->escape($view['router']->generate($route, \array_merge($query, [$pageParameterName => $last]))); ?>">»</a>
        <?php endif; ?>
    </div>
<?php endif; ?>

Saludos!

@ponceelrelajado

8 septiembre 2014, 23:09
#4

¡Muchas gracias por aportar la solución! Seguro que es útil para cualquiera que necesite hacer esta misma conversión. Gracias.

@javiereguiluz

8 septiembre 2014, 23:11