यदि आप node_object_prepare () के कोड को देखते हैं , जिसे नोड_फॉर्म () (नोड संपादित / बनाने के लिए प्रपत्र बिल्डर ) से कहा जाता है , तो आप देखेंगे कि इसमें निम्न कोड शामिल हैं:
// 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;
}
Hook_form_BASE_FORM_ID_alter () के कार्यान्वयन में , यह निम्नलिखित के समान कोड का उपयोग करने के लिए पर्याप्त है।
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.
}
}
यदि नोड नया है, तो प्रपत्र नोड बना रहा है; यदि नोड नया नहीं है, तो फ़ॉर्म मौजूदा नोड को संपादित कर रहा है।
Drupal 8 में, प्रत्येक वर्ग कार्यान्वयन EntityInterface
(जिसमें Node
कक्षा शामिल है ) EntityInterface::isNew()
विधि को लागू करता है। यह जांचना कि क्या नोड नया है, कॉलिंग जितना आसान हो जाता है $node->isNew()
। चूंकि Drupal 8 में $form_state['node']
अब नहीं है, इसलिए कोड निम्नलिखित हो जाता है:
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.
}
}