2009-02-04 16 views
8

¿Cómo personalizo un formulario de creación de contenido para cierto tipo de contenido? En este caso, tengo un tipo CCK de Productos, pero cada vez que creo un producto utilizo 4 campos Nombre, Precio, Imagen y dimensiones.Personalizar un formulario de contenido de creación para cierto tipo de contenido

¿Hay alguna manera de adelgazar el formulario de creación de contenido para simplemente tener estas opciones? ¿Es esto lo que hace Contemplate?

Respuesta

7

Querrá utilizar el gancho hook_form_alter.

En Drupal 6, utilizo esto para ocultar la mayoría de las cosas extrañas en la forma de editar/agregar nodos.

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

Contemplar es para diseñar la vista de nodo, no la forma de nodo. Aconsejo en contra, es mucho mejor usar los archivos node-nodetype.tpl.php.

+0

Esto también es relevante para Drupal 5, supongo? –

+0

Relevante pero ligeramente diferente (los argumentos de hook_form_alter cambiaron en D6). – ceejayoz

1

Otra opción, y esto podría ser más simple si realmente está tratando de reducir las cosas, es crear su propio formulario desde cero y crear un objeto nodo usted mismo en el manejador de envío del formulario.

1

encontrado un gran recurso en este:

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

Una cosa que mencionar que no estaba cubierto por Eaton o ceejayoz es ocultar los campos de la capa de tema.

+0

Establecer #access to FALSE oculta los campos en el formulario de edición sin tener que acceder a la capa de tema. – ceejayoz

0

Creo un módulo y uso form_alter y nodeapi.

A continuación se muestra la idea básica de los componentes que necesitará su módulo.

Mi archivo product.install tiene la siguiente:

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

A continuación, el archivo contiene 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); 
} 
Cuestiones relacionadas