欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

  發(fā)布時(shí)間:2014-11-03 15:46:39   作者:佚名   我要評(píng)論
這篇文章主要為大家介紹了drupal按分類進(jìn)行文章排序的實(shí)現(xiàn)方法,較為詳細(xì)的分析了drupal文件組織結(jié)構(gòu)與實(shí)現(xiàn)文章排序的方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下

本文實(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:

復(fù)制代碼
代碼如下:
function nodeorder_taxonomy_schema() {
$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)文章

最新評(píng)論