drupal按分類進(jìn)行文章排序的實(shí)現(xiàn)方法

本文實(shí)例講述了drupal按分類進(jìn)行文章排序的實(shí)現(xiàn)方法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:
Drupal的文章組織形式,決定了其文章排序是一件比較麻煩的事。由于Drupal中沒(méi)有“欄目”這樣的概念,而采用了“分類”的概念,一般網(wǎng)站 都會(huì)利用“分類”實(shí)現(xiàn)類似“欄目”的功能。但在排序上,由于文章可以同時(shí)屬于多個(gè)分類,也可以同時(shí)屬性一個(gè)分類的多個(gè)“術(shù)語(yǔ)”,因而排序的問(wèn)題就變得比較 復(fù)雜起來(lái)。
Drupal上有一些進(jìn)行排序的模塊,在官網(wǎng)這里有相關(guān)的介紹:http://drupal.org/node/398508。
有的時(shí)候這些模塊都不能滿足我們項(xiàng)目的要求,只能自己寫一個(gè)模塊:nodeorder_taxonomy,只實(shí)現(xiàn)了文件的按分類排序。模塊在設(shè)計(jì)上支持 article類型按任何分類字段進(jìn)行排序,為描述方便,這里簡(jiǎn)化環(huán)境,約定以artile類型的field_lanmu_multi字段進(jìn)行排序,這個(gè) 字段來(lái)源于分類”文章欄目”(machine name : _article_lanmu)。
1.建立數(shù)據(jù)表node_term_order:
$schema['node_term_order'] = array (
'description' => 'store information for node term order',
'fields' => array (
'nid' => array (
'description' => 'node id',
'type' => 'int',
'unsigned' => true,
'not null' => true,
),
'tid' => array(
'description' => 'term id',
'type' => 'int',
'unsigned' => true,
'not null' => true,
),
'sticky_order' => array (
'description' => 'stickyOrder, order desc, when >0 sticky, 0 not sticky',
'type' => 'int',
'unsigned' => true,
'not null' => true,
),
'node_order' => array (
'description' => 'node order',
'type' => 'int',
'unsigned' => true,
'not null' => true,
),
),
'indexes' => array(
'nid' => array('nid'),
'tid' => array('tid'),
'sticky_order' => array('sticky_order'),
'node_order' => array('node_order'),
),
'primary key'=> array('tid','nid'),
);
return $schema;
}
這個(gè)表里存放了node按分類的順序以及置頂順序。這里的置頂取代了系統(tǒng)默認(rèn)的sticky字段。sticky_order和node_order分別存放節(jié)點(diǎn)的置頂排序值和非置頂排序值,倒序,即值越大越靠前。
2. 對(duì)節(jié)點(diǎn)數(shù)據(jù)進(jìn)行初始化操作。
這一步,把所有的article,按照sticky asc, created asc 的順序,遍歷field_lanmu_multi的值,依次放到node_term_order里,保證節(jié)點(diǎn)進(jìn)入node_term_order以后的順序與原始的排序一致。
3.監(jiān)控節(jié)點(diǎn)操作。
利用hook_node_insert和hook_node_update和hook_node_delete監(jiān)控節(jié)點(diǎn)的插入、更新和刪除動(dòng)作,并對(duì)node_term_order表進(jìn)行相應(yīng)的修改。
4.提供排序界面。
排序是按照分類的某個(gè)術(shù)語(yǔ)對(duì)節(jié)點(diǎn)安排順序。提供了兩種排序的方法:界面上拖動(dòng)排序以及指定節(jié)點(diǎn)排序位置的排序。
界面上拖動(dòng)排序,利用了drupal提供的可拖動(dòng)排序表格的功能,在其他文章里有詳細(xì)介紹,這里不再贅述。唯一需要說(shuō)明的是,在操作界面上另建一個(gè) weight字段,值由node_order 或sticky_order按順序依次從0開(kāi)始賦值,表格排序中改變的是weight的值。提交以后,按照weight的值排序,再改變 node_order或sticky_roder的值。
直接指定節(jié)點(diǎn)排序位置的方法,是根據(jù)某個(gè)術(shù)語(yǔ)指定某個(gè)節(jié)點(diǎn)在這個(gè)術(shù)語(yǔ)的排序中位于第幾的位置。相對(duì)于界面拖動(dòng)排序,這個(gè)實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單。
5.顯示排序結(jié)果。
術(shù)語(yǔ)中文章的顯示路徑是taxonomy/term/%term。這是系統(tǒng)默認(rèn)的術(shù)語(yǔ)下文章的列表。定義新的路徑taxonomy/term/%term/list,在自己的程序中實(shí)現(xiàn)對(duì)術(shù)語(yǔ)下文章的排序列表。實(shí)現(xiàn)過(guò)程比較簡(jiǎn)單,不再詳述。
以上是大概的實(shí)現(xiàn)方法。實(shí)際實(shí)現(xiàn)起來(lái)比這個(gè)復(fù)雜,例如按照article類型中的所有分類字段(包括tags)可配置是否管理排序;還有一個(gè)分級(jí)顯 示分類所有術(shù)語(yǔ)的界面,那里鏈接到分類列表、排序界面;以及利用hook_views_data向views模塊申明數(shù)據(jù),以供views使用。
希望本文所述對(duì)大家的drupal二次開(kāi)發(fā)有所幫助。
相關(guān)文章
- 真是不看不知道,Drupal 真奇妙。很多使用CMS內(nèi)容管理系統(tǒng)的人可能都會(huì)知道一款國(guó)外的CMS系統(tǒng):Drupal 。在我們傳統(tǒng)的想象中CMS除了能做內(nèi)容文章站外,其他還有圖片站,分2010-01-24
php 內(nèi)容管理系統(tǒng) Drupal v8.9.17
Drupal是一個(gè)開(kāi)源的內(nèi)容管理系統(tǒng)(CMS)平臺(tái),它是用PHP寫成的。Drupal有一個(gè)優(yōu)秀的模塊化結(jié)構(gòu),提供了許多模塊2021-08-05- 對(duì)頁(yè)面和靜態(tài)資源的啟用緩存和Gzip壓縮傳輸.2010-01-24
CKeditor for Drupal 7 開(kāi)源在線網(wǎng)頁(yè)編輯插件 v3.6.3
CKeditor是一款在線網(wǎng)頁(yè)編輯插件(用瀏覽器編輯后所見(jiàn)即所得),支持多種平臺(tái)下的腳本(asp aspx php cfm Dhtml htc),還集成了上傳圖片組件,含簡(jiǎn)、繁中文2012-04-26Drupal 5.x 6.x 簡(jiǎn)體中文語(yǔ)言包[漢化補(bǔ)丁]
一個(gè)國(guó)外的BLOG,更可以說(shuō)是功能強(qiáng)大的CMS,在功能設(shè)計(jì)上它仿照了phpnuke,xoops等的模塊化方式,界面上仿照了blog模式 該語(yǔ)言包借鑒了5.x漢化包中的翻譯。添加了其中沒(méi)有2009-01-15- drupal模塊開(kāi)發(fā)分析,方便想要drupal模塊開(kāi)發(fā)的朋友2012-12-06
drupal 自定義表單調(diào)用autocomplete主標(biāo)簽實(shí)現(xiàn)代碼
drupal 自定義表單調(diào)用autocomplete主標(biāo)簽實(shí)現(xiàn)代碼,需要的朋友可以參考下2012-12-06Drupal7之drupal_static函數(shù)用法解析
這篇文章主要為大家介紹了Drupal7之drupal_static函數(shù)用法,需要的朋友可以參考下2014-08-15drupal常用到的幾種過(guò)濾函數(shù)小結(jié)
這篇文章主要為大家介紹了drupal常用到的幾種過(guò)濾函數(shù),總結(jié)了常見(jiàn)過(guò)濾函數(shù)的具體用法,非常實(shí)用,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-11-03drupal使用hook_form_alter()修改表單實(shí)例
這篇文章主要為大家介紹了drupal使用hook_form_alter()修改表單的實(shí)現(xiàn)方法,包括了修改多個(gè)表單與修改特定的表單,非常實(shí)用,需要的朋友可以參考下2014-11-03