Drupal 6/jQuery Ajax 更新字段

2023-12-08

我位于同一站点的不同路径上,并且我需要允许用户更改他/她在不同位置写入的节点上的字段内容。我有 nodeid 和字段名称,以及 ids 等 np.

我不认为这太难,但教程或解释会很棒。

Thanks.

编辑:谢谢 anschauung 的提问,所以澄清一下:

它是一个 CCK 文本区域。至于为什么,有一个中心节点类型,有许多链接节点参考节点。从任何引用中心节点的节点的编辑页面,都需要能够编辑和保存中心节点的字段。这就是我的用例。

再次感谢。

非常感谢 googletorp,我真的非常感谢你的帮助。

这是我到目前为止所拥有的:

对于第一步:

function update_main_field_menu() {

  $items = array();

  $items['update_main_field/%'] = array(
    'title' => 'Update Main Field',
    'page callback' => 'post_to_main_node',
    'page arguments' => 1,
    'type' => MENU_CALLBACK
  );

  return $items;
}

第二步:

function post_to_main_node(){
    // Sorry, I'm totally lost. What do I put here?
}

您还提到了这一点:

在 hook_form_alter 中, hook_nodeapi 或其他一些钩子 当节点形式为 生成的。你应该调查一下 这最适合您的情况。

如何生成节点表单?

第三步:

function modulename_form_mainct???_node_form_alter (&$form, &$form_state) {

    // I'm not sure about which form I'm doing node form alter on. If I do it to the mainct, wouldn't that alter the regular edit page the user is viewing? I only want to load the js for the ajax submission. Is there a update_main_field node form?


    drupal_add_js(drupal_get_path('module', 'modulename') ."/updateField.js");
}

另外,步骤 2 中的函数和步骤 3 中获取节点形式之间有什么关系?

Step 4:我想我大部分都明白了,尽管由于其他原因我还无法测试它。 :)

我真的很想学习如何在 drupal 中做到这一点,但是如果你能稍微提高你的语言的虚拟级别,那就太好了。 :D 再次非常感谢你。


再次编辑:

