2010-05-12 3 views
1

Je n'ai pas réussi à obtenir drupal_get_form pour transmettre les données du noeud. Les extraits de code sont ci-dessous. La documentation de drupal_get_form (api.drupal.org) indique qu'elle transmettra les paramètres supplémentaires. Je base les données du nœud qui ne sont pas passées car $ node ['language'] n'est pas défini dans hook_form ce qui fait que $ form ['qqq'] n'est pas créé et donc le bouton de prévisualisation apparaît.drupal_get_form ne passe pas le long du tableau de noeuds

Mon but ici est que le bouton d'aperçu apparaisse en utilisant le chemin "node/add/author" mais n'apparaisse pas pour "milan/author/add". Toute méthode alternative pour atteindre cet objectif serait utile, mais la question à laquelle je veux répondre est dans le paragraphe précédent. Tout ce que j'ai lu indique que cela devrait fonctionner.

Cet élément de menu

 
$items['milan/author/add'] = array(
    'title' => 'Add Author', 
    'page callback' => 'get_author_form', 
    'access arguments' => array('access content'), 
    'file' => 'author.pages.inc', 
); 

appels Ce code

 
function get_author_form() { 
    //return node_form(NULL,NULL); 
    //return drupal_get_form('author_form'); 
    return author_ajax_form('author'); 
} 

function author_ajax_form($type) { 
    global $user; 
    module_load_include('inc', 'node', 'node.pages'); 

    $types = node_get_types(); 
    $type = isset($type) ? str_replace('-', '_', $type) : NULL; 
    // If a node type has been specified, validate its existence. 
    if (isset($types[$type]) && node_access('create', $type)) { 
    // Initialize settings: 
    $node = array('uid' => $user->uid, 'name' => (isset($user->name) ? $user->name : ''), 'type' => $type, 'language' => 'bbb','bbb' => 'TRUE'); 
    $output = drupal_get_form($type .'_node_form', $node); 
    } 

    return $output; 
} 

Et voici le code de hook_form et hook_form_alter

 
function author_form_author_node_form_alter(&$form, &$form_state) { 
    $form['author']=NULL; 
    $form['taxonomy']=NULL; 
    $form['options']=NULL; 
    $form['menu']=NULL; 
    $form['comment_settings']=NULL; 
    $form['files']=NULL; 
    $form['revision_information']=NULL; 
    $form['attachments']=NULL; 
    if($form["qqq"]) { 
     $form['buttons']['preview']=NULL; 
    } 
} 

function author_form(&$node) { 
    return make_author_form(&$node); 
} 


function make_author_form(&$node) { 
    global $user; 
    $type = node_get_types('type', $node); 

    $node = author_make_title($node); 
    drupal_set_breadcrumb(array(l(t('Home'), NULL), l(t($node->title), 'node/' . $node->nid))); 


    $form['authorset'] = array(
     '#type' => 'fieldset', 
     '#title' => t('Author'), 
     '#weight' => -50, 
     '#collapsible' => FALSE, 
     '#collapsed' => FALSE, 
    ); 

    $form['author_id'] = array(
    '#access' => user_access('create pd_recluse entries'), 
    '#type' => 'hidden', 
    '#default_value' => $node->author_id, 
    '#weight' => -20 
); 



    $form['authorset']['last_name'] = array(
    '#type' => 'textfield', 
    '#title' => t('Last Name'), 
    '#maxlength' => 60, 
    '#default_value' => $node->last_name 
); 

    $form['authorset']['first_name'] = array(
    '#type' => 'textfield', 
    '#title' => t('First Name'), 
    '#maxlength' => 60, 
    '#default_value' => $node->first_name 
); 

    $form['authorset']['middle_name'] = array(
    '#type' => 'textfield', 
    '#title' => t('Middle Name'), 
    '#maxlength' => 60, 
    '#default_value' => $node->middle_name 
); 

    $form['authorset']['suffix_name'] = array(
    '#type' => 'textfield', 
    '#title' => t('Suffix Name'), 
    '#maxlength' => 14, 
    '#default_value' => $node->suffix_name 
); 

    $form['authorset']['body_filter']['body'] = array(
     '#access' => user_access('create pd_recluse entries'), 
     '#type' => 'textarea', 
     '#title' => 'Describe Author', 
     '#default_value' => $node->body, 
     '#required' => FALSE, 
     '#weight' => -19 
    ); 


    $form['status'] = array(
    '#type' => 'hidden', 
    '#default_value' => '1' 
); 

    $form['promote'] = array(
    '#type' => 'hidden', 
    '#default_value' => '1' 
); 

    $form['name'] = array(
    '#type' => 'hidden', 
    '#default_value' => $user->name 
); 

    $form['format'] = array(
    '#type' => 'hidden', 
    '#default_value' => '1' 
); 


    // NOTE in node_example there is some addition code here not needed for this simple node-type 
    $thepath='milan/author'; 
    if($_REQUEST["theletter"]) { 
    $thepath .= "/" . $_REQUEST["theletter"]; 
    } 

    if($node['language']) { 
    $thepath='milan/authorajaxclose'; 
    $form['qqq'] = array(
     '#type' => 'hidden', 
     '#default_value' => '1' 
    ); 
    } 

    $form['#redirect'] = $thepath; 

    return $form; 
} 

Ce chemin de menu coïncide avec ce thème (PHPTemplate)

 
    

Répondre

1

avéré être une erreur de programmation de base à la ligne 4 de la fonction de make_author_form. Je mettais à zéro la variable $ node moi-même.

1

Cela peut ne pas être le cas mais je vois que vous utilisez $node en tant qu'objet au premier (titre), puis en tant que tableau (pour obtenir la langue) dans la méthode make_author_form(). Si $node est un objet, alors cela explique pourquoi vous ne pouvez pas récupérer $node['language'].

Je ne sais pas si je comprends parfaitement ce que vous essayez de faire, mais ce serait une bonne idée d'utiliser des arguments de page pour cela, je pense.

function mymodule_form_alter($form_id, &$form) { 
    // If $form_id is {node->type}_node_form 
    // Then, check for the first argument in the URL and hide/show Preview accordingly 
} 
+0

Ce n'était pas une mauvaise idée, mais pas le problème. C'était cruel qui s'est construit à partir de réécrire ce morceau particulier de code encore et encore. – ElectronicBlacksmith

Questions connexes