base_list.html.twig 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  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.hasRoute('create') and admin.isGranted('CREATE')%}
  12. <li class="btn"><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 %}{{ knp_menu_render(admin.sidemenu(action), {}, 'list') }}{% endblock %}
  18. {% block list_table %}
  19. {% set batchactions = admin.batchactions %}
  20. {% if admin.datagrid.results|length > 0 %}
  21. <form action="{{ admin.generateUrl('batch', admin.filterParameters) }}" method="POST" >
  22. <table class="zebra-striped bordered-table">
  23. {% block table_header %}
  24. <thead>
  25. <tr class="sonata-ba-list-field-header">
  26. {% for field_description in admin.list.elements %}
  27. {% if field_description.getOption('code') == '_batch' and batchactions|length > 0%}
  28. <th class="sonata-ba-list-field-header sonata-ba-list-field-header-batch">
  29. <input type="checkbox" id="list_batch_checkbox" />
  30. </th>
  31. {% else %}
  32. {% set sortable = false %}
  33. {% if field_description.options.sortable is defined and field_description.options.sortable%}
  34. {% set sortable = true %}
  35. {% set current = admin.datagrid.values._sort_by == field_description.options.sortable %}
  36. {% set sort_parameters = admin.modelmanager.sortparameters(field_description, admin.datagrid) %}
  37. {% set sort_active_class = current ? 'sonata-ba-list-field-order-active' : '' %}
  38. {% set sort_by = current ? admin.datagrid.values._sort_order : field_description.options._sort_order %}
  39. {% endif %}
  40. {% spaceless %}
  41. <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 %}">
  42. {% if sortable %}<a href="{{ admin.generateUrl('list', sort_parameters) }}">{% endif %}
  43. {{ admin.trans(field_description.label) }}
  44. {% if sortable %}</a>{% endif %}
  45. </th>
  46. {% endspaceless %}
  47. {% endif %}
  48. {% endfor %}
  49. </tr>
  50. </thead>
  51. {% endblock %}
  52. {% block table_body %}
  53. <tbody>
  54. {% for object in admin.datagrid.results %}
  55. <tr>
  56. {% for field_description in admin.list.elements %}
  57. {{ object|render_list_element(field_description) }}
  58. {% endfor %}
  59. </tr>
  60. {% endfor %}
  61. </tbody>
  62. {% endblock %}
  63. {% block table_footer %}
  64. <tr>
  65. <th colspan="{{ admin.list.elements|length - 1 }}">
  66. {{ admin.datagrid.pager.page }} / {{ admin.datagrid.pager.lastpage }}
  67. </th>
  68. <th>
  69. {% transchoice admin.datagrid.pager.nbresults with {'%count%': admin.datagrid.pager.nbresults} from 'SonataAdminBundle' %}list_results_count{% endtranschoice %}
  70. </th>
  71. </tr>
  72. {% if admin.datagrid.pager.haveToPaginate() %}
  73. <tr>
  74. <td colspan="{{ admin.list.elements|length }}" class="pager">
  75. <div class="pagination">
  76. <ul>
  77. {% if admin.datagrid.pager.page != 1 %}
  78. <li><a href="{{ admin.generateUrl('list', admin.modelmanager.paginationparameters(admin.datagrid, 1)) }}" title="{% trans from 'SonataAdminBundle' %}link_first_pager{% endtrans %}">&laquo;</a></li>
  79. {% endif %}
  80. {% if admin.datagrid.pager.page != admin.datagrid.pager.previouspage %}
  81. <li><a href="{{ admin.generateUrl('list', admin.modelmanager.paginationparameters(admin.datagrid, admin.datagrid.pager.previouspage)) }}" title="{% trans from 'SonataAdminBundle' %}link_previous_pager{% endtrans %}">&lsaquo;</a></li>
  82. {% endif %}
  83. {# Set the number of pages to display in the pager #}
  84. {% for page in admin.datagrid.pager.getLinks(5) %}
  85. {% if page == admin.datagrid.pager.page %}
  86. <li class="active"><a href="{{ admin.generateUrl('list', admin.modelmanager.paginationparameters(admin.datagrid, page)) }}">{{ page }}</a></li>
  87. {% else %}
  88. <li><a href="{{ admin.generateUrl('list', admin.modelmanager.paginationparameters(admin.datagrid, page)) }}">{{ page }}</a></li>
  89. {% endif %}
  90. {% endfor %}
  91. {% if admin.datagrid.pager.page != admin.datagrid.pager.nextpage %}
  92. <li><a href="{{ admin.generateUrl('list', admin.modelmanager.paginationparameters(admin.datagrid, admin.datagrid.pager.nextpage)) }}" title="{% trans from 'SonataAdminBundle' %}link_next_pager{% endtrans %}">&rsaquo;</a></li>
  93. {% endif %}
  94. {% if admin.datagrid.pager.page != admin.datagrid.pager.lastpage %}
  95. <li><a href="{{ admin.generateUrl('list', admin.modelmanager.paginationparameters(admin.datagrid, admin.datagrid.pager.lastpage)) }}" title="{% trans from 'SonataAdminBundle' %}link_last_pager{% endtrans %}">&raquo;</a></li>
  96. {% endif %}
  97. </ul>
  98. </div>
  99. </td>
  100. </tr>
  101. {% endif %}
  102. {% endblock %}
  103. </table>
  104. {% if batchactions|length > 0%}
  105. <script type="text/javascript">
  106. jQuery(document).ready(function($){
  107. $('#list_batch_checkbox').click(function(){
  108. $(this).closest('table').find("td input[type='checkbox']").attr('checked', $(this).is(':checked'));
  109. });
  110. $('.delete_link').click(function(e){
  111. if (!confirm('{% trans from 'SonataAdminBundle' %}confirm_msg{% endtrans %}')) e.preventDefault();
  112. });
  113. });
  114. </script>
  115. <div class="actions sonata-ba-list-actions">
  116. <select name="action">
  117. {% for action, options in batchactions %}
  118. <option value="{{ action }}">{{ options.label }}</option>
  119. {% endfor %}
  120. </select>
  121. <label>
  122. <input type="checkbox" name="all_elements"/>
  123. {% trans from 'SonataAdminBundle' %}all_elements{% endtrans %}
  124. </label>
  125. <input type="submit" class="btn primary" value="{% trans from 'SonataAdminBundle' %}btn_batch{% endtrans %}" />
  126. </div>
  127. {% endif %}
  128. </form>
  129. {% else %}
  130. <p class="notice">
  131. {% trans from 'SonataAdminBundle' %}no_result{% endtrans %}
  132. </p>
  133. {% endif %}
  134. {% endblock %}
  135. {% block list_filters %}
  136. {% if admin.datagrid.filters %}
  137. <form class="sonata-filter-form form-stacked {{ admin.isChild and 1 == admin.datagrid.filters|length ? 'hide' : '' }}" action="{{ admin.generateUrl('list') }}" method="GET">
  138. <fieldset class="filter_legend">
  139. <legend class="filter_legend {{ admin.datagrid.hasActiveFilters ? 'active' : 'inactive' }}">{% trans from 'SonataAdminBundle' %}label_filters{% endtrans %}</legend>
  140. <div class="filter_container {{ admin.datagrid.hasActiveFilters ? 'active' : 'inactive' }}">
  141. <table class="bordered-table">
  142. {% for filter in admin.datagrid.filters %}
  143. <tr id="filter_{{ filter.name }}_row" class="filter {{ admin.datagrid.hasActiveFilter(filter.name) ? 'active' : 'inactive' }}">
  144. <td class="filter-title">{{ admin.trans(filter.label) }}</td>
  145. <td class="filter-type">{{ form_widget(form.getChild(filter.name).getChild('type')) }}</td>
  146. <td class="filter-value">{{ form_widget(form.getChild(filter.name).getChild('value')) }}</td>
  147. </tr>
  148. {% endfor %}
  149. </table>
  150. <input type="hidden" name="filter[_page]" id="filter__page" value="1" />
  151. {% set foo = form.getChild('_page').setRendered() %}
  152. {{ form_rest(form) }}
  153. <input type="submit" class="btn primary" value="{% trans from 'SonataAdminBundle' %}btn_filter{% endtrans %}" />
  154. <a class="btn" href="{{ admin.generateUrl('list') }}">{% trans from 'SonataAdminBundle' %}link_reset_filter{% endtrans %}</a>
  155. </div>
  156. </fieldset>
  157. </form>
  158. {% endif %}
  159. {% endblock %}