หากคุณดูที่รหัสของnode_object_prepare ()ซึ่งถูกเรียกจากnode_form () (ตัวสร้างฟอร์มสำหรับโหนดแก้ไข / สร้างฟอร์ม) คุณจะเห็นว่ามีรหัสต่อไปนี้:
// 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.
}
}