2013-01-01 2 views
17

symfony2 및 SonataAdminBundle을 처음 사용했습니다.symfony2의 SonataAdminBundle 대시 보드에 맞춤 링크 또는 버튼을 추가하는 방법

SonataAdminBundle 대시 보드에 3 개의 엔티티를 추가했으며 성공적으로 나타납니다.

엔티티는 기본 링크 인 "새로운 추가"및 "목록"버튼과 함께 나타납니다.

은 내가 대시 보드에있는 개체 중 하나에 세 번째 링크를 추가 할 다음

  1. 을 할 수 있어야합니다.
  2. 기본 목록 페이지에서 그리드 위에있는 버튼에 대한 링크를 추가하고 싶습니다.
  3. 나는, 편집의 양식 아래에 나타나는/사용자 정의 링크를 추가하거나 새 페이지

나는 위의 작업을 수행 할 수있는 방법을 찾을 수 없어 시간을 검색하고 생성 할 수 있도록하려면 어떤 도움을 주시면 감사하겠습니다.

감사합니다.

+0

내가 이것을 사용하고 http://stackoverflow.com/questions/11725476/add-custom-button-to-edit-page -of-sonata-admin-bundle? rq = 1을 사용하고 템플릿을 app/Resources/ /views/Block/block_admin_list.html.twig와이 링크의 정보에 복사하여 번들 템플릿의 사용자 정의를 사용했습니다 http : // sonata- project.org/bundles/admin/master/doc/reference/templates.html 유용하다고 판명되었습니다 – dagger

답변

43

대시 보드 소나타 관리에 표시되는 사용자 정의 요소는 소나타 블록 번들을 사용합니다. 사용자 정의 링크 또는 버튼을 추가하려면 소나타 블록 번들을 사용하여 새 블록을 만들어야합니다. Admin Bundle의 핵심 템플릿 (dashboard.html.twig)은 실행되도록 구성된 블록을 반복합니다 (응용 프로그램의 config.yml에서). 여전히 Admin Bundle은 template_admin_list.html.twig 템플릿의 모든 엔티티 블록을 반복합니다. 사용자 정의 블록 템플릿 만들기 여기에서 사용자 지정 그룹 (섹션) 및 단추를 래핑하여 엔터티 그룹과 동일한 느낌을 갖도록 레이아웃을 가져올 수 있습니다.

오케이, 소개였습니다.

예를 들어 맞춤 뉴스 레터 섹션을 만들고 싶습니다.

  1. 이 (읽기 및 심포니 2 라이브러리에 서비스가 무엇인지 이해)
  2. 추가 새 블록 템플릿을
  3. 만들 블록 서비스를 만들 BlockBundleInterface
  4. 를 구현하는 새로운 블록 클래스를 만들 :

    는 단계가있다 Sonata Block 번들 구성에 새로 생성 된 서비스

  5. 새로 만든 서비스를 Sonata Admin 번들 구성에 추가
  6. 대시 보드를 입력하고 - 물건 - 당신 - 넣어 무엇이든 -에 - 네 - 블록 템플릿 :

AD1) 새 그룹/버튼/링크를/즐길 새로운 블록 클래스를

일반 명령 만들기 아래 : 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); 
    } 
} 

내가 소나타 미디어 번들 코드 파일을 읽는 몇 줄을 추가했다.

Ad2를) 는 새로운 블록 템플릿을 내가 소나타 관리 번들의 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

합니다. 복잡한 것처럼 보이지만 근실하지는 않습니다. 큰 필요없이 전체 템플릿을 무시하지 않고도 대시 보드 페이지를 수정하는 것이 중요합니다. 그 녀석은 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) 제안이 있으십니까? –

관련 문제