Тип изображения addField и путь к миниатюре - PullRequest
3 голосов
/ 28 мая 2010

У меня есть интернет-магазин Magento, и я только что создал собственный модуль с расширением (Modulecreator). Этот модуль поставляется со стандартным интерфейсом администратора, который может обрабатывать загрузки файлов. Я обнаружил, что если вы хотите показывать миниатюры, вы можете использовать тип поля «изображение» (addField («myfield», «изображение»)) вместо поля «файл».

Но теперь у меня проблема. Когда я загружаю файлы, я сохраняю их в подкаталоге «слайды» в каталоге «медиа». Но когда я редактирую элемент, путь к изображению для миниатюры рядом с полем загрузки устанавливается в папку «медиа». Не моя папка, так как я установил ее как «media / slides /». 1003 *

Я использую следующий код:

$fieldset->addField('filename', 'image', array(
        'label'     => Mage::helper('slideshow')->__('File'),
        'required'  => true,
        'name'      => 'filename',
        ));

Я пытался установить ключ 'path' в массиве, но Magento его не уловил. Ненавижу отсутствие поддержки хорошей и простой в использовании документации от Magento ...

Может быть, вы можете помочь мне найти решение?

Ответы [ 4 ]

3 голосов
/ 05 января 2012

другое решение - просто отредактировать ваш путь после magento вызова $ form-> setValues ​​(...) в основном перед возвращением сделайте что-нибудь вроде этого:

  $p = $form->getElement('filename')->getValue();
  $form->getElement('filename')->setValue('media/slides' . $p);

.gondo

1 голос
/ 28 мая 2010

Хорошо, я нашел решение для моей проблемы. Я изменил файл, который создает тип поля «изображение». Файл находится по адресу /lib/Varien/Data/Form/Element/Image.php. Когда вы смотрите на код, вы видите, что последняя функция должна получить ключ 'name' из заданного массива данных:

public function getName()
{
    return  $this->getData('name');
}

Так что я подумал, что если я сделаю другую функцию для получения индекса 'пути':

public function getPath()
{
    return  $this->getData('path');
}

Далее, когда вы переходите к функции _getUrl (), которая получает URL-адрес предварительного просмотра для загруженного изображения, вам необходимо изменить его следующим образом (добавьте функцию getPath () только перед $ this-> getValue () ') :

protected function _getUrl()
{
    return $this->getPath().$this->getValue();
}

Не думаю, что это самый элегантный способ исправить это, но он удовлетворяет мои потребности в этом проекте. Я надеюсь, что мое решение работает для других людей, если они тоже сталкиваются с этой проблемой ...

0 голосов
/ 25 сентября 2012

хм, у меня была эта проблема однажды, когда я только начал работать над модулем magento dev. использование Varien_File_Uploader даст вам путь к сохраненному файлу с его именем (используя индекс «файл»). поэтому перед сохранением информации в базе данных создайте индекс (используйте имя столбца в таблице) в массиве (сохраняя данные Post при отправке формы в действии сохранения контроллера)

например:

$upload = new Varien_File_Uploader($_FILE['custom_image']['name']);
$p = $upload->save('in/to/the/folder');
$data = $this->getRequest()->getPost();
$data['custom_image'] = 'myfolder'. DS .'subfolder'.$p['file'] // path return after save through Varien_File_Uploader.

после операции сохранения он обязательно сохранит информацию о пути к файлу в соответствующем столбце таблицы. Надеюсь, это поможет.

0 голосов
/ 03 июня 2010

верно, это не самый элегантный способ исправить это, но он работает;).

Более элегантный способ - создать собственный тип поля изображения в своем собственном модуле. Я объяснил способ сделать это в сообщении StackOverflow: здесь .

Я надеюсь, что это поможет вам сделать это более элегантно;)

Хьюг.

...