2009-02-04 12 views
8

Wie kann ich ein Inhaltsformular für einen bestimmten Inhaltstyp anpassen? In diesem Fall habe ich einen CCK-Typ von Produkten, aber jedes Mal, wenn ich ein Produkt erstelle, verwende ich 4 Felder Name, Preis, Bild und Abmessungen.Anpassen eines Inhaltserstellungsformulars für einen bestimmten Inhaltstyp

Gibt es eine Möglichkeit, das Formular zum Erstellen von Inhalten zu verkleinern, um nur diese Optionen zu haben? Ist dies was Contemplate tut?

Antwort

7

Sie möchten den hook_form_alter Haken verwenden.

In Drupal 6 verwende ich dies, um die meisten fremden Sachen im Knoten bearbeiten/hinzufügen Formular zu verstecken.

Mit Contemplate können Sie die Knotenansicht formatieren, nicht die Knotenform. Ich rate davon ab - es ist viel besser, node-nodetype.tpl.php Dateien zu verwenden.

+0

Dies zu Drupal auch relevant ist 5, nehme ich an? –

+0

Relevant, aber leicht unterschiedlich (die Argumente von hook_form_alter wurden in D6 geändert). – ceejayoz

1

Eine andere Option - und das könnte einfacher sein, wenn Sie wirklich versuchen, Dinge zu reduzieren - besteht darin, ein eigenes Formular von Grund auf neu zu erstellen und ein Knotenobjekt selbst im Übergabehandler des Formulars zu erstellen.

1

eine große Ressource auf diese Gefunden:

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

Eine Sache, die erwähnt, dass nicht von Eaton abgedeckt wurde oder ceejayoz ist die Felder in der Themen Ebene auszublenden.

+0

Wenn Sie #access auf FALSE setzen, werden die Felder im Bearbeitungsformular ausgeblendet, ohne dass Sie in die Themenebene gelangen müssen. – ceejayoz

0

Ich erstellen ein Modul und verwenden form_alter und die nodeapi.

Im Folgenden finden Sie die Grundidee der Komponenten, die Ihr Modul benötigt.

Meine product.install Datei hat die folgenden:

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}"); 
} 

Dann wird die product.module Datei enthält:

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); 
} 
Verwandte Themen