我的廣告單元,有空點一下哦,謝謝!
最近遇到一個問題,在做新聞發布功能的時候會出現圖文混排的現象,但當刪除新聞的時候並沒有同時刪除該新聞中的圖片,因為大多數的HTML編輯器都僅僅支援上傳圖片,好的能夠支援瀏覽伺服器圖片,但效果都不佳,那麼有什麼方法能夠取出新聞中的圖片,然後可以根據這些圖片做“文章”呢?
通過資料搜集,自己總結出一套思想,僅供參考,如下:
首先設計新聞表(我只挑重點欄位),id、title、Details、PublishTime、PublishMan、NewsImg(這個欄位就是記錄該條新聞中的圖片的,欄位長度要長一些,因為記錄的是圖片的完整url,當然你可以僅僅儲存圖片的名字,但這種情況在某種情況下會出現圖片不能顯示的後果)
好資料庫設計好了,然後就是怎麼去圖片了,我這裡用Regex來取。
//返回新聞中的所有圖片,用|隔開 public string MyGetImgUrl(string text) { StringBuilder str = new StringBuilder(); string pat = @"<img\s+[^>]*\s*src\s*=\s*([']?)(?<url>\S+)'?[^>]*>"; Regex r = new Regex(pat, RegexOptions.Compiled); Match m = r.Match(text.ToLower()); while (m.Success) { Group g = m.Groups[2]; str.Append(g).Append("|");//g就是圖片的完整url m = m.NextMatch(); } return str.ToString().Replace("\"", "").TrimEnd('|'); } //插入新聞 protected void Button1_Click(object sender, EventArgs e) { CJ_DBOperater.CJ.sqlconn_str = "server=localhost;database=PicLinkToNews;uid=sa;pwd=ovenjackchain"; string str = "insert into news values('{0}','{1}','{2}','{3}','{4}')"; //TxtContent.Text就是獲得HTML編輯器的內容,他是HTML格式的 CJ_DBOperater.CJ.SQL_ExecuteNonQuery(string.Format(str, TxtTitle.Text, TxtContent.Text, DateTime.Now.ToString(), "admin", MyGetImgUrl(this.TxtContent.Text))); //插入成功 }
到這裡就OK了,我們已經插入了一條新聞,並且把這條新聞裡的圖片URL取出放到NewsImgs欄位裡面了。
那接下來的事情就好辦了吧。
例如,我想做一個flash圖片滾動效果,圖片就是新聞圖片,點擊圖片可以跳轉到該條新聞,那麼這個的重點就是如何取出圖片。
很簡單了,因為我們已經把圖片放到NewsImgs欄位裡面了,只需要sql語句就完全可以了。
DataTable dt = CJ_DBOperater.CJ.SQL_ReturnDataTable("select top 4 NewsImgs from news where NewsImgs!=''");for (int i = 0; i < dt.Rows.Count; i++){if (dt.Rows[i][0].ToString().Contains('|'))Response.Write(dt.Rows[i][0].ToString().Substring(0, dt.Rows[i][0].ToString().IndexOf('|')) + "<br />");elseResponse.Write(dt.Rows[i][0].ToString()+"<br />");}
//這裡是每條新聞只取第一個圖片(如果新聞中有圖片的話)
OK了。
圖片都取出來了,那麼刪除新聞同時刪除圖片就OK了。
當然若您僅僅做刪除新聞同時刪除圖片這個功能是不需要NewsImgs欄位也完全可以的。
本案例源碼下載:http://download.csdn.net/source/2119062