2009-02-04 175 views
8

如何爲特定內容類型自定義創建內容表單。在這種情況下,我有CCK類型的產品,但每次創建產品時,我都會使用4個字段名稱,價格,圖片和尺寸。爲特定內容類型自定義創建內容表單

有沒有辦法將創建內容表單縮小到只有這些選項? Contemplate是做什麼的?

回答

7

你會想要使用hook_form_alter掛鉤。

在Drupal 6中,我使用它來隱藏節點編輯/添加窗體中大部分無關的東西。

function mymodule_form_alter(&$form, $form_state, $form_id) { 
    // hide extraneous options in the node form for nodetype nodes 
    if($form_id == 'nodetype_node_form') { 
    $form['path']['#access'] = FALSE; 
    $form['menu']['#access'] = FALSE; 
    $form['author']['#access'] = FALSE; 
    $form['options']['#access'] = FALSE; 
    $form['comment_settings']['#access'] = FALSE; 
    $form['revision_information']['#access'] = FALSE; 
    } 
} 

設想是爲樣式設計節點視圖,而不是節點形式。我建議不要這樣 - 使用node-nodetype.tpl.php文件要好得多。

+0

這也是相關的Drupal 5,我猜? – 2009-02-04 18:17:58

+0

相關但略有不同(在D6中更改了hook_form_alter的參數)。 – ceejayoz 2009-02-04 20:25:33

1

另一種選擇 - 是要從頭開始創建自己的表單,並創建一個節點對象自己在表單的提交處理程序 - 如果你真的想苗條下來,這可能是簡單的。

0

我創建一個模塊並使用form_alter和nodeapi。

下面是你的模塊需要的組件的基本思想。

我product.install文件有以下幾點:

function product_install() { 
    db_query("CREATE TABLE {product} (
    nid int(10) unsigned NOT NULL default '0', 
    primary key (nid), 
    price DECIMAL(7, 2) UNSIGNED NOT NULL DEFAULT 0.00 
    ) TYPE=MyISAM /*!40100 DEFAULT CHARACTER SET utf8 */;" 
); 
} 

function product_uninstall() { 
    db_query("DROP TABLE {product}"); 
} 

然後product.module文件包含:

function product_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) { 
    if($node->type != 'product') { 
    return; 
    } 
    switch($op) { 
    case 'load': 
     return _product_load($node); 
    case 'insert': 
     _product_insert($node); 
     break; 
    case 'delete': 
     _product_delete($node); 
     break; 
    case 'update': 
     _product_delete($node); 
     _product_insert($node); 
     break; 
    case 'view': 
     //display your product 
     $node->content['price'] = array(
     '#value' => theme('transact_node_status', $node), 
     '#weight' => 5, 
    ); 
     break; 
    } 
} 

function product_form_alter(&$form, $form_state, $form_id) { 
    if($form_id == 'product_node_form'){ 
    $form['price'] = array(
     '#type' => 'textfield', 
     '#title' => t('Price'), 
     '#default_value' => $form['#node']->price, 
    ); 
    } 
    return $form; 
} 

function _product_load($node) { 
    $result = db_query("SELECT * FROM {product} WHERE nid = %d", $node->nid); 
    $arr = db_fetch_array($result); 
    unset($arr['nid']); 
    return $arr; 
} 

function _product_insert($node) { 
    db_query("INSERT INTO {product} (nid, price) VALUES(%d, %d)", $node->nid, $node->price); 
} 

function _product_delete($node) { 
    db_query("DELETE FROM {product} WHERE nid = %d", $node->nid); 
} 
相關問題