drupal加载节点在编辑模式下通过链接包括属性来更改发布选项发布? drupal_goto

时间:2018-03-23 11:22:30

标签: drupal drupal-7

是否可以在编辑模式下加载节点并将发布选项设置为已发布?

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>

1 个答案:

答案 0 :(得分:1)

您可以使用hook_form_alter()更改表单:

5

因此,将检查发布选项。

您可以使用hook_node_presave()更改节点属性(提交时):

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
    // if ($form_id == 'TYPE_node_form') {
        $form['options']['status']['#default_value'] = 1;
    // }
}

即使未选中发布选项,也会导致将节点设置为已发布。

编辑:阅读评论后,我建议您使用其他行为。您可以将function MYMODULE_node_presave($node) { $node->status = NODE_PUBLISHED; } 附加到?from-email,然后在drupal_goto()中添加自定义提交,然后在hook_form_alter()中比较原始节点和发布的值如果检测到更改,则强制hook_node_presave()

  1. 当您来自电子邮件时,请将status更改为:

    drupal_goto()
  2. drupal_goto("node/$node->nid/edit", ['query' => ['from-email' => 1]]); 中,检查网址是否包含hook_form_alter(),添加自定义处理程序:

    from-email
  3. 自定义处理程序:

    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') ;
        }
    }