1. 程式人生 > >dedecms中自定義資料模型

dedecms中自定義資料模型

剛學習完dedecms的標籤語法,我有很多困惑,覺得標籤的意義比較抽象,不知道如何用標籤來寫一些具體的內容。如果有一些資料庫的程式設計經驗,就知道一個很常用的程式設計範例—增刪改查。比如說,我要建立的是書本的模型,有索書號,書名,型別……,之後要寫一個網頁來完成書本資訊的增刪改查,這篇文章主要解決這種問題。QQ好友列表獲取軟體

一頻道(內容模型)

       我很長時間弄不清頻道和欄目的區別。從網上找了一些解釋如下:

       欄目就是網站中導航劃分出的模組,如百度中的新聞、網頁、貼吧等就是欄目。

       頻道是欄目的型別。官方的定義是:頻道指內容模型,網站的欄目都是基於不同的模型建立的。也就是說一個頻道還可以衍生出多個欄目,一個欄目只對應於一個頻道。

       查到了以上定義後,我以為對頻道和欄目已有較深刻的認識了。直到我遇到這個問題,“什麼時候建立頻道,什麼時候建立欄目?”

       頻道對應於資料模型,當要建立一個新的資料模型,就要建立頻道。如書本模型,它和文章模型,圖片模型的資料表結構不同。一個新的模型有以下的元素:資料表,增刪改程式碼。

       而欄目是對應於功能而言的,就像百度中的新聞、網頁、貼吧,什麼時候要新增欄目還是比較明顯的。3種模板屬於欄目的元素。

       “一個頻道還可以衍生出多個欄目”這句話有點虛,新聞發言人實際中網頁中的內容都很飽滿,每個欄目的內容都可能很不同,除了實用的文章模型外,基本每個頻道都為一個欄目而設。

       在dedecms中,有頻道>欄目>文章這幾個基本的單位。每個單位都會用id號唯一標識,頻道(cid,channel id),欄目(tid,type id),文章(aid,article id) 。

二新增模型

       關於新增模型,不妨看下這篇文章。它主要講操作步驟,我會結合操作講講原理。上面提到,一個模型有資料表,增刪改程式碼這兩個元素,下面就按這個思路發展。

       點選了“增加新模型”後,會看到表單中的附加表,填dede_addonXX,XX就是前面填寫的名字標識。Dedecms中的文章不是指具體的文章,更像是記錄。如圖片頻道中,上傳的一張圖片就是一個文章。所以一篇文章由兩部分組成,其一是基本資訊,如作者,釋出時間等,記錄在dede_archives中,這個表稱為主表。每個頻道的文章資訊,存在附加表中,如圖片頻道的附加表為dede_addonimages。

       順便說一下,在模型性質處有獨立模型的選項,就是新建立的模型中,文章在dede_archives沒有記錄。可能見到dede_archives中多餘的欄位太多,不是每個模型都需要,才有這種設計。獨立模型更多叫單表

模型,縮寫為sg,有專門的sgarclist。現在剛剛接觸,就先不理它。

在“增加新模型”的表單提交後,會看到資料庫中多了一個dede_addonXX的表,不要急著定義這個表的欄位,因為dedecms會輔助我們完成這個過程。

       現在大約來到“這篇文章”的第三點,依次進入 內容模型管理>dede_addonXX的修改>欄位管理>新增新欄位 就可以為dede_addonXX新增欄位了。新增完一個欄位提交後後,會回到欄位管理的頁面,看到“模型欄位配置”,是一個代表剛才定義過程的標籤,這是手動定義資料庫表所沒有的。總之,對附加表用該方法新增新欄位會更好。

       關於增刪改的程式碼,在前面的檔案發布/修改/管理出已經定義了。開始時,用archives_add.php,archives_edit.php和content_list.php。由於dedecms有自動錶單功能,所以這個檔案基本夠用了。自動錶單的意思是前面新增新欄位時設定的欄位,會在add,edit等表單中以控制元件形式出現,不需使用者新增程式碼。如果覺得不夠用,可以參照archives_add.php等DIY一下。

       這樣自定義的頻道就可以用來生成欄目,像預設欄目一樣好用。微信好友列表獲取

       對於增刪改,這可能只是主模型的搭建,對於輔助模型也可以參照其他後臺管理程式碼,像分類資訊模型中,增加一個地區表。要搞清後臺管理,有要費一番功夫。

   增刪改功能不僅限於後臺,前臺也有這些功能。前臺就不能用表單這種呆板的提交,可能要用到ajax。可參考系統頂踩功能和評論功能的實現。

