appventus/avlist-bundle

此包已被废弃,不再维护。未建议替代包。

Symfony AvListBundle

安装数: 9,635

依赖者: 0

建议者: 0

安全: 0

星标: 6

关注者: 11

分支: 1

开放问题: 0

类型:symfony-bundle

1.0.1 2016-10-11 09:40 UTC

This package is auto-updated.

Last update: 2021-12-21 22:33:43 UTC


README

在 Symfony2 中轻松创建分页和可排序列表

  1. 安装

将以下内容添加到您的 composer 中

"appventus/avlist-bundle": "dev-master"
  1. 如何使用它?

a) 控制器

这是一个列出实体的经典操作

use Symfony\Component\HttpFoundation\Request;

class FooController extends Controller
{
    /**
     * Lists all Foo entities.
     *
     */
    public function indexAction(Request $request)
    {
        $em = $this->getDoctrine()->getEntityManager();
        $qb = $em->getRepository(MyBundle:Foo)->findAll();

        // Create an AvList
        $list = $this->get('av_list')->getList($qb, null, array(
            'max_per_page' => 20,
        ));

        $list->addColumn('title', null, 'myList.column.title', true, 'entity.title');
        $list->addColumn('startDate', array(array("name" => "date", "params" => array('d/m/Y'))), 'myList.column.startDate', true, 'entity.startDate');


        return array(
            'list' => $list,
        );
        
        if ($this->get('request')->isXmlHttpRequest()) {
            return $this->render($list->getTemplate(), array(
                'list' => $list,
            ));
        } else {
            return array(
                'list' => $list,
            );
        }
    }
}

addColunmn 允许您添加/定义要在列表中显示的列。为了

    1. 您可以定义要显示的字段
    1. 是否有特殊的 Twig 过滤器可以用于变量以正确显示?
    1. 标签(th)
    1. 我们可以在该列上进行排序吗?
    1. 如果是这样,则在哪个字段上

b) 视图(可选)

如果您想覆盖默认视图,您必须编写一个带有布局的索引和一个仅包含列表的片段

index.html.twig

{% extends "MyBundle::layout.html.twig" %}

{% block content %}
    <h1>Foo list</h1>
    {% include 'MyBundle:Foo:indexPartial.html.twig' with {'list':list}%}
{% endblock %}

是的,它非常简约,但非常重要。

现在是我们的片段

{% if list.pager.nbResults > 0 %}
    <div id="{{ list.option('id') }}">
        <table class="table">
            <thead>
                <tr>
                    <th class="sortable" data-target="f.name">Name</th>
                    <th class="sortable" data-target="f.price">Price</th>
                    <th>Description</th>
                </tr>
            </thead>
            <tbody>
                {% for foo in list.pager %}
                    <tr>
                        <td>{{ foo.name }}</td>
                        <td>{{ foo.price }}</td>
                        <td>{{ foo.name }}</td>
                    </tr>
                {% endfor %}
            </tbody>
        </table>
        {% include 'AvListBundle:AvList:control.html.twig' with {'list':list}%}
    </div>
{% else %}
    <p>No Foos :(</p>
{% endif %}

看这里!

  1. 它是如何工作的?

在部分视图中,您在 th 标签上设置一个可排序的类和一个带有要搜索的字段值的 id。在我们的例子中,实体 Foo 在查询构建器中的别名为 "f",因此要按 Foo 的名称排序,您设置以下 th id:"f.name"。

  1. 选项

此包使用 PagerFanta 包构建分页器,更具体地说,是 TwitterBootstrapView。此视图提供了选项,并且您可以在实例化 AvList 时将它们作为第二个参数传递

$list = $this->get('av_list');
$list->addOption("proximity", 3);
$list->addOption("previous_message", "Précédent");

请参阅 PagerFanta 文档以获取更多信息

  1. 页面上的多个列表

如果您需要在单个页面上有多个列表组件,您将不得不定义路由选项(指定一个不同的 URL 调用请求的 URL)。可选地,如果您的路由需要参数,您显然可以通过 route_parameters 选项传递一个数组。此外,您将无法使用 av_list 服务,因为存在单例模式问题(如果您使用服务,您总是使用相同的对象,因此您将覆盖值而不是创建新列表)。

/**
 * Lists all Help\FaqItem entities.
 *
 * @Route("/", name="admin_myentity_list")
 * @Route("/ajax/cat/{id}", name="ajax_admin_myentity_list_by_category")
 * @Method("GET")
 * @Template()
 */
public function indexAction($id = null)
{
    $categories = Your_function();
    foreach ($categories as $key => $category) {
        $list = new AvList($request, $this->get('templating'));
        $list->setQueryBuilder($em->getRepository('MyBundle:MyEntity')->createQueryBuilder('e')->where('e.category = :category')->setParameter('category', $category));
        $list->setTemplate($partialTemplate);
        $list->setOptions(array(
                'route'            => 'ajax_admin_myentity_list_by_category',
                'route_parameters' => array('id' => $category->getId()),
                'theme'            => 'range',
                'maxPerPage'       => 5,
                'container_class'  => $category->getId().'-myentity-list',
                'container_id'     => $category->getId().'-myentity-list'
        ));
        $params["lists"][$category->getId()] = $list;
    }
}
  1. 自定义控制主题

默认情况下,AvList 提供了一个主题:范围。此主题添加了一些基本操作,例如:<- [10,20] on 100 ->

如果您想,您可以创建自己的主题,将主题名称设置为 "theme" 选项,并将其放在 app/Resources/AvListBundle/views/AvList/yourCustomThemeFileName.html.twig 中