2009-02-04 6 views
8

मैं किसी निश्चित सामग्री प्रकार के लिए एक निर्माण सामग्री फ़ॉर्म को कैसे अनुकूलित करूं। इस उदाहरण में मेरे पास उत्पाद का एक सीसीके प्रकार है, लेकिन हर बार जब मैं कोई उत्पाद बनाता हूं तो मैं 4 फ़ील्ड नाम, मूल्य, चित्र और आयामों का उपयोग करता हूं।किसी निश्चित सामग्री प्रकार के लिए एक निर्माण सामग्री फ़ॉर्म को अनुकूलित करें

क्या इन विकल्पों को बनाने के लिए सामग्री निर्माण फ़ॉर्म को कम करने का कोई तरीका है? क्या यह Contemplate करता है?

उत्तर

7

आप hook_form_alter हुक का उपयोग करना चाहेंगे।

ड्रूपल 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 के लिए प्रासंगिक है, मुझे लगता है

मेरे product.install फ़ाइल निम्न है? –

+0

प्रासंगिक लेकिन थोड़ा अलग (hook6form_alter के तर्क D6 में बदल गए)। – ceejayoz

1

एक और विकल्प - और यदि आप वास्तव में चीजों को कम करने की कोशिश कर रहे हैं तो यह आसान हो सकता है - स्क्रैच से अपना स्वयं का फॉर्म बनाना है, और फ़ॉर्म के सबमिट हैंडलर में स्वयं नोड ऑब्जेक्ट बनाना है।

1

इस पर एक महान संसाधन मिला: यह उल्लेख किया

http://www.lullabot.com/articles/modifying-forms-5-and-6

एक बात है कि उस ईटन द्वारा कवर नहीं किया गया था या ceejayoz विषय परत में क्षेत्रों को छिपाने के लिए है।

+0

FALSE को #access सेट करना थीम परत में प्रवेश किए बिना संपादन फ़ॉर्म में फ़ील्ड छुपाता है। – ceejayoz

0

मैं एक मॉड्यूल बनाता हूं और form_alter और nodeapi का उपयोग करता हूं।

नीचे आपके मॉड्यूल की आवश्यकता वाले घटकों का मूल विचार है।

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); 
} 
संबंधित मुद्दे