2010-05-28 77 views
3

我有一个Magento网上商店,并刚刚创建了扩展名为(Modulecreator)的自定义模块。该模块附带一个可处理文件上传的标准管理界面。我发现如果你想显示缩略图,你可以使用'image'字段类型(addField('myfield','image'))来代替'file'类型字段。addField类型的图像和缩略图路径

但现在我有一个问题。当我上传文件时,我将它们保存在'media'目录中的一个名为'幻灯片'的子目录中。但是,当我编辑项目时,uploadfield旁边缩略图的图像路径被设置为'media'文件夹。不是我的文件夹,因为我将它设置为'media/slides /'。

我使用下面的代码:

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

我试图设置阵列中的“路径”键,但这没有得到通过Magento的回升。讨厌缺乏对Magento良好且易于使用的文档的支持...

也许你可以帮我找到解决方案吗?

回答

1

好吧,我找到了解决我的问题。我改变了创建'图像'字段类型的文件。该文件位于/lib/Varien/Data/Form/Element/Image.php。当你在看代码,你看到的最后一个功能是从给定的数据阵列拿到钥匙“名”:

​​

所以我吼声如果我再拍函数来获得一个“路径”指数:

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

接下来,当你去功能_getUrl(),它获得的预览网址上传的图片,你需要改变它下面的(仅前“$这个 - >的getValue(添加函数的getPath() )'):

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

我不认为这是解决这个问题的最优雅的方式,但它满足了我对这个项目的需求。我希望我的解决方案也适用于其他人,如果他们也面临这个问题...

0

这是正确的,这不是最优雅的方式来解决这个问题,但它的工作;)。

更优雅的方式是在你自己的模块中创建自己的图像字段类型。 我已经解释了在StackOverflow文章中做到这一点的方式:here

我希望它会帮助你做到这一点更优雅的方式;)

雨果。

3

其他的解决办法就是编辑的Magento调用$形式 - > setValues方法(...) 基本上返回之前后您的路径,请服用点是这样的:

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

.gondo

+1

这更优雅!只需要从Magento自动添加/媒体文件路径中删除“媒体”的新值。所以它会是$ form-> getElement('filename') - > setValue('slides /'。p); – Michael 2013-09-13 01:32:10

0

嗯,我当我刚开始研究magento模块时,曾经遇到过这个问题。使用Varien_File_Uploader的 将为您提供保存文件及其名称的路径(使用索引'文件')。 所以节省了数据库中的信息之前,在阵列中创建索引(表中使用的列名)(保持邮报数据时形式控制器保存操作提交)

例如:

$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. 

后保存操作,它肯定会将文件路径信息存储到表格中的相应列中。 希望它有帮助。