Модуль CRUD - Добавьте ссылку предварительного просмотра для редактирования загруженного мультимедиа


Я создал модуль для загрузки PDF-файлов, это базовый модуль CRUD.

Мой вопрос в том, как я могу добавить ссылку в представление редактирования, чтобы пользователь мог просмотреть носитель, прикрепленный к редактируемой строке?

Author: Teja Bhagavan Kollepara, 2013-03-08

1 answers

Вот как я это делаю. Я создаю пользовательский визуализатор для полей загрузки файлов. Это выглядит примерно так (предполагая, что ваше расширение называется Easylife_Batch, а ваша сущность Pdf" - Я видел ваш другой вопрос, я думаю, что ваше расширение называется Batch, но я не знаю пространства имен, поэтому я добавил свое): имя файла: app/code/local/Easylife/Batch/Block/Adminhtml/Pdf/Helper/File.php

<?php
class Easylife_Batch_Block_Adminhtml_Pdf_Helper_File extends Varien_Data_Form_Element_Abstract{
    public function __construct($data){
        parent::__construct($data);
        $this->setType('file');
    }
    public function getElementHtml(){
        $html = '';
        $this->addClass('input-file');
        $html.= parent::getElementHtml();
        if ($this->getValue()) {
            $url = $this->_getUrl();
            if( !preg_match("/^http\:\/\/|https\:\/\//", $url) ) {
                $url = Mage::helper('batch')->getFileBaseUrl() . $url;
            }
            $html .= '<br /><a href="'.$url.'">'.$this->_getUrl().'</a> ';
        }
        if (!$this->getRequired()){
            $html.= $this->_getDeleteCheckbox();
        }
        return $html;
    }
    protected function _getDeleteCheckbox(){
        $html = '';
        if ($this->getValue()) {
            $label = Mage::helper('batch')->__('Delete File');
            $html .= '<span class="delete-image">';
            $html .= '<input type="checkbox" name="'.parent::getName().'[delete]" value="1" class="checkbox" id="'.$this->getHtmlId().'_delete"'.($this->getDisabled() ? ' disabled="disabled"': '').'/>';
            $html .= '<label for="'.$this->getHtmlId().'_delete"'.($this->getDisabled() ? ' class="disabled"' : '').'> '.$label.'</label>';
            $html .= $this->_getHiddenInput();
            $html .= '</span>';
        }       
        return $html;
    }
    protected function _getHiddenInput(){
        return '<input type="hidden" name="'.parent::getName().'[value]" value="'.$this->getValue().'" />';
    }
    protected function _getUrl(){
        return $this->getValue();
    }
    public function getName(){
        return $this->getData('name');
    }
}

Этот визуализатор должен показывать ссылку под вводом с именем файла и ссылкой на него.

Вам также необходимо реализовать метод Mage::helper('batch')->getFileBaseUrl(), названный выше в методе getElementHtml. Это должно вернуть базовый URL-адрес ваших загрузок (папку, содержащую файлы).

Теперь все, что вам нужно сделать, это указать вашей форме использовать ваш рендерер для ввода файлов. Для этого добавьте в блок Edit/Tab/Form.php внутри метода _prepareForm (если вы следовали стандартам Magento, блок и метод должны быть там) строку:

$fieldset->addType('file', Mage::getConfig()->getBlockClassName('batch/adminhtml_pdf_helper_file')); 
//or directly $fieldset->addType('file', 'Easylife_Batch_Block_Adminhtml_Pdf_Helper_File'); but the first method is cleaner.

Добавьте его над первым набором полей $->Добавить поле(...).

Дайте мне знать, если это сработает для вас. Не забудьте изменить пространство имен.

Небольшой совет. В будущем используйте этого создателя модулей для модулей CRUD. Он поддерживает поля файлов и изображений. Все еще есть несколько небольших ошибок, но это экономит вам много времени.

 0
Author: Marius, 2016-03-24 16:15:08