2015-06-19 100 views
2

我有一個(類別)許多(產品)關係的設置,並且我希望在編輯類別頁面底部顯示一個產品列表。Symfony/Sonata管理:編輯表單上的列表表單

看起來這將是一件常見的事情,但我還沒有找到任何方法來做到這一點(或它的任何例子)。我設法使用sonata_type_collection獲得產品的顯示,但是這給了我一個完整的產品編輯表單,當我真的想要一個與該類別關聯的產品列表時。

這裏有兩個問題,真的:

這可能嗎?

是否不鼓勵(這可以解釋缺乏例子)?如果是這樣,爲什麼?

+0

那你正好與「有相關的產品清單」呢?這一般信息與您正在編輯的類別提交或輸入的表單無關嗎? – stevenll

+0

該信息與提交表單無關,但我想提供直接鏈接到類別詳細信息頁面底部的相關產品。例如。如果該類別是iPhone,那麼我希望在頁面底部有一個iPhone產品列表。 – MattBoutet

回答

1

做你在找什麼是壓倒編輯模板的最快方式。在您的管理serivce聲明你可以這樣做:

services: 
    sonata.admin.mail: 
     class: %sonata.admin.category.class% 
     tags: 
      - { name: sonata.admin, manager_type: orm, group: "Categories", label: "Category" } 
     arguments: 
      - ~ 
      - %skooli.category.class% 
      - ~ 
     calls: 
      - [ setTemplate, ["edit", "AcmeAdminBundle:CategoryAdmin:edit.html.twig"] ] 

然後,AcmeBundle/Resources/views/CategoryAdmin/edit.html.twig下,你可以有這樣的事情:

{% extends 'SonataAdminBundle:CRUD:base_edit.html.twig' %} 
{# Override any block from the parent view if necessary #} 
{% block products %} 
    <ul> 
    {% for product in object.products%} 
     <li>{{ product.name }}</li> 
    {% endfor %} 
    </ul> 
{% endblock products %} 
+0

謝謝。這看起來非常接近我想要做的事情。我遇到的唯一問題是我目前有 ' - > add('product','sonata_type_collection',array( 'type_options'=> array( 'delete'=> false, 'read_only'= > true, 'btn_add'=> false, ) ))' 在我的CategoryAdmin.php configureFormFields函數中,儘管嘗試了幾個不同的變體,我找不到任何會導致它拉入新的自定義模板。 – MattBoutet

+0

該模板與您的類別管理員相關,而不是您的產品管理員 – stevenll

+0

該模板位於Resources/views/CategoryAdmin/edit.html.twig中,在我的services.yml中我有sonata.admin.category:.... 但在configureFormFields的CategoryAdmin.php中,我有添加()的鏈接調用,它決定了編輯表單中顯示的內容。如果我沒有擺在那裏與「產品」任何事情,形式呈現無我所期待的名單,而我所做的,包括一個附加的嘗試()的產品還沒有出來平移。 這是我第一次嘗試自定義模板,所以我可能會在這裏丟失一些基本的東西。 – MattBoutet

0

在你原來的問題你在談論編輯模板的類別。在您的評論中,您希望列表出現在顯示操作中。 後者很容易。只要你的關係添加到您的showFields行動,他們將被顯示:

use Sonata\AdminBundle\Show\ShowMapper; 

class CategoryAdmin extends Admin 
{ 
    protected function configureShowFields(ShowMapper $showMapper) 
    { 
     $showMapper 
      ->add('products') 
     ;  
    } 
} 

如果你不喜歡,你可以創建自定義模板的外觀。這將工作的顯示編輯https://sonata-project.org/bundles/admin/master/doc/reference/action_show.html#setting-up-a-custom-show-template-very-useful

+0

感謝您的回覆,並對不確切的措辭表示歉意。當我查看給定類別的編輯屏幕時(例如foobar.com/bundle/category/1234/edit),我正在查找的是相關產品的列表。 – MattBoutet

+0

這聽起來很奇怪,因爲大多數時候你想內聯編輯子實體而不是隻顯示它們。但是,您可以使用自定義編輯模板。 – webDEVILopers

+0

在線編輯子實體是一種可能性,但現在我只想對它們進行連貫的表示。默認顯示是與該類別關聯的所有產品的整個編輯窗體,而這絕對不是我正在尋找的。 我認爲覆蓋模板是我需要做的,但到目前爲止我還沒有能夠得到這個工作。這似乎很接近:http://php-jotter.blogspot.com.es/2013/01/override-display-of-sonatacollectiontyp.html,但它不工作,我不知道調整它。 – MattBoutet