2012-04-13 25 views
5

Tôi có một thực thể. Tôi cần phải thực hiện một số mã JS khi thực thể tải trong một popup. Có cách nào để thêm mã JS/HTML tùy chỉnh vào một biểu mẫu thực thể thông qua cấu hình lớp quản trị hay không. Ví dụ. để vượt qua một khuôn mẫu như một tùy chọnLàm cách nào để thêm mã JS vào biểu mẫu thực thể?

Trả lời

7

Bạn có thể làm theo cách này: -

  1. Thêm một tham số lớp trong FormMapper của bạn như thế này: -

    bảo vệ configureFormFields function (FormMapper $ formMapper) { $ formMapper -> thêm ('description', null, array ('attr' => array ('lớp' => 'for_popup'), 'cần thiết' => false)) }

  2. Mở rộng edit.html.twig/base_edit.html.twig từ Sonata CRUD Templates

--- edit.html.twig ----

{% extends 'YourBundle:YourAdminClass:base_edit.html.twig' %} 

--- base_edit.html.twig ---

{% block javascripts %} 
    {{ parent() }} 
    <script type="text/javascript"> 
     // Your JS code here 
    </script> 
{% endblock %} 

Sử dụng số edit.html.twig thay vì Sonata CRUD bằng cách xác định nó trong hàm getEditTemplate (trong lớp Quản trị).

public function getEditTemplate() 
{ 
    return 'YourAdminBundle:ControllerName:edit.html.twig'; 
} 

Bạn cũng có thể đặt mẫu chỉnh sửa tùy chỉnh khi bạn tiêm dịch vụ quản trị.

<service id="sonata.admin.bf" class="Wyzbiz\Bundle\MainBundle\Admin\BfAdmin"> 
    <tag name="sonata.admin" manager_type="orm" group="Content" label="BFs"/> 
    <argument /> 
    <argument>Wyzbiz\Bundle\MainBundle\Entity\Bf</argument> 
    <argument>WyzbizMainBundle:CRUD</argument> 
    <call method="setTranslationDomain"><argument>WyzbizMainBundle</argument></call> 
    <call method="setTemplate"><argument>list</argument>      
    <argument>WyzbizMainBundle:CRUD/Bf:list.html.twig</argument></call> 
</service> 
+0

base_edit có nên mở rộng mẫu sonata crud không? Tôi nên chỉ định mở rộng thẻ trong mẫu này hoặc tôi chỉ có thể đặt mẫu này cùng một đường dẫn như trong gói sonata? Cảm ơn sự giúp đỡ của bạn –

+0

Đừng chạm vào bất cứ điều gì trong Sonata. Chỉ cần sao chép base_edit.html.twig của sonata vào thư mục YourBundle/Resources/YourController /. Tôi sẽ cập nhật câu trả lời để giải thích cách thức. – Amit

+0

Sonata dường như đã thay thế hàm getEditTemplate() bằng getTemplate ('chỉnh sửa'), khiến việc này trở nên khó khăn hơn. Điều tôi đã làm cuối cùng là: $ this-> setTemplate ('edit', 'MyBundle: Admin: edit_user.html.twig'); bên trong configFormFields() – Jessica

3

@Jessica Thay vì sử dụng $ this-> setTemplate() bên trong phương pháp configureFormFields của lớp quản trị, bạn có thể thêm thay vì thực hiện riêng của bạn về phương pháp getTemplate, mỏ trông như thế này:

/** 
* Override core method to display custom template(s) 
*/ 
public function getTemplate($name) 
{ 
    switch ($name) { 
     case 'edit': 
      return 'YourAdminBundle:YourAdminEntity:edit.html.twig'; 
      break; 
     default: 
      return parent::getTemplate($name); 
      break; 
    } 
} 
Các vấn đề liên quan