【问题标题】:How to use ajax to save re-ordered node in Drupal 7?如何使用 ajax 在 Drupal 7 中保存重新排序的节点?
【发布时间】:2015-12-29 08:46:43
【问题描述】:

我使用 Jquery .sortable() 函数让站点管理员在 Drupal 7 站点的起始页上重新排序一些列表元素。然后我希望管理员能够保存节点以保持这个新的排序顺序。为了做到这一点,我在客户端添加了一个带有 js 的保存按钮。当点击时我有这个到目前为止:

            $('a.save').on('click', function () {
                // get the current nid
                var nid = Drupal.settings.mymodule.currentNid;
                var data = [];
            // copy the re-ordered html list
            data['body'] = $('.field-name-body').clone()    
                $.ajax({
                    // after reading the ajax api documentation I am more than confused about the url to use
                    url: '??',
                    type: 'post',
                    dataType: "html",
                    data: {
                        nid: nid,
                    body: data['body'].html()
                },
                success: function(data) {
                    if (data == false) {
                        alert('Not saved, access denied.');
                    } else {
                        alert('Changes saved');
                    }
                }
            });

所以在正常情况下,我会编写一个 php 脚本,将数据保存在具有指定节点 ID 的节点中。并且 url 应该指向那个脚本......但是我被困在 Drupal 7 文档中关于如何做到这一点......我能找到的所有示例都描述了如何将 html 从服务器端拉到客户端,但我想要从客户端复制html并将其保存在服务器端的指定节点中。我应该编写一个函数来接收自定义模块中的 ajax 请求吗?谁能指出我正确的方向?

【问题讨论】:

    标签: javascript ajax callback drupal-7


    【解决方案1】:

    部分解决: 我终于找到了关于 url 的解决方案,它变成了这样:

    url: Drupal.settings.mymodule.ajaxUrl + "/" + nid,
    

    我现在已经编写了一个自定义模块,我可以使用此代码成功地将内容保存在某个节点字段中:

     function save_node_init() {
       drupal_add_js(array('save_node' => array('ajaxUrl' => url('save_node/ajax'))), 'setting');
       drupal_add_js(drupal_get_path('module', 'save_node') . '/save_node.js');
    }
    
    
    function save_nod_menu() {
       $items['save_node/ajax/%'] = array(
        'page callback' => 'save_node_ajax_callback',
        'access callback' => 'user_access',
        'access arguments' => array('administer users'),
       );
    
       return $items;
    }
    
    
    function save_node_ajax_callback() {
    
        $html = isset($_POST['body']) ? $_POST['body'] : null;
        $nid = isset($_POST['nid']) ? $_POST['nid'] : null;
        $node = node_load($nid);
    
        $node->body['und'][0]['value'] = $html;
        node_save($node);
    
        //ajax_deliver($html);
        drupal_exit();
    
    }
    

    如您所见,我将 html 放在节点的主体中,然后保存它。我的最后一个问题是现在我不想替换正文字段中的全部内容。只是 ul 及其列表元素。任何建议将不胜感激!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多