2010-05-28 78 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. 

後保存操作,它肯定會將文件路徑信息存儲到表格中的相應列中。 希望它有幫助。