addField类型图像和缩略图路径

时间:2010-05-28 18:48:42

标签: image path magento thumbnails

我有一个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缺乏对易于使用的文档的支持......

也许你可以帮我找一个解决方案?

4 个答案:

答案 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)

嗯,当我刚刚开始研究magento模块开发时,我遇到过这个问题。 使用Varien_File_Uploader将为您提供其名称保存文件的路径(使用索引'file')。 所以在将数据保存到数据库之前,在数组中创建一个索引(在表中使用列名)(在表单提交控制器保存操作时保留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.

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