日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CMS:文章管理之视图(2)

發布時間:2025/3/20 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CMS:文章管理之视图(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇已經完成了分類樹的顯示,現在開始逐步完成分類的添加、刪除和編輯操作。

首先要做的是在樹面板上添加一個工具欄,放置添加、刪除和編輯按鈕。切換到文章管理視圖的腳本文件view.js,在樹的定義內,添加以下代碼添加工具欄和按鈕:

tbar: [

??? { iconCls: "folder-add", scope:me, tooltip: '增加文章類別',id:"CategoryButtonAdd"},

??? { iconCls: "folder-edit", scope:me, tooltip: '編輯文章類別',id:"CategoryButtonEdit",disabled:true},

??? { iconCls: "folder-delete",scope: me, tooltip: '刪除文章類別',id:"CategoryButtonDelete",disabled:true},

??? { iconCls: "refresh", scope: me,qtip: '刷新',id:"CategoryButtonRefresh" }

]

?

以上代碼基本是復制來復制去的了,沒什么特別。樣式里還沒定義編輯按鈕的樣式,在app.css里加上就行了。

現在切換到文章管理控制器的腳本Content.js,通過它們的id,添加4個按鈕的引用,代碼如下:

{ ref:"CategoryAdd", selector: "#CategoryButtonAdd" },

{ ref:"CategoryEdit", selector: "#CategoryButtonEdit" },

{ ref:"CategoryDelete", selector: "#CategoryButtonDelete" },

{ ref: "CategoryRefresh", selector:"#CategoryButtonRefresh" }

?

然后和用戶管理控制器一樣,為4個按鈕綁定單擊事件,代碼如下:

me.getCategoryAdd().on("click",me.onCategoryAdd, me);

me.getCategoryEdit().on("click",me.onCategoryEdit, me);

me.getCategoryDelete().on("click",me.onCategoryDelete, me);

me.getCategoryRefresh().on("click",me.onCategoryRefresh, me);

?

現在,先完成比較簡單的刷新操作,因為要找到文章管理的視圖,因而修改一下使用widget方法創建視圖時的代碼,讓它保存到控制器的屬性中,修改代碼如下:

me.view= Ext.widget("contentview");

panel.add(me.view);

?

這樣修改后,就不需要通過引用去找視圖了。現在就可輕松完成樹的刷新操作了,代碼如下:

onCategoryRefresh:function () {

??? this.view.tree.store.load();

},

?

添加操作將通過一個帶表單的彈出窗口實現,現在來創建這個窗口。在Scripts\app\view\Content目錄下創建一個名稱為CategoryEdit.js的腳本文件。因為是彈出窗口,因而需要從窗口繼承,代碼如下:

Ext.define("SimpleCMS.view.Content.CategoryEdit",{

??? extend: "Ext.window.Window",

??? hideMode: 'offsets',

??? closeAction: 'hide',

??? closable: true,

??? resizable: true,

??? layout: "fit",

??? title: '文章分類',

??? width: 800,

??? height: 600,

??? modal: true,

singleton: true,

?

??? initComponent: function () {

??????? var me = this;

??????? me.callParent(arguments);

??? }

?

})

?

代碼表明窗口可以關閉,可以調整大小,布局將采用FitLayout,默認寬度為800,高度為600,窗口為模態窗口。配置項closeAction表明窗口關閉后,只是隱藏起來,并不是銷毀,而且隱藏方式是通過偏移方式隱藏。

特別要注意,在這里把窗口設置成了單例模式(配置項singleton為true),目的是為了避免在控制器中先判斷窗口是否已經創建,如果還沒有,還要重新調用create方法創建一次。

如果想看一下效果,可切換到文章管理控制器,在視圖內添加“Content.CategoryEdit”引用該視圖。然后在onCategoryAdd方法內添加以下代碼:

onCategoryAdd:function () {

??? var me = this

??????? win =SimpleCMS.view.Content.CategoryEdit;

??? win.show();

},

?

好了,現在刷新一下瀏覽器,然后單擊添加類別按鈕,將看到如圖49所示的效果,一切正常。

圖50 分類編輯窗口

現在,要做的就是為窗口添加表單了,根據表格T_Category,需要編輯的字段包括父類、標題、題圖、分類說明和排序序數。標題將采用Textfield進行輸入,題圖則要通過顯示一個彈出窗口,從圖片管理這個擴展中選擇后插入,排序序數則可選擇使用Number字段輸入,分類說明則用Textarea字段,父類不用說是采用Combobox。

因為要用到一個圖片插入對話框,因而先來完成這個,這個不難,在Scripts/Extjs/ux目錄下先創建一個Dialog的目錄,該目錄的作用是用來放置一些對話框擴展。然后在該目錄下創建一個PicSelected.js的文件,然后可以復制一下分類編輯窗口的代碼過去,修改一下類名和配置項就可以了,代碼如下:

Ext.define("Ext.ux.Dialog.PicSelected",{

??? extend: "Ext.window.Window",

??? requires: ["Ext.ux.PicManager"],

??? singleton: true,

??? hideMode: 'offsets',

??? closeAction: 'hide',

??? closable: true,

??? layout: "fit",

??? imagePath: "",

??? resizable: true,

??? title: '插入圖片',

??? width: 1000,

??? height: 600,

??? modal: true,

??? initComponent: function () {

??????? var me = this;

?

??????? me.callParent(arguments);

??? }

?

})

?

熟記類名規則對怎么定義類名就沒什么難度。在這里添加了一個requires的配置項,表明該對話框要用到擴展PicManager。因為后臺的圖片訪問路徑和前臺的訪問路徑可能有差,因而這里特意添加了一個imagePath屬性,用來在插入時更改路徑。其它的配置項與分類編輯窗口基本無差。

對話框的主要作用就是顯示PicManager讓用戶選擇圖片,然后單擊插入按鈕插入圖片路徑,功能比較簡單,因而在initComponent的代碼比較簡單,具體代碼如下:

me.picmanager= Ext.create("Ext.ux.PicManager", { title: "" });

me.items= [me.picmanager];

me.dockedItems= [{

??? xtype: 'toolbar', dock: 'bottom', ui:'footer', layout: { pack: "center" },

??? items: [

??????????? { text: "插入", width: 80, handler:me.onInsert, scope: me }

??? ]

}];

?

現在,要完成插入操作。要插入圖片,首先要從PicManager中獲取到選擇的圖片,這個不難。然后,要獲取插入圖片的控件,這個就需要在顯示對話框的時候指定了,可通過一個名為ed的屬性來實現。思路明確后,就可編寫代碼了,具體代碼如下:

onInsert:function () {

??? var me = this, rs = me.picmanager.dataview.getSelectionModel().getSelection();

??? if (rs.length > 0) {

??????? if (me.ed.isFormField) {

??????????? me.ed.setValue(Ext.String.format("{0}{1}{2}",me.imagePath, rs[0].data.path, rs[0].data.filename));

??????? } else {

??????? }

??? }

??? me.close();

}

?

代碼先從擴展中獲取數據視圖的選中的記錄,如果有存在選擇記錄,則判斷ed指向的控件是否一個表單字段,如果是,就可以用setValue方法設置它的值了。通過Ext中字符串的format方法可以將訪問路徑、圖片路徑和文件名組合成字符串返回給控件。

?

現在返回分類編輯窗口,完成表單,先寫好表單的定義,如果已經做過項目,有寫好的表單,復制粘貼就行了,代碼如下:

me.form= Ext.create(Ext.form.Panel, {

??? border: false, bodyPadding: 5,

??? bodyStyle: "background:#DFE9F6",

??? trackResetOnLoad: true,

??? fieldDefaults: {

??????? labelWidth: 80, labelSeparator: ":", anchor: "0"

??? },

});

?

表單的顯示方式完全是個人喜歡,根據自己熟悉和喜好進行定義就好了。這里把表單的表框去了,然后將放置子組件部分向內壓縮了5px,以避免文字和窗口的內邊框貼在一起。背景顏色如果不設置就是白色的底色,筆者一向不太喜歡這樣白色的背景。尤其要注意trackResetOnLoad這個配置項,如果為true,當為表單設置了初始數據后,重置操作后會恢復到初始數據,而不是完全空白的狀態。配置項fieldDefaults就是默認的字段定義了,適用于所有字段。

接著就是在表單items配置項里添加字段了,首先是一個隱藏字段,用來記錄編輯時的記錄的id,代碼如下:

{xtype:"hidden",name:"CategoryId"},

接著是標題,代碼如下:

{ xtype: "textfield", fieldLabel: "標題", name: "Title",allowBlank: false},

題圖復雜點,需要用一個字段容器來放置一個文本字段和選擇按鈕,代碼如下:

{

??? xtype: "fieldcontainer", layout:"hbox", fieldLabel: "題圖", defaults: { hideLabel: true },

??? items: [

??????????? { xtype: 'textfield', flex: 1, name:"Image" },

??????????? { xtype: "button", width:80, text: "選擇",

??????????? ???handler: function () {

??????????? ??????? var img = this.up("form").getForm().findField("Image");

??????????? ??????? Ext.ux.Dialog.PicSelected.ed = img;

??????????? ??????? Ext.ux.Dialog.PicSelected.show();

??????????? ???}

??????????? }

???? ]

}

?

從代碼可以看到單擊選擇按鈕后,會先從表單中找到Image字段,然后把圖片選擇對話框的ed屬性指向該組件,再顯示圖片選擇對話框就可以了。

因為這里要用到圖片選擇對話框,因而需要在窗口定義中加入requires配置項來引用該對話框。

如果想預覽題圖,可以加入一個Image組件,代碼如下:

{

???? xtype: 'fieldset', title: "題圖預覽", height: 150, items: [

??????????? { xtype: "image", id:" CategoryPreviewImage" }

???? ]

}

這還要修改一下Image字段,監聽它的chage事件,當字段改變時,改變圖片的src,代碼如下:

{xtype: 'textfield', flex: 1, name: "Image",

??? listeners: {

??????? scope: me,

??????? change: function (filed, newValue,oldValue) {

???????????Ext.getCmp("CategoryPreviewImage").setSrc(newValue);

??????? }

??? }

},

?

接著是父類選擇,代碼如下:

{

???? xtype: "combobox", fieldLabel:"父類", name:"ParentId", allowBlank: false,

???? editable: true, shadow: false, mode:'local', triggerAction: 'all', store: "categoriesCombo",

???? rootVisible: true, displayField:"text", valueField: "id", flex: 1,

???? listConfig: {

??????????? displayField: "listText"

???? }

},

?

這里要特別說明一下,筆者自己都忘記了。因為分類編輯窗口是單例模式的,會直接創建實例,而且是先于控制器創建,因而這里的Combobox要用到CategoriesCombo,必須在requires添加引用,而且要將CategoriesCombo也設置為單例模式,且添加配置項storeId,為它定義一個標識,再在Combobox里引用。在文章管理控制器里,還要把配置項stores中對該Store的引用刪除。

在Combobox中,列表中的數據不是非要使用displayField設置的字段來顯示的,可通過listConfig配置項,重新設置顯示字段。在這里,設置了顯示字段為listText,筆者這樣做的目的是為了使列表顯示得像一顆樹。

余下是排序序數和分類說明,這個不難,代碼如下:

{

??? xtype: 'numberfield', fieldLabel: "排序序數", name: "SortOrder",allowBlank: false

},

{

??? xtype:'textareafield',fieldLabel: "說明",name:"Content",labelAlign:"top",height:250

}

?

接著在表單底部放置保存和重置兩個按鈕,代碼如下:

dockedItems:[{

??? xtype: 'toolbar', dock: 'bottom', ui:'footer', layout: { pack: "center" },

??? items: [

???? ??? {text: "保存", width:80, disabled: true, formBind: true, handler: me.onSave, scope: me },

???? ??? {text: "重置", width:80, handler: me.onReset, scope: me }

??? ]

}]

?

保存按鈕默認狀態禁用的,設置了formBind為true,也就是說只有所有字段輸入符合要求的時候才可以開啟保存按鈕,這樣比較方便。

現在把表單放到窗口的items里,代碼如下:

me.items = [me.form];

?

現在可以測試一下窗口了,刷新一下瀏覽器,然后單擊添加分類按鈕,可看到如圖50的效果。底部按鈕太靠近窗口底部了,需要調整一下,這個可通過設置窗口bodyPadding來實現,在單例模式的配置項下添加以下代碼:

bodyPadding:"00 10 0",

圖50 完成后的分類編輯窗口


這樣,窗口底部就會向內縮進10px,按鈕也就不再靠近窗口底部了,刷新一下瀏覽器,會看到如圖51的效果。

圖51 調整按鈕位置后的分類編輯窗口

測試一下選擇圖片,在彈出的圖片對話框中,選擇8.png,然后單擊插入按鈕,會看到題圖的值為“/8.PNG”,但是預覽圖片沒效果,這是因為圖片路徑不對。因為現在沒有前臺,所以直接使用后臺的路徑作為圖片路徑就好了,在選擇按鈕的單擊事件中,添加以下代碼:

Ext.ux.Dialog.PicSelected.imagePath= "upload";

?

刷新一下瀏覽器,再選擇圖片8.PNG,會看到值已經變為“upload/8.PNG”,如圖52,預覽圖片也顯示出來了。

?

圖52 調整圖片路徑后的預覽圖片顯示

下面要完善父類的選擇,這個下文再說。

?

轉載于:https://www.cnblogs.com/hainange/archive/2012/11/11/6334227.html

總結

以上是生活随笔為你收集整理的CMS:文章管理之视图(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。