templates.rst 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. Templates
  2. =========
  3. By default, an Admin class uses a set of templates, it is possible to tweak the default values by editing the configuration
  4. .. code-block:: yaml
  5. sonata_admin:
  6. templates:
  7. # default global templates
  8. layout: SonataAdminBundle::standard_layout.html.twig
  9. ajax: SonataAdminBundle::ajax_layout.html.twig
  10. dashboard: SonataAdminBundle:Core:dashboard.html.twig
  11. # default values of actions templates, they should extend global templates
  12. list: SonataAdminBundle:CRUD:list.html.twig
  13. show: SonataAdminBundle:CRUD:show.html.twig
  14. edit: SonataAdminBundle:CRUD:edit.html.twig
  15. history: SonataAdminBundle:CRUD:history.html.twig
  16. preview: SonataAdminBundle:CRUD:preview.html.twig
  17. delete: SonataAdminBundle:CRUD:delete.html.twig
  18. batch: SonataAdminBundle:CRUD:list__batch.html.twig
  19. batch_confirmation: SonataAdminBundle:CRUD:batch_confirmation.html.twig
  20. # list related templates
  21. inner_list_row: SonataAdminBundle:CRUD:list_inner_row.html.twig
  22. base_list_field: SonataAdminBundle:CRUD:base_list_field.html.twig
  23. # default values of helper templates
  24. short_object_description: SonataAdminBundle:Helper:short-object-description.html.twig
  25. # default values of block templates, they should extend the base_block template
  26. list_block: SonataAdminBundle:Block:block_admin_list.html.twig
  27. Usage of each template :
  28. * layout : base layout used by the dashboard and an admin class
  29. * ajax : default layout used when an ajax request is performed
  30. * dashboard: default layout used at the dashboard
  31. * list : the template to use for the list action
  32. * show : the template to use for the show action
  33. * edit : the template to use for the edit and create action
  34. * history : the template to use for the history / audit action
  35. * list_block : the template used for the list of admin blocks on the dashboard
  36. * preview : the template to use for previewing an edit / create action
  37. * short_object_description: used to represent the entity in one-to-one/many-to-one relations
  38. * delete: the template to use for the delete action
  39. * inner_list_row: the template to render a list row
  40. The default values will be set only if the ``Admin::setTemplates`` is not called by the Container.
  41. You can easily extend the provided templates in your own and customize only the blocks you need to change:
  42. .. code-block:: jinja
  43. {% extends 'SonataAdminBundle:CRUD:edit.html.twig' %}
  44. {# Acme/MyBundle/Resources/view/my-custom-edit.html.twig #}
  45. {% block title %}
  46. {{ "My title"|trans }}
  47. {% endblock%}
  48. {% block actions %}
  49. <div class="sonata-actions">
  50. <ul>
  51. {% if admin.hasroute('list') and admin.isGranted('LIST')%}
  52. <li class="btn sonata-action-element"><a href="{{ admin.generateUrl('list') }}">{{ 'link_action_list'|trans({}, 'SonataAdminBundle') }}</a></li>
  53. {% endif %}
  54. </ul>
  55. </div>
  56. {% endblock %}
  57. .. code-block:: php
  58. <?php // MyAdmin.php
  59. public function getTemplate($name)
  60. {
  61. switch ($name) {
  62. case 'edit':
  63. return 'AcmeMyBundle::my-custom-edit.html.twig';
  64. break;
  65. default:
  66. return parent::getTemplate($name);
  67. break;
  68. }
  69. }
  70. Row Template
  71. ------------
  72. From 2.2, it is possible to define a template per row for the list action, the default one is a standard table. However,
  73. depends on the data the table layout might not be suitable. So by defining a custom template for the row, it will be
  74. possible to tweak the layout as:
  75. .. figure:: ./../images/sonata_inline_row.png
  76. :align: center
  77. :alt: Inline Row from the SonataNewsBundle
  78. :width: 700px
  79. How to use it
  80. ~~~~~~~~~~~~~
  81. The configuration takes place in the DIC by calling the ``setTemplates`` method. Two template keys need to be set:
  82. - ``inner_list_row`` : The template for the row, this one need to be customized
  83. - ``base_list_field`` : The base template for the cell, the ``SonataAdminBundle:CRUD:base_list_flat_field.html.twig``
  84. is suitable for most cases, however advance use might want to change it.
  85. .. code-block:: xml
  86. <service id="sonata.news.admin.comment" class="%sonata.news.admin.comment.class%">
  87. <tag name="sonata.admin" manager_type="orm" group="sonata_blog" label="comments" label_catalogue="%sonata.news.admin.comment.translation_domain%" label_translator_strategy="sonata.admin.label.strategy.underscore" />
  88. <argument />
  89. <argument>%sonata.news.admin.comment.entity%</argument>
  90. <argument>%sonata.news.admin.comment.controller%</argument>
  91. <call method="setTemplates">
  92. <argument type="collection">
  93. <argument key="inner_list_row">SonataNewsBundle:Admin:inner_row_comment.html.twig</argument>
  94. <argument key="base_list_field">SonataAdminBundle:CRUD:base_list_flat_field.html.twig</argument>
  95. </argument>
  96. </call>
  97. </service>
  98. Once the template is set, edit the template ``SonataNewsBundle:Admin:inner_row_comment.html.twig``
  99. .. code-block:: jinja
  100. {# The default template which provides batch and action cells, with the valid colspan computation #}
  101. {% extends 'SonataAdminBundle:CRUD:base_list_flat_inner_row.html.twig' %}
  102. {% block row %}
  103. {# use field define in the the Admin class #}
  104. {{ object|render_list_element(admin.list['name']) }} -
  105. {{ object|render_list_element(admin.list['url']) }} -
  106. {{ object|render_list_element(admin.list['email']) }} <br />
  107. <small>
  108. {# or you can use the object variable to render a property #}
  109. {{ object.message }}
  110. </small>
  111. {% endblock %}
  112. While this feature is nice to generate rich list, it is also very easy to break the layout and admin features: batch and actions.