2013-01-01 18 views
17

我是新的symfony2和SonataAdminBundle。如何將自定義鏈接或按鈕添加到Symfony2中的SonataAdminBundle儀表板

我已將3個實體添加到SonataAdminBundle儀表板,並且它們顯示成功。

實體以默認鏈接顯示 - 「添加新」和「列表」按鈕。

我希望能夠做到以下幾點

  1. 我要在第三鏈接添加到儀表盤上的實體之一。
  2. 我希望能夠添加一個鏈接到 默認列表頁面上的網格上方的按鈕。
  3. 我希望能夠增加對編輯的形式下出現/自定義鏈接或創建新頁面

我一直沒能找到一種方法做任何上述情況,一直在尋找了幾個小時,任何幫助將不勝感激。

謝謝。

+0

我已經使用這個http://stackoverflow.com/questions/11725476/add-custom-button-to-edit-page通過將模板複製到app/Resources/ /views/Block/block_admin_list.html.twig加上此鏈接的信息http:// sonata-of-sonata-admin-bundle?rq = 1, project.org/bundles/admin/master/doc/reference/templates.html被證明是有用的 – dagger

回答

43

在dashbord中顯示自定義元素Sonata Admin使用Sonata Block Bundle。 要添加自定義鏈接或按鈕,您需要使用Sonata Block Bundle創建新塊。 Admin Bundle的核心模板(dashboard.html.twig)迭代配置爲運行的塊(在應用程序的config.yml中)。 儘管如此,Admin Bundle會迭代模板block_admin_list.html.twig中的所有實體塊。創建您的自定義模板模板,您可以從這裏獲取佈局來包裝自定義組(部分)和按鈕,以便它們與實體組具有相同的感覺。

好的,這是介紹。

例如,我們想製作自定義的新聞部分。

有步驟:

  1. 創建實現BlockBundleInterface
  2. 創造新的塊模板
  3. 創建塊服務新的塊級(閱讀和了解什麼是服務的Symfony 2庫)
  4. 加Sonata Block Bundle配置新創建的服務
  5. 將新創建的服務添加到Sonata Admin Bundle配置
  6. 進入儀表板和享受新的組/按鍵/鏈接/不管-的東西 - 你 - 放 - 在你的塊模板:)

廣告1)創建新的塊級

一般注意事項下:http://sonata-project.org/bundles/block/master/doc/reference/your_first_block.html

我的文件是這樣的:

<?php 

namespace InstitutoStorico\Bundle\NewsletterBundle\Block; 

use Symfony\Component\HttpFoundation\Response; 

use Sonata\AdminBundle\Form\FormMapper; 
use Sonata\AdminBundle\Validator\ErrorElement; 

use Sonata\BlockBundle\Model\BlockInterface; 
use Sonata\BlockBundle\Block\BaseBlockService; 

class NewsletterBlockService extends BaseBlockService 
{ 
    public function getName() 
    { 
     return 'My Newsletter'; 
    } 

    public function getDefaultSettings() 
    { 
     return array(); 
    } 

    public function validateBlock(ErrorElement $errorElement, BlockInterface $block) 
    { 
    } 

    public function buildEditForm(FormMapper $formMapper, BlockInterface $block) 
    { 
    } 

    public function execute(BlockInterface $block, Response $response = null) 
    { 
     // merge settings 
     $settings = array_merge($this->getDefaultSettings(), $block->getSettings()); 

     return $this->renderResponse('InstitutoStoricoNewsletterBundle:Block:block_my_newsletter.html.twig', array(
      'block'  => $block, 
      'settings' => $settings 
      ), $response); 
    } 
} 

我加了一些線讀取索納塔媒體捆綁代碼文件。

廣告2)創建新的塊模板

佈局我從索納塔管理員束block_admin_list.html.twig了。

我的文件是這樣的:

{% extends 'SonataBlockBundle:Block:block_base.html.twig' %} 

{% block block %} 
<table class="table table-bordered table-striped sonata-ba-list"> 
    <thead> 
     <tr> 
      <th colspan="3">Newsletter - inviare</th> 
     </tr> 
    </thead> 

    <tbody> 
     <tr> 
      <td> 
       <div class="btn-group" align="center"> 
        <a class="btn btn-small" href="#">Servizio Newsletter</a> 
       </div> 
      </td> 
     </tr> 
    </tbody> 
</table> 
{% endblock %} 

Ad3的)創建塊服務

在你的包有就是你申報服務(services.yml或admin.yml)的文件。隨你。但重要的是,它在「imports」部分插入到應用程序的config.yml中。

我的服務宣言是這樣的:

sonata.block.service.newsletter: 
    class: InstitutoStorico\Bundle\NewsletterBundle\Block\NewsletterBlockService 
    arguments: [ "sonata.block.service.newsletter", @templating ] 
    tags: 
     - { name: sonata.block } 

AD4)添加新創建的服務來索納塔組羣配置

此配置是把你的應用程序的config.yml。

我的配置是這樣的:

#Sonata Block Bundle 
sonata_block: 
    default_contexts: [cms] 
    blocks: 
     sonata.admin.block.admin_list: 
      contexts: [admin] 
     sonata.block.service.text: ~ 
     sonata.block.service.action: ~ 
     sonata.block.service.rss: ~ 
     sonata.block.service.newsletter: ~ 

的Ad5)添加新創建的服務來索納塔管理員束配置

此配置是把你的應用程序的config.yml。

我的配置是這樣的:

# Sonata Admin Generator 
sonata_admin: 
    ... 
    dashboard: 
     blocks: 
      # display a dashboard block 
      - { position: left, type: sonata.admin.block.admin_list } 
      - { position: left, type: sonata.block.service.newsletter} 

AD6)輸入儀表盤和享受

我的控制面板看起來是這樣的:

http://img805.imageshack.us/img805/2789/immaginezuq.png

這就是全部。看起來很複雜,但要真誠,這不是那麼重要。重要的是它是一種乾淨的方式來修改儀表板頁面,而不必在沒有需要的情況下重寫整個模板。 所有那些Il學會了閱讀Admin Bundle的源代碼:)全天

+0

根據這個例子,我們是否對創建SonataAdmin食譜條目有任何疑問? https://github.com/sonata-project/SonataAdminBundle/issues/1551 – caponica

+1

這篇文章很舊,但你也救了我。謝謝:) –

+0

不客氣:) –

4

我遇到了方法執行的麻煩(我正在使用Sonata 2.3.x)。 以下是適用於我的代碼。

注BlockContextInterface和$ blockContext-> getBlock():

public function execute(BlockContextInterface $blockContext, Response $response = null) 
{ 
    // merge settings 
    $settings = array_merge($this->getDefaultSettings(), $blockContext->getSettings()); 

    return $this->renderResponse('bundleName:Block:templateName.html.twig', array(
     'block'  => $blockContext->getBlock(), 
     'settings' => $settings 
     ), $response); 
} 
+0

我的區塊工作正常,但側面菜單現在不能正常工作。 [截圖](https://ibin.co/3QUDdVIghHn7.png) 任何建議? –

相關問題