Wie verwende ich ein benutzerdefiniertes HTML-Element im Admin-Formularfeld?

7
$fieldset->addField('rating', 'label', array(
        'name'      => 'rating',
        'label'     => Mage::helper('sellerreview')->__('Rating'),
        'title'     => Mage::helper('sellerreview')->__('Rating'),
        'renderer'  => 'sellerreview/adminhtml_review_renderer_image',

    ));

Das ist meine image.php Datei

 public function render(Varien_Object $row) {

    $fullRating = $row->getRating();
    $html = '';

        $html = $html.'<input id="input-21d" name="rating" value='. $fullRating .' type="number" class="rating" min=0 max=5 step=0.5 data-size="sm" data-disabled="true">';


    return $html;
}

Ist dies die richtige Methode, um Renderer in Addfield-Form zu verwenden? Verwendung des Renderers in Addfield-Form

ND17
quelle
Nehmen Sie etwa Admin-Formularfelder
Amit Bera
ja Admin Formularfeld
ND17

Antworten:

13

Renderer-Datei:

class [NameSpace]_[ModuleName]_Block_Adminhtml_Review_Renderer_Images extends  Varien_Data_Form_Element_Abstract
{
    protected $_element;

    public function getElementHtml()
    {   

        $html = '';

            $html = $html.'<input id="input-21d" name="rating" value='2' type="number" class="rating" min=0 max=5 step=0.5 data-size="sm" data-disabled="true">';


        return $html;
    }
}

in deiner form.php

$fieldset->addType('customtype', '[NameSpace]_[ModuleName]_Block_Adminhtml_Review_Renderer_Images');     
     $fieldset->addField('rating', 'customtype', array(
        'name'      => 'rating',
        'label'     => Mage::helper('[modulename]')->__('Rating'),
    ));

Mit dieser Option können Sie benutzerdefiniertes HTML im Feld für das Administratorformular verwenden

ND17
quelle
Es sollte ein benutzerdefiniertes HTML-Element heißen. nicht genannt Renderer in grundlegenden Magento
Liyakat
@ ND17 In diesem Beispiel sollte der Name der Renderer-Datei Images.php sein, oder?
SagarPPanchal
@SagarPPanchal Ja
ND17
Verwenden Sie, um den Wert des Elements abzurufen $this->getValue().
Joe
2

Sie sind hier fast richtig. Ich schlage Ihnen mein Arbeitsbeispiel vor, um das Bild des Feldes im Raster anzuzeigen

Grid.php

$this->addColumn('after_image', array(
          'header'    => Mage::helper('testimonials')->__('After Image'),
          'align'     =>'left',
          'index'     => 'after_image',
          'renderer'  => 'testimonials/adminhtml_testimonials_edit_renderer_testimonialafimage',
      ));

Wo testimonialsist dein Block-Tag in config.xml?

und Ihre Renderdatei sollte wie in Ihrem Renderer-Index definiert sein

<?php
class Yournamespace_Testimonials_Block_Adminhtml_Testimonials_Edit_Renderer_Testimonialafimage extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
  {
     public function render(Varien_Object $row)
    {       

        if($row->getId()) {             
         $imageName = $row->getAfterImage();                
        $imagePath = Mage::getBaseUrl("media").$imageName; 
        $dirImg = Mage::getBaseDir().str_replace("/",DS,strstr($imagePath,'/media'));        

        if (file_exists($dirImg) && !empty($imageName)) {           
            return  "<img width='50px' height='50px' src='".Mage::getBaseUrl("media").$imageName."' />"; 
        }else{
             return  "<img width='50px' height='50px' src='".Mage::getBaseUrl("media").'testimonial/not-available.jpg'."' />"; 
        }          
        }
    }  
}     
 ?>

BEARBEITEN

Verwenden Sie den Renderer im Bearbeitungsformular. Sie können die Bewertungsbearbeitungsform des Administrators sehen

class Mage_Adminhtml_Block_Rating_Edit_Tab_Form

 $field = $fieldset->addField('stores', 'multiselect', array(
            'label' => Mage::helper('rating')->__('Visible In'),
            'name' => 'stores[]',
            'values' => Mage::getSingleton('adminhtml/system_store')->getStoreValuesForForm()
        ));
        $renderer = $this->getLayout()->createBlock('adminhtml/store_switcher_form_renderer_fieldset_element');
        $field->setRenderer($renderer);

Ich hoffe, das reicht aus, um sich ein Bild zu machen.

Liyakat
quelle
1
Ich möchte in Admin-Bearbeitungsformular nicht im Raster
anzeigen
@ ND17, siehe meine aktualisierte Antwort
liyakat
funktioniert nicht ....
ND17
es sollte funktionieren, überprüfen Sie Ihren Blockpfad 'adminhtml' ist für die Standardänderung von Magento mit Ihrem Block- und Rendererpfad
liyakat
ist das richtig? $ renderer = $ this-> getLayout () -> createBlock ('sellerreview / adminhtml_review_renderer_image'); $ field-> setRenderer ($ renderer);
ND17