Модуль CRUD - Добавьте ссылку предварительного просмотра для редактирования загруженного мультимедиа
Я создал модуль для загрузки PDF-файлов, это базовый модуль CRUD.
Мой вопрос в том, как я могу добавить ссылку в представление редактирования, чтобы пользователь мог просмотреть носитель, прикрепленный к редактируемой строке?
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. Он поддерживает поля файлов и изображений. Все еще есть несколько небольших ошибок, но это экономит вам много времени.