实际上,我昨天尝试添加访问参数,但由于某种原因它不起作用。 :( 但现在确实如此!是的,你有魔法。

现在,当我像这样触发帖子时:

Drupal.behaviors.ajax_update_field = function (context) {
    $("#button").click(function(){
        var url = $("#edit-field-reference-0-nid-nid").val().replace(/.*?\[nid:(\d+)?]/ig, "$1");
        url =  "/update_main_field/"+url;

            // The data is just some silly test thing
        $.post(url, {data: $("#edit-field-reference-0-nid-nid-wrapper label").text()}, function(value) {

            // Here you can write your js to handle a response to the user,
            // or if something went wrong an error message.
            // value = response data from drupal

            alert(value);

        });
    });
}

我看到一个带有正确数据的 url 帖子。这很好。但没有回应。警报为空。

还有一个新的空白……已经创建了一些东西。其中没有任何内容,但在过滤节点时我可以在视图中看到它。它没有标题、任何字段等。只有发布日期。

我想要更新的节点没有更新。

所以这让我认为第二步可能有点不正确。我对此有几个疑问。

function post_to_main_node(){

    // Is this sufficient to load the node? nid doesn't have to be set as an arg for the function?
    $node = node_load($_POST['nid']);

    // Is the field set like this? 'field_library' is the 'machine name' of the field. This is what's needed right?
    $node->field_library = $_POST['data'];
    node_save($node);
}

再次非常感谢您。


这可以很容易地完成,但需要执行几个步骤。

更新了代码以展示我将如何执行此操作。这段代码几乎可以复制到您的 drupal 项目中,但我还没有对其进行过实际测试,因此这里可能存在拼写错误或那里存在错误。

  1. 设置一个您可以发布到的网址钩子菜单()。您需要使用 CALLBACK 类型。您需要记住的是向菜单项添加某种访问控制。如果您不这样做,则任何人都无法访问它,甚至用户 1 也无法访问它,因为没有进行访问控制。在这种情况下,您应该使用访问参数,并输入用户需要拥有的权限的名称。您可以使用不同模块中已存在的模块,也可以使用以下命令创建自己的模块钩子烫发。您需要确保您的用户拥有正确的权限才能使用它。这通常是通过 Drupal AI 完成的。

    function modulename_menu() {
        $items = array();
        $items['update_main_field'] = array(
            'page callback' => 'call_back',
            'type' => MENU_CALLBACK,
            'access arguments' => array('name of perm'),
        );
        return $items;
    
  2. 创建您指定的回调函数,这是当有人访问该 url 时将运行的函数。
    简化版本如下所示。在保存节点之前,您需要验证数据并执行类似的操作。您可能还想进行权限检查。

    function call_back() {
        $result = array();
        // Here we check the date get the node, update the cck field and save it.
        $node = isset($_POST['nid']) ? node_load($_POST['nid']) : FALSE;
        // $node will be false if nid wasn't set or nid was invalid.
        if (!$node || !isset($_POST['text']); {
            $result['status'] = 'error';
            $result['message'] = t('error message');
        }
        // Check if the loaded node have the correct type so it will have the field we want.
        else if ($node->type != 'node_type') {
            $result['status'] = 'error';
            $result['message'] = t('error message');
        }
        else {
            $node->field = $_POST['text'];
            node_save($node);
            $result['status'] = 'success';
            $result['message'] = t('success message');
        }
        return drupal_json($result);            
    }
    
  3. 添加js文件,这可以通过以下方式完成drupal_add_js(),你可能想看看drupal_get_path()为您的 js 文件创建正确的路径。您可以通过多种不同的方式添加 js 文件。在 hook_form_alter、hook_nodeapi 或生成节点表单时调用的其他挂钩中。您应该调查哪一个最适合您的情况。如果你使用 hook_form_alter ,它看起来像这样:

    modulename_form_alter(&$form, &$form_state, $form_id){
        // Add js to the desired node form.
        if ($form_id == 'content_type_name_node_form') {
            drupal_add_js(drupal_get_path('module', 'modulename') . '/script.js');
        }
    }
    
  4. 使用 jQuery 执行 javascript 操作,如果您有一个按钮和一个文本字段,则可能看起来像这样:

    $("#button_id#").click(function(){
        var nid = $("#edit-field-reference-0-nid-nid").val().replace(/.*?\[nid:(\d+)?]/ig, "$1");
        var text = $("#edit-field-reference-0-nid-nid-wrapper label").text();
        $.post("/update_main_field", {"nid": nid, "text", text}, function(data) {
            // This is basically how jQuery converts response data to json
            var json = eval("(" + data + ")");
            if (json['status'] == "error") {
                // Handle error cases.
            }
            else if (json['status'] == "success") {
                 // Handle the success case.
            }
        });
    });
    
  5. 在你的回调函数中,你处理 $_POST 中的数据,你应该通过返回 json 数据来结束你的函数,你的 js 可以据此采取行动,让用户知道发生了什么。drupal_json可以用于此目的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Drupal 6/jQuery Ajax 更新字段 的相关文章

  • 水平平滑滚动 100px

    Heyjo problem 一周以来我一直在寻找 javascript 或 jQuery 代码 以便在我的网站上实现滚动按钮 我失败的那一刻是按钮应该多次工作的时候 他的任务不是滚动到专用元素 而是应该向左滚动 例如 100px 此外 滚动
  • 如何设置在浏览器的新选项卡(_blank)中打开的pdf文件的标题

    这是我的尝试 是否在新选项卡上打开 但它总是显示test pdf如题 function titlepath path name alert path alert name document title name window open pa
  • 将 jQuery 版本从 1.7.1 升级到 1.11.2

    在我当前的应用程序中 我使用的是 jQuery 版本 1 7 1 现在 我计划将jQuery版本升级到1 11 2 是否有任何补丁可以提供与现有应用程序的向后可比性 Thanks 尝试这个 http blog jquery com 2013
  • 更改javascript nodejs中所有页面的href url

    我已经实现了具有多种语言下拉菜单的引导导航栏 当我选择语言时 它将翻译页面 如何更改其他页面的 url 和按钮文本 当我选择french 将所有网址更改为 fr about and fr contact 如何使用 JavaScript 进行
  • WooCommerce 使用 AJAX 设置购物车数量?

    我已经为此绞尽脑汁好几天了 需要一些指导 我正在为 WooCommerce 网站完全从头开始制作自定义主题 现在我正在尝试让购物车功能正常工作 我一直试图使用按钮 来更新购物车中产品的数量 对我来说问题似乎是WC 我在functions p
  • 禁用 Bootstrap 中的选项卡

    我正在尝试禁用引导程序中的选项卡 我一直在研究 但尚未找到解决方案 我已经尝试过这个 可以禁用 Bootstrap 中的选项卡吗 https stackoverflow com questions 9237314 can you disab
  • 单击回车键上的锚标记链接

    我有一个像这样的锚标签 a class btn btn danger href Continue a 它位于弹出窗口内 我需要按 Enter 键单击此链接 我尝试过以下代码 但它对我不起作用 document ready function
  • 如何找到div的第一个直接子元素

    这应该很容易 但我做不到 我有一个 id 为 LeftScrollableDiv 的 div 元素 我试图找到它下面的第一个子元素 LeftScrollableDiv first child div table table div 但结果为
  • 创建动态多维对象/数组

    我正在尝试使用 JS 创建一个多维数组 以便我可以通过 Ajax 调用 PHP 来发布一些数据 这可能很简单 但我对 JS 的了解很少关于这个具体的事情 这是带有代码的 JSFiddle http jsfiddle net k5Q3p 我想
  • `attr('checked', false)` 不适用于 IE6

    正如标题所说 我无法获取 attr checked false 在 IE6 上工作 我正在克隆一些 HTML 然后在将新克隆的 HTML 分配给元素之前 我会运行它并取消选中新克隆部分中的所有复选框 这在除 IE 6 之外的所有浏览器中都可
  • 在 iframe 中打开的网页上调用我的 jquery 函数

    我想单击一个按钮 该按钮位于基于父页面中的类选择器的 iframe 中打开的网页上 我试过这个 each classname function i el setTimeout function el trigger click 30000
  • jqGrid - 使所有列不可排序?

    除了添加之外 有没有办法使网格上的所有列都不可排序sortable false到每一列 我知道您可以在网格级别设置全局选项 但不知道是否可以在 colModel 级别执行此操作 您可以使用 colmodel 模板来实现此目的 cmTempl
  • defaultDate 选项与 setDate 方法之间的差异

    我正在尝试使用jQueryUI DatePicker 我必须了解的主要事情之一是在页面加载时设置日期的方式 经过一些研究后 我发现有两种不同的方法可以做到这一点 using defaultDate option using setDate
  • 返回重定向作为对 Ajax(fetch、XHR 等)请求的响应

    如果浏览器收到对 ajax 请求的重定向响应 会发生什么 如果浏览器收到对 ajax 请求的重定向响应 会发生什么 如果服务器发送重定向 又名 302 响应加上 Location 标头 浏览器将自动遵循重定向 对此的回应second请求 假
  • 在特定页面上执行 javascript 的正确“Rails”方式

    我试图在特定页面上运行 javascript 而我唯一的解决方案似乎是反模式 我有controller js内部生成的assets javascripts 我在用着gem jquery turbolinks 我的代码类似于以下内容 docu
  • 点击加载谷歌地图

    我想在单击链接后显示 Google 地图 我已经尝试过以下方法 当点击链接时 然后 Insert div与 id 链接后map 使用 jQuery 方法 getScript 加载 Google Maps API 添加谷歌地图到div带身份证
  • Instagram 粉丝计数 - 使用 jQuery / json 和 PHP

    经过几个小时的工作和一些帮助萨希尔 米塔尔我们已经成功使用 jQuery json 和 PHP 检索 Instagram 关注者计数 这是我们设法整理的内容 希望对其他想要获取 Instagram 信息的人有所帮助 我们的 jQuery I
  • 从 HTTP 登录到 HTTPS

    我的网站默认使用 HTTP 我确实有一个启用 HTTPS 的证书 但只有其上的某些区域强制建立安全连接 登录是通过 Ajax 处理的 我想开始使用 SSL 即使请求来自 HTTP 我尝试强制请求的地址具有 HTTPS 并且它完美地回复 然而
  • 按下回车键时不刷新页面

    我遇到了一些问题 只要表单中有输入 回车键就会触发页面刷新 下面的代码 如果按下回车并且文本区域 input 中没有输入任何文本 则不会刷新页面 但是如果按下回车并且 input中有输入或者光标位于文本区域 我不确定是什么触发了它 因为 s
  • 编辑第一个选项名称

    我有以下我无法访问的代码 我想要做的是将一些文本添加到现在为空的第一个选项中 诸如 选择地址 之类的文本

随机推荐

  • DOM 方法的短变量

    是否可以不为诸如document createElement document createTextNode element setSelectionRange etc var c document createElement var di
  • 更改 gridview 单元格中特殊单词的前景色

    我想改变一些颜色特殊词并非网格视图单元格中的所有单词 这是代码 protected void gvContents RowDataBound object sender GridViewRowEventArgs e if e Row Row
  • ImageMagick 单转换命令性能

    我有几千张图像需要处理 所以每一毫秒都很重要 每个图像的大小约为 2 3Mb 馈送到转换器的源文件 图片 jpg 从源生成的文件 orig image jpg original image 1024x768 image jpg large
  • EclEmma、Java8 和 Lambda - 不涉及 lambda 表达式

    我在 Eclipse Luna 下有一个 Java 项目 使用 EclEmma 2 3 1 201405111647 最新 它使用 Jacoco 0 7 1 它支持 Java 8 如其变更日志 2 3 1版本 2014 05 11 Fixe
  • sql每月选择前5名

    我有一个格式为 mysql 的表 我们称其为product revenue Product id 年 月 收入 我需要获取以下列 年 月 revenue top 5 monthly 其中 Revenue top 5 monthly 是当月收
  • 将excel数据导入mysql数据库[重复]

    这个问题在这里已经有答案了 我有一个 excel 文件 其中有大约 5000 行要插入到我的 mysql 数据库表之一中 任何人都可以提供快速而肮脏的解决方案吗 谢谢 又快又脏 将计算列放入 Excel 中以生成 插入 语句 然后将所有句子
  • 按列中的字符串模式拆分 data.frame

    如同按值拆分 data frame我想按值拆分 df 就我而言 该值并不总是完全相同 我尝试了这个但没有成功 df lt data frame var1 c ab 1 2 3 ac 1 2 3 4 5 6 ad 1 2 var2 1 14
  • 从 sql ExecuteScalar() 检索值

    我有以下内容 String sql SELECT FROM Temp WHERE Temp collection Program collection SqlConnection conn new SqlConnection connStr
  • Angular.js 通过单击元素以外的任意位置关闭

    这是很常见的事情 就像你在 stackoverflow 上点击收件箱一样 我将调用该对话框或任何打开的内容thing 现在我知道有两种方法可以解决这个问题 您创建了一个不可见的覆盖层 其中只有您打开的元素 有更大的 zindex 然后你关闭
  • 如何在 QCombobox 中添加分隔符样式表

    我在带有分隔符的 qcombobox 中添加了两个项目 addItem New addItem Delete insertSeparator 2 为了突出显示具有不同样式的项目的选择 我使用 QLIstView 作为 QComboBox 视
  • 异步调用webservice并等待所有线程完成

    我需要多次调用 Web 服务来获取数据 然后将这些数据放入数据库中 因此我得到了以下代码 foreach string v in options IList
  • Mockito 如何模拟并断言抛出的异常?

    我在 junit 测试中使用mockito 如何让异常发生并断言它已经发生 通用伪代码 首先回答你的第二个问题 如果您使用的是 JUnit 4 您可以使用以下方式注释您的测试 Test expected MyException class
  • 如何在 Visual Studio 中使用 mongodb-cxx-driver 设置项目

    我已经使用 Visual Studio 在 Windows 上成功构建了新的 libmongo cxx driver 但我无法理解如何在 VS 2015 中设置项目来链接到它 我希望能得到一些帮助 Vcpkg 可帮助您在 Windows 上
  • 如何处理用户提供的公式?

    我有一个字典 其中包含一组可通过 Web 应用程序使用的键值 我想处理用户提供的公式 例如 值1 值3 值4 100 获得公式计算的匹配值与字典中的值的最简单方法是什么 考虑这个例子 usr bin python values value1
  • jquery ajax 与 async false 挂起 Firefox

    我有一个像这样调用 ajax 的代码 ajax type POST url sandbox graphloader mock3 async false data calInput1 dates 0 calInput2 dates 1 suc
  • 需要从浏览器调用客户端DLL

    我收到客户的要求 当任何用户刷卡时 他们的详细信息应该自动在客户端的网页中捕获 然而 我们在 IE 中也做了同样的事情 即在 C 中创建 ActiveX 控件 卡服务提供商在客户端安装他们的 DLL 并且从 ActiveX 控件中 我们可以
  • 预期:没有这样的变量[关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我开始使用expect 我有一个简单的脚本 但我有一个问题 我想初始化一个第一个字符为 的变量 set mystring THIS IS MY STRING 所以我得到一个错误 因为exp
  • Heroku 上的“ModuleNotFoundError:没有名为“flask”的模块”

    我看到我收到 ModuleNotFoundError 没有名为 flask 的模块 这导致我的应用程序无法在 Heroku 上加载 我已经在虚拟环境和我的系统上安装了 Flask 但问题仍然存在 当我检查要求时 它说满意 这是我的日志 20
  • 在多个相同 ID 上使用 addEventListener

    我需要向我的转发 喜欢和不喜欢按钮添加一个事件侦听器 它们都具有相同的 ID 因此现在只有顶部推文的计数器增加 这是一个学校项目 所以我只能使用原始JS 这是小提琴的链接 https jsfiddle net 1sc7g5ko 这是我的 J
  • Drupal 6/jQuery Ajax 更新字段

    我位于同一站点的不同路径上 并且我需要允许用户更改他 她在不同位置写入的节点上的字段内容 我有 nodeid 和字段名称 以及 ids 等 np 我不认为这太难 但教程或解释会很棒 Thanks 编辑 谢谢 anschauung 的提问 所