通过 link 编辑模式下的 drupal 加载节点,包括将发布选项更改为已发布的属性? drupal_goto
drupal load node in edit mode via link including attribute to change publishing option to published? drupal_goto
是否可以在编辑模式下加载节点并将发布选项设置为已发布?
drupal_goto("node/$node->nid/edit");
因此用户不必手动设置选项,只有在用户单击保存后才会保存为已发布(节点设置为未发布)。
我想替换程序化方法,因为它在编辑模式之前也会保存它
$node->status = NODE_PUBLISHED;
node_save($node);
仅供参考“发布选项”字段
<div class="form-item form-type-checkbox form-item-status">
<input type="checkbox" id="edit-status" name="status" value="1" class="form-checkbox">
<label class="option" for="edit-status">Published </label>
您可以使用hook_form_alter()
来改变形式:
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
// if ($form_id == 'TYPE_node_form') {
$form['options']['status']['#default_value'] = 1;
// }
}
因此,将检查发布选项。
或:
您可以使用hook_node_presave()
更改节点属性(提交时):
function MYMODULE_node_presave($node) {
$node->status = NODE_PUBLISHED;
}
即使未选中发布选项,这也会导致将节点设置为已发布。
编辑: 看完评论后,我建议你使用另一种行为。您可以将 ?from-email
附加到 drupal_goto()
,然后在 hook_form_alter()
中添加自定义提交,然后在 hook_node_presave()
中比较原始节点和发布的节点的值值,并在检测到更改时强制 status
:
当您来自电子邮件时,将您的 drupal_goto()
更改为:
drupal_goto("node/$node->nid/edit", ['query' => ['from-email' => 1]]);
在您的 hook_form_alter()
中,检查 URL 是否包含 from-email
,添加自定义处理程序:
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
if (isset($_GET['from-email'])) {
// add at the first place to the list of handlers:
array_unshift($form['actions']['submit']['#submit'], 'MODULE_my_custom_submit_handler') ;
}
}
自定义处理程序:
function MYMODULE_my_custom_submit_handler($form, &$form_state) {
$nid = $form_state['values']['nid'];
$node = node_load($nid);
// to debug:
// var_dump($form_state['values'], $node);die;
// check diff
$to_publish = false ;
if ($node->title != $form_state['values']['title']) $to_publish = true;
if ($node->body['und'][0]['value'] != $form_state['values']['body']['und'][0]['value']) $to_publish = true ;
// and so on...
if ($to_publish) {
// force the status to 1.
$form_state['values']['status'] = 1;
}
}
是否可以在编辑模式下加载节点并将发布选项设置为已发布?
drupal_goto("node/$node->nid/edit");
因此用户不必手动设置选项,只有在用户单击保存后才会保存为已发布(节点设置为未发布)。
我想替换程序化方法,因为它在编辑模式之前也会保存它
$node->status = NODE_PUBLISHED;
node_save($node);
仅供参考“发布选项”字段
<div class="form-item form-type-checkbox form-item-status">
<input type="checkbox" id="edit-status" name="status" value="1" class="form-checkbox">
<label class="option" for="edit-status">Published </label>
您可以使用hook_form_alter()
来改变形式:
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
// if ($form_id == 'TYPE_node_form') {
$form['options']['status']['#default_value'] = 1;
// }
}
因此,将检查发布选项。
或:
您可以使用hook_node_presave()
更改节点属性(提交时):
function MYMODULE_node_presave($node) {
$node->status = NODE_PUBLISHED;
}
即使未选中发布选项,这也会导致将节点设置为已发布。
编辑: 看完评论后,我建议你使用另一种行为。您可以将 ?from-email
附加到 drupal_goto()
,然后在 hook_form_alter()
中添加自定义提交,然后在 hook_node_presave()
中比较原始节点和发布的节点的值值,并在检测到更改时强制 status
:
当您来自电子邮件时,将您的
drupal_goto()
更改为:drupal_goto("node/$node->nid/edit", ['query' => ['from-email' => 1]]);
在您的
hook_form_alter()
中,检查 URL 是否包含from-email
,添加自定义处理程序:function MYMODULE_form_alter(&$form, &$form_state, $form_id) { if (isset($_GET['from-email'])) { // add at the first place to the list of handlers: array_unshift($form['actions']['submit']['#submit'], 'MODULE_my_custom_submit_handler') ; } }
自定义处理程序:
function MYMODULE_my_custom_submit_handler($form, &$form_state) { $nid = $form_state['values']['nid']; $node = node_load($nid); // to debug: // var_dump($form_state['values'], $node);die; // check diff $to_publish = false ; if ($node->title != $form_state['values']['title']) $to_publish = true; if ($node->body['und'][0]['value'] != $form_state['values']['body']['und'][0]['value']) $to_publish = true ; // and so on... if ($to_publish) { // force the status to 1. $form_state['values']['status'] = 1; } }