base_list.html.twig 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. {#
  2. This file is part of the Sonata package.
  3. (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
  4. For the full copyright and license information, please view the LICENSE
  5. file that was distributed with this source code.
  6. #}
  7. {% extends base_template %}
  8. {% block actions %}
  9. <div class="sonata-actions">
  10. <ul>
  11. {% if admin.isGranted('CREATE')%}
  12. <li class="sonata-action-element"><a href="{{ admin.generateUrl('create') }}">{% trans from 'SonataAdminBundle' %}link_action_create{% endtrans %}</a></li>
  13. {% endif %}
  14. </ul>
  15. </div>
  16. {% endblock %}
  17. {% block side_menu %}{{ admin.sidemenu(action).render|raw }}{% endblock %}
  18. {% block list_table %}
  19. {% set batchactions = admin.batchactions %}
  20. {% if admin.datagrid.results|length > 0 %}
  21. <form action="{{ admin.generateUrl('batch') }}" method="POST" >
  22. <table>
  23. {% block table_header %}
  24. <tr class="sonata-ba-list-field-header">
  25. {% for field_description in admin.list.elements %}
  26. {% if field_description.getOption('code') == '_batch' and batchactions|length > 0%}
  27. <th class="sonata-ba-list-field-header sonata-ba-list-field-header-batch">
  28. <input type="checkbox" id="list_batch_checkbox" />
  29. </th>
  30. {% else %}
  31. {% set sortable = false %}
  32. {% if field_description.options.sortable is defined and field_description.options.sortable%}
  33. {% set sortable = true %}
  34. {% set current = admin.datagrid.values._sort_by == field_description.options.sortable %}
  35. {% set sort_parameters = admin.modelmanager.sortparameters(field_description, admin.datagrid) %}
  36. {% set sort_active_class = current ? 'sonata-ba-list-field-order-active' : '' %}
  37. {% set sort_by = current ? admin.datagrid.values._sort_order : field_description.options._sort_order %}
  38. {% endif %}
  39. {% spaceless %}
  40. <th class="sonata-ba-list-field-header-{{ field_description.type}} {% if sortable %} sonata-ba-list-field-header-order-{{ sort_by|lower }} {{ sort_active_class }}{% endif %}">
  41. {% if sortable %}<a href="{{ admin.generateUrl('list', sort_parameters) }}">{% endif %}
  42. {% if field_description.options.name is defined %}
  43. {{ field_description.options.name|trans({}, admin.translationdomain) }}
  44. {% else %}
  45. {{ field_description.name|trans({}, admin.translationdomain) }}
  46. {% endif %}
  47. {% if sortable %}</a>{% endif %}
  48. </th>
  49. {% endspaceless %}
  50. {% endif %}
  51. {% endfor %}
  52. </tr>
  53. {% endblock %}
  54. {% block table_body %}
  55. {% for object in admin.datagrid.results %}
  56. <tr>
  57. {% for field_description in admin.list.elements %}
  58. {{ object|render_list_element(field_description) }}
  59. {% endfor %}
  60. </tr>
  61. {% endfor %}
  62. {% endblock %}
  63. {% block table_footer %}
  64. {% if admin.datagrid.pager.haveToPaginate() %}
  65. <tr>
  66. <td colspan="{{ admin.list.elements|length }}" class="pager">
  67. <ul>
  68. {% if admin.datagrid.pager.page != admin.datagrid.pager.previouspage %}
  69. <li><a href="{{ admin.generateUrl('list', admin.datagrid.values|merge({'_page': admin.datagrid.pager.previouspage})) }}">{% trans from 'SonataAdminBundle' %}link_previous_pager{% endtrans %}</a></li>
  70. {% endif %}
  71. {# Set the number of pages to display in the pager #}
  72. {% for page in admin.datagrid.pager.getLinks(5) %}
  73. {% if page == admin.datagrid.pager.page %}
  74. <li>{{ page }}</li>
  75. {% else %}
  76. <li><a href="{{ admin.generateUrl('list', admin.datagrid.values|merge({'_page': page})) }}">{{ page }}</a></li>
  77. {% endif %}
  78. {% endfor %}
  79. {% if admin.datagrid.pager.page != admin.datagrid.pager.nextpage %}
  80. <li><a href="{{ admin.generateUrl('list', admin.datagrid.values|merge({'_page': admin.datagrid.pager.nextpage})) }}">{% trans from 'SonataAdminBundle' %}link_next_pager{% endtrans %}</a></li>
  81. {% endif %}
  82. </ul>
  83. </td>
  84. </tr>
  85. {% endif %}
  86. {% endblock %}
  87. </table>
  88. {% if batchactions|length > 0%}
  89. <script type="text/javascript">
  90. jQuery(document).ready(function($){
  91. $('#list_batch_checkbox').click(function(){
  92. $(this).closest('table').find("td input[type='checkbox']").attr('checked', $(this).is(':checked'));
  93. });
  94. $('.delete_link').click(function(e){
  95. if (!confirm('{% trans from 'SonataAdminBundle' %}confirm_msg{% endtrans %}')) e.preventDefault();
  96. });
  97. });
  98. </script>
  99. <div class="sonata-ba-list-actions">
  100. <select name="action">
  101. {% for action, label in batchactions %}
  102. <option value="{{ action }}">{{ label }}</option>
  103. {% endfor %}
  104. </select>
  105. <input type="submit" value="{% trans from 'SonataAdminBundle' %}btn_batch{% endtrans %}" />
  106. </div>
  107. {% endif %}
  108. </form>
  109. {% else %}
  110. <p class="notice">
  111. {% trans from 'SonataAdminBundle' %}no_result{% endtrans %}
  112. </p>
  113. {% endif %}
  114. {% endblock %}
  115. {% block list_filters %}
  116. {% if admin.datagrid.filters %}
  117. <form class="sonata-filter-form" action="{{ admin.generateUrl('list') }}" method="GET">
  118. {% for filter in admin.datagrid.filters %}
  119. <div>
  120. {{ filter|render_filter_element }}</td>
  121. </div>
  122. {% endfor %}
  123. <input type="submit" value="{% trans from 'SonataAdminBundle' %}btn_filter{% endtrans %}" />
  124. <a href="{{ admin.generateUrl('list') }}">{% trans from 'SonataAdminBundle' %}link_reset_filter{% endtrans %}</a>
  125. </form>
  126. {% endif %}
  127. {% endblock %}