三使用模型中的資料

       增刪改後還剩下查,這個功能的特點是不用填很多表單。資料的查詢一般用標籤完成,field,arclist,list及其衍生標籤已經覆蓋了不少情況。

       在文章模板中能用field標籤查詢附加表的欄位,而在列表模板中,也能通過arclist查詢到附加表的欄位,如下:

<tr>
{dede:arclist addfields='sjdz,yysj' channelid='1}
<td>商家地址:[field:sjdz/]</td>
<td>營業時間:[field:yysj/]</td>
{/dede:arclist}
</tr>

關鍵是addfields和channelid,addfields裡面是你的自定義欄位,channelid如果是普通文章就是1

       當然也有不少情況是不夠用的,要自定義標籤。可看看下列文章:文章1文章2

相關推薦

dedecms定義資料模型

剛學習完dedecms的標籤語法,我有很多困惑,覺得標籤的意義比較抽象,不知道如何用標籤來寫一些具體的內容。如果有一些資料庫的程式設計經驗,就知道一個很常用的程式設計範例—增刪改查。比如說,我要建立的是書本的模型,有索書號,書名,型別……,之後要寫一個網頁來完成書本資訊的增刪

織夢繫統定義搜尋模型不存在”的解決方法

搜尋了一下關於自定義搜尋模型不存在這個問題 重新整理下:1.mysql 資料庫在5.0版本以上2. 自定義搜尋表dede_advancedsearch 這個表的結構把256 改成255 3.還有就是搜

ADS定義verilogA模型新增方法

以新增一個電流隨電壓指數變化的電阻為例 (1)新建工程檔案,如新建veritest_wrk (2)在工程目錄新建資料夾veriloga,裡邊放入自定義veriloga檔案,如expR.va (3)在ADS主介面新建schematic (4)新增一個普通的電阻元件R (5)雙

dedecms sql 定義模型 多表查詢

 副表:wl_addon18,wl_addon17; 主表:wl_archives {dede:sql sql="select wl_archives.*,wl_archives.litpic, wl_archives.title,wl_addon18.style,wl_addon

如何在Qt使用定義資料型別

這裡我們使用下面這個struct來做說明(這裡不管是struct還是class都一樣): struct Player {     int number; QString firstName;     QString lastN

sklearn定義轉換器以及使用流水線對資料據進行處理

儘管 Scikit-Learn 提供了許多有用的轉換器,你還是需要自己動手寫轉換器執行任務,比如自定義的清理操作,或屬性組合。你需要讓自制的轉換器與 Scikit-Learn 元件(比如流水線)無縫銜接工作,因為 Scikit-Learn 是依賴鴨子型別的(而不是繼承),你所

潤乾報表設計器使用 spring 框架實現定義資料

spring是一個開源框架,是為了解決企業應用程式開發複雜性而建立的。在 web 開發環境中經常會與 struts、hibernate聯合起來使用,進行規範的框架結構開發。潤乾中的二次開發也可以與 SSH 框架相結合部署到 web 專案中。本文介紹在設計時沒有啟動 web 服務,在設計器中使用 sp

Delphi 製作定義資料感知控制元件並裝入包(dpk檔案)(與DBText類似的資料感知控制元件)

一、基礎知識簡介: 1、包的命名介紹:                 包的命名沒有規則,但是建議遵守包的命名約定:包的命名與包的版本相關,包的名稱前面幾個

Android定義ViewGroup使每行元件數量不確定,並拿到選中資料

1先看效果圖 2專案目錄 3在定義控制元件FlowTagGroup package android.zhh.com.myviewgroup; /** * Created by sky on 2017/3/10. */ import android.conten

Django 模型定義欄位型別Field

來一個簡單的例子吧。1. 減少文字的長度,儲存資料的時候壓縮,讀取的時候解壓縮,如果發現壓縮後更長,就用原文字直接儲存:Django 1.7 以下1234567891011121314151617181920212223242526272829303132from djang

YII2定義使用者認證模型,完成登陸和註冊

有些時候我們需要自已定義使用者類,操作自已建的使用者表,來完成登陸和註冊功能。 使用者表結構如下,當然可以根據自已的需要新增或刪除: CREATE TABLE `tb_user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '使

在Activity通過Bundle傳遞定義資料型別

例項化Book類,得到Book物件book以及設定成員變數: if(TextUtils.isEmpty(bookName)||TextUtils.isEmpty(author)||TextUtils.isEmpty(id)){ Toast.makeText(AndroidBundleActivity.this

mysql插入動態定義資料,開發自測常用

一個向mysql中插入測試資料時常用的sql語句,提高開發效率 INSERT INTO driver.tb_dealer_meeting_question (id,

vue2.0在頁面定義元件模組,以及頁面與元件之間的資料傳遞

1.在頁面上引入寫好的元件import UpdataPassword from './updataPassWord'       //updataPassWord為元件的name2.註冊元件components:{               //註冊元件  UpdataPa

潤乾報表API定義資料

報表的資料來源大部分來自資料庫,正常情況潤乾報表都能自動處理,但是也會有特殊的情況,例如通過中介軟體連線資料庫而非直連?通過業務程式算出的資料傳遞給報表進行展現等等。因此需要使用者自定義資料集,我們看一個例子。  新建一個類檔案,在類檔案中寫如下程式碼: package t

在HQL select查詢語句定義查詢結果返回的資料型別

1.select子句用於選擇制定的屬性或者直接選擇某個屍體,當然select選擇的屬性必須是from後持久化類包含的屬性。例如: select 0.name from Owner o 2.select可以選擇任意屬性,即不僅可以選擇持久化類的直接屬性,還可以選擇組建屬性包

如何使用tensor2tensor定義資料並訓練模型(很全面)

如何使用tensor2tensor自定義資料訓練模型 由於tensor2tensor高度的封裝,內部新增和一些資料集,和一些常見的問題,所以在直接用起來比較方便。但是如果想要用不同的資料訓練模型,或者是用模型解決一個其他的問題,就要費一番功夫了。 這裡主要是解決了用自己的

Django定義模型管理器(Manager)及方法

1.自定義管理器(Manager) 在語句Book.objects.all()中,objects是一個特殊的屬性,通過它來查詢資料庫,它就是模型的一個Manager.每個Django模型至少有一個manager,你可以建立自定義manager以定製資料庫的訪問.這裡有兩個方法建立自定義manager:新增額

淺析在QtWidget定義Model(beginInsertRows()和endInsertRows()是空架子,類似於一種信號,用來通知底層)

cti ron 初學者 開發 http 沒有 insert ati 學習 Qt 4推出了一組新的item view類,它們使用model/view結構來管理數據與表示層的關系。這種結構帶來的功能上的分離給了開發人員更大的彈性來定制數據項的表示,它也提供一個標準的model接

Python編程定義Lambda函數的使用場景

list str pre net 代碼 接收 n) app image Python 中定義函數有兩種方法,一種是用常規方式 def 定義,函數要指定名字,第二種是用 lambda 定義,不需要指定名字,稱為 Lambda 函數。 Lambda 函數又稱匿名函數,匿名函數