2013-01-01 19 views
17

में सोनाटाएडमिनबंडल डैशबोर्ड पर कस्टम लिंक या बटन कैसे जोड़ें, मैं symfony2 और सोनाटाएडमिनबंडल के साथ नया हूं।Symfony2

मैंने सोनाटाएडमिनबंडल डैशबोर्ड में 3 इकाइयां जोड़ दी हैं और वे सफलतापूर्वक दिखाई देते हैं।

संस्थाएं डिफ़ॉल्ट लिंक - "नया जोड़ें" और "सूची" बटन के साथ दिखाई देती हैं।

मैं निम्नलिखित

  1. मैं डैशबोर्ड पर संस्थाओं में से एक के लिए एक तिहाई लिंक जोड़ना चाहते हैं ऐसा करने में सक्षम होना चाहता हूँ।
  2. मैं डिफ़ॉल्ट सूची पृष्ठ में ग्रिड के ऊपर स्थित बटनों में एक लिंक जोड़ने में सक्षम होना चाहता हूं।
  3. मैं संपादित पर जोड़ने के रूप तहत प्रदर्शित होने/अनुकूलित लिंक या नया पृष्ठ

मैं घंटों के लिए खोज रहे, ऊपर से कोई भी कार्य के लिए एक रास्ता खोजने के लिए नहीं कर पाए हैं बनाने के लिए सक्षम होना चाहते हैं, किसी भी तरह की सहायता की हम सराहना करेंगे।

धन्यवाद।

+0

मैं इस का इस्तेमाल किया है http://stackoverflow.com/questions/11725476/add-custom-button-to-edit-page -of-sonata-admin-bundle? rq = 1 और टेम्पलेट को ऐप/संसाधन/ /views/Block/block_admin_list.html.twig और इस लिंक की जानकारी http: // sonata- में कॉपी करके बंडल टेम्पलेट्स के अनुकूलन का उपयोग किया। project.org/bundles/admin/master/doc/reference/templates.html उपयोगी साबित हुआ – dagger

उत्तर

43

डैशबॉर्ड सोनाटा एडमिन में कस्टम तत्व प्रदर्शित करें सोनाटा ब्लॉक बंडल का उपयोग करता है। कस्टम लिंक या बटन जोड़ने के लिए आपको सोनाटा ब्लॉक बंडल का उपयोग करके एक नया ब्लॉक बनाने की आवश्यकता है। व्यवस्थापक बंडल का मूल टेम्पलेट (dashboard.html.twig) चलाने के लिए कॉन्फ़िगर किए गए ब्लॉक को पुन: सक्रिय करता है (एप्लिकेशन के config.yml में)। फिर भी, व्यवस्थापक बंडल टेम्पलेट block_admin_list.html.twig में आपके सभी इकाई ब्लॉक को पुन: सक्रिय करता है। अपना कस्टम ब्लॉक टेम्पलेट बनाना यहां से है कि आप अपने कस्टम समूह (सेक्शन) और बटन को लपेटने के लिए लेआउट ले सकते हैं ताकि वे इकाइयों के समूह के समान महसूस कर सकें।

ठीक है, यह परिचय था।

उदाहरण के लिए हम कस्टम न्यूजलेटर अनुभाग बनाना चाहते हैं।

  1. नए ब्लॉक वर्ग कि BlockBundleInterface
  2. लागू करता है नया ब्लॉक टेम्पलेट
  3. बनाने ब्लॉक सेवा बनाने बनाने (पढ़ सकते हैं और Symfony 2 पुस्तकालय में समझने की क्या सेवाएं हैं)
  4. ऐड:

    चरण हैं सोनाटा ब्लॉक बंडल कॉन्फ़िगरेशन के लिए नव निर्मित सेवा

  5. सोनाटा एडमिन बंडल कॉन्फ़िगरेशन
  6. पर नव निर्मित सेवा जोड़ें
  7. डैशबोर्ड में प्रवेश करने और नए समूह/बटन/लिंक/जो कुछ-सामान-यू-डाल-इन-अपने-ब्लॉक-टेम्पलेट :)

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) की घोषणा है। जो कुछ। लेकिन यह महत्वपूर्ण है कि यह आपके आयात के 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 में डाल दिया है करने के लिए नव निर्मित सेवा जोड़ें।

मेरे config इस तरह दिखता है:

#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 में डाल दिया है करने के लिए नव निर्मित सेवा जोड़ें।

मेरे config इस तरह दिखता है:

# 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 ने एडमिन बंडल का स्रोत कोड पढ़ना सीखा :) पूरे दिन

+0

क्या आपके पास इस उदाहरण के आधार पर सोनाटाएडमिन कुकबुक प्रविष्टि बनाने के साथ कोई समस्या है? https://github.com/sonata-project/SonataAdminBundle/issues/1551 – caponica

+1

यह पोस्ट पुराना है, लेकिन आपने मुझे भी बचाया। धन्यवाद :) –

+0

आपका स्वागत है :) –

4

मुझे विधि निष्पादन के साथ परेशानी थी (मैं सोनाटा 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) कोई सुझाव? –