답변:
당신의 코드를 보면 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.
}
}
!empty($node->is_new)
로 설정된 경우 isset($node->is_new)
반환 값 으로 사용 하는 것이 좋습니다 . TRUE
FALSE
FALSE
. 실제로 설정 FALSE
을 해제하는 대신 불량 모듈을 설정 한 경우 코드를 적절하게 변경하는 것이 좋습니다.
Drupal 8 에서는 form_id
변수 가 필요하며 각 경우마다 달라지며 _edit_
노드를 편집하는 경우 변수가 포함됩니다
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
}
}
->isNew()
, 참조 drupal.stackexchange.com/a/223234/15055