2011-04-19 26 views
0

假設我知道如何使用Zend上傳圖片。 假設我知道如何使用集成了Zend的phpThumb類來生成該圖片的大拇指。Zend和phpThumb - 上傳給定產品或文章的圖片

凡(控制器,助手?)應該我們那麼圖像與給定的數據庫記錄相關聯?應該還是產品或商品數據庫表具有名爲img路徑的字段和另一個稱爲拇指路徑的字段?或者我們應該將圖像存儲在數據庫中?

我沒有在這裏尋找具體細節,只是一個通用的方式,這樣我就能理解什麼是實現它的常用方法。

非常感謝

回答

1

我經常這樣做:

  1. 保存原始圖像的在MySQL varchar字段
  2. 路徑創建一個大小調整控制器
  3. 禁用視圖和佈局從控制器
  4. 通過$ this - > _ getParam('img')獲取圖像的路徑;
  5. 驗證
  6. 調整圖像
  7. 顯示圖像
  8. 內部視圖腳本我叫IMG SRC = 「/ IMG調整= image.jpg的?」

編輯:通常情況下,在組合這一點,我寫被顯示在頁面的源代碼,以避免難看的URL自定義路線

+0

謝謝。如果您處理每個產品或文章的多個圖像會怎麼樣?我們也許應該創建一個名爲prod_images的表格,並將其與產品相關聯,以便一個產品可以具有多個精確的圖像?關於控制器的使用...我不確定。我的意思是,這是否意味着我們需要一次又一次地實例化控制器(你沒有擴展我想的)。使用Action Helper會更好嗎?我的意思是,通過使用助手類,您可以在一個地方照顧所有業務,然後根據視圖調用它們。或者這是一個不好的方法? – MEM 2011-04-19 14:35:45

+0

那麼如果你在文章和圖片之間有OneToMany關聯是完全相同的,那麼你可以遍歷圖片列表並簡單地回顯它們。對於控制器的使用,通常當我得到很多圖像(和文章ofc)來顯示時,我將它們分頁,以便實際顯示10或20張圖像。並且它不是一個很大的負載。如果您使用助手類,這對服務器來說是額外的負載,因爲每次需要回顯圖像時它都會實例化。我覺得沒有最好的辦法.. – Cristian 2011-04-19 14:44:26

+0

非常感謝克里斯蒂安。我會考慮一下,但是這個清單肯定會幫助我。 :)乾杯。 – MEM 2011-04-19 15:14:15

2

我們通常保存圖像一些具體的目錄(如/的public_html /圖片),而且我們店裏的原件(通常[R吸引到一些最大值。大小 - 例如1024px - 上傳)。這裏還有一些子目錄,稱爲中型和小型(用於產品細節和用於分類列表的小縮略圖)。我們還使用產品主鍵(如果產品:圖像是1:1)或使用PK + id(1:N)存儲圖像。然後我們可以像這樣在img()視圖幫助器中輕鬆地組裝url。

public function img($product, $imageId, $size = self::SMALL) { 
    return sprintf('/images/%s/%s_%s.jpg', $size, $product->id, $imageId); 
} 

//in view - can also be wrapped in view helper - depends on your scenario 
<a href="<?php echo $this->img($product, 1, 'big');?>"><img src="<?php echo $this->img($product, 1, 'small');?>" /></a> 

編輯: BTW:其實我們從來不使用的原稿。我們製作「大」大小的圖像。

圖像調整大小的動作助手通常是一個好主意。但取決於你如何上傳圖像 - 如果只有一個動作和一個控制器 - 則不需要AFAIK。但是你可能還想上傳圖片來自進口,使用FTP上傳等

通過DB圖像的鏈接(如果說明的過程中abowe不能滿足您的需要)下降到兩類 - 內容爲中心和圖像中心。

您可以進入產品編輯,其中有一個按鈕或「上傳新圖像」或「鏈接上傳的圖像」。其他選項是使用「連接到產品」的圖像列表。高度依賴用戶的工作流程。

還有一些選項如何建立你的分貝。您可以在產品表中添加image_id。或者,您可以在產品表中添加imalelink_id,該錶鏈接到將圖像連接到產品的M:N表。你也可以在你的圖像表中使用product_id :)所有這些方法在某些情況下都是有效的,而在其他情況下則是錯誤的。一切取決於最終用戶將如何使用它。

+0

這似乎也是一個非常好的方法。那麼你需要在後來的某些特定視圖中調用該圖像,對嗎?所以,你在每個視圖中回顯你視圖助手的返回值。或者我沒有得到什麼?謝謝 – MEM 2011-04-19 22:10:01

+0

明白了。 :)謝謝澄清。最後一個問題::)這些/%s /%s_%s是什麼?再次感謝。 – MEM 2011-04-20 15:35:42

+0

這是普通的'sprintf()'語法。我喜歡用它,因爲它更容易閱讀:'sprintf('%s',$ url,$ title)'然後''' . $title . '''我也不太可能在標記中犯這樣一個錯誤。 – 2011-04-20 23:06:53