Nếu bạn nhìn vào mã của node_object_prepare () , được gọi từ node_form () (trình tạo biểu mẫu cho nút chỉnh sửa / tạo biểu mẫu nút), bạn sẽ thấy nó chứa mã sau:
// 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;
}
Khi triển khai hook_form_BASE_FORM_ID_alter () , việc sử dụng mã tương tự như sau là đủ.
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.
}
}
Nếu nút là mới, thì biểu mẫu đang tạo một nút; nếu nút không phải là mới, thì biểu mẫu đang chỉnh sửa một nút hiện có.
Trong Drupal 8, mọi lớp thực hiện EntityInterface
(bao gồm cả Node
lớp) đều thực hiện EntityInterface::isNew()
phương thức. Kiểm tra nếu một nút là mới trở nên dễ dàng như gọi $node->isNew()
. Vì trong Drupal 8 không $form_state['node']
còn nữa, mã trở thành như sau:
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.
}
}