我有一个Magento网上商店,刚刚创建了一个带扩展名的自定义模块(Modulecreator)。该模块带有一个标准的管理界面,可以处理文件上传。我发现如果你想显示缩略图,你可以使用'image'字段类型(addField('myfield','image'))而不是'file'类型字段。
但现在我遇到了问题。当我上传文件时,我将它们保存在'media'目录中名为'slides'的子目录中。但是当我编辑项目时,uploadfield旁边的缩略图的图像路径被设置为'media'文件夹。不是我的文件夹,因为我将其设置为'media / slides /'。
我使用以下代码:
$fieldset->addField('filename', 'image', array(
'label' => Mage::helper('slideshow')->__('File'),
'required' => true,
'name' => 'filename',
));
我试图在数组中设置一个'path'键,但是Magento没有把它拿起来。讨厌Magento缺乏对易于使用的文档的支持......
也许你可以帮我找一个解决方案?
答案 0 :(得分:3)
其他解决方案只是在magento调用$ form-> setValues(...)之后编辑你的路径 基本上在返回之前,做这样的事情:
$p = $form->getElement('filename')->getValue();
$form->getElement('filename')->setValue('media/slides' . $p);
.gondo
答案 1 :(得分:1)
好的,我找到了解决问题的方法。我更改了创建“图像”字段类型的文件。该文件位于/lib/Varien/Data/Form/Element/Image.php。当您查看代码时,您会看到最后一个函数是从给定数据数组中获取密钥“name”:
public function getName()
{
return $this->getData('name');
}
所以如果我做另一个函数来获得'path'索引,那么我就知道了什么:
public function getPath()
{
return $this->getData('path');
}
接下来,当您使用函数_getUrl()获取上传图像的预览URL时,您需要更改以下内容(仅在'$ this-> getValue()'之前添加函数getPath() ):
protected function _getUrl()
{
return $this->getPath().$this->getValue();
}
我不认为这是解决这个问题的最优雅的方法,但它满足了我对这个项目的需求。如果他们也面临这个问题,我希望我的解决方案能为其他人服务......
答案 2 :(得分:0)
这是正确的,这不是解决这个问题最优雅的方法,但它有效;)。
更优雅的方法是在您自己的模块中创建自己的图像字段类型。 我已经在StackOverflow帖子上解释了这样做的方法:here。
我希望它能帮助你以更优雅的方式做到这一点;)
雨果。
答案 3 :(得分:0)
例如:
$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.
保存操作后,它肯定会将文件路径信息存储到表中的相应列中。 希望它有所帮助。