it-swarm.com.de

Unterschied zwischen Neu erstellen und Knoten in Formularänderung bearbeiten

Ich habe einen Änderungsabschnitt für einen bestimmten Inhaltstyp. Wie kann ich im Formular ändern herausfinden, ob es neues Formular erstellen oder Formular bearbeiten ist?

Mit dsm ($ form) von alter kann ich Ergebnisse mit verschiedenen Unterschieden erzielen. Was ist der beste Weg, um diese voneinander zu unterscheiden?

ist das ein guter weg

    if(isset($form['nid']['#value']))
     'means in edit form'
    else 
     'means in create new from'
24
Yusef

Wenn Sie sich den Code von node_object_prepare () ansehen, der von node_form () (dem Formular-Builder für den Knoten zum Bearbeiten/Erstellen eines Formulars) aufgerufen wird, werden Sie sehen, dass er enthält den folgenden Code:

  // If this is a new node, fill in the default values.
  if (!isset($node->nid) || isset($node->is_new)) {
    foreach (array('status', 'promote', 'sticky') as $key) {
      // Multistep node forms might have filled in something already.
      if (!isset($node->$key)) {
        $node->$key = (int) in_array($key, $node_options);
      }
    }
    global $user;
    $node->uid = $user->uid;
    $node->created = REQUEST_TIME;
  }

In einer Implementierung von hook_form_BASE_FORM_ID_alter () reicht es aus, Code ähnlich dem folgenden zu verwenden.

function mymodule_form_node_form_alter(&$form, &$form_state) {
  $node = $form_state['node'];

  if (!isset($node->nid) || isset($node->is_new)) {
    // This is a new node.
  }
  else {
    // This is not a new node.
  }
}

Wenn der Knoten neu ist, erstellt das Formular einen Knoten. Wenn der Knoten nicht neu ist, bearbeitet das Formular einen vorhandenen Knoten.

In Drupal 8) implementiert jede Klasse, die EntityInterface implementiert (einschließlich der Klasse Node ), die EntityInterface::isNew() Methode. Das Überprüfen, ob ein Knoten neu ist, ist so einfach wie das Aufrufen von $node->isNew(). Da in Drupal 8 dort ist nicht mehr $form_state['node'], der Code lautet wie folgt:

function mymodule_form_node_form_alter(&$form, &$form_state) {
  $node = $form_state->getFormObject()->getEntity();

  if ($node->isNew()) {
    // This is a new node.
  }
  else {
    // This is not a new node.
  }
}
61
kiamlaluno

Ja, Sie müssen überprüfen, ob die Knoten-ID vorhanden ist oder nicht.

12
Tareq Assaf
/**
 * Implementation of hook_form_alter().
 */
function MY_MODULE_form_alter(&$form, $form_state, $form_id) {
  if ($form['#node'] && $form['#node']->type .'_node_form' === $form_id) {
    // Is node form.

    if ($form['#node']->nid) {
      // Is node edit form.
    }
  }
}
4
Jekis

In Drupal 8 benötigen Sie die Variable form_id, Die in jedem Fall unterschiedlich ist und die _edit_ Enthält, wenn wir einen Knoten bearbeiten

function MODULENAME_form_alter(&$form, &$form_state, $form_id) { 
    if($form_id == '"node_article_edit_form"'){
        //edit form
    }
    if($form_id == 'node_article_form') {
        //create form
    }
}
1
GiorgosK