【问题标题】:Creating a Drupal node with javascript使用 javascript 创建 Drupal 节点
【发布时间】:2023-03-24 17:40:01
【问题描述】:

我正在寻找使用 javascript 从同一个站点创建一个 drupal 节点,我想知道我应该往哪个方向发展。

我知道你可以使用 services/json 来做到这一点,但肯定有更简单的方法吗?

谢谢

【问题讨论】:

    标签: jquery drupal


    【解决方案1】:

    除了 AJAX 回调之外,您可能还需要在 Drupal 中有一个 menu callback,它将接受 AJAX 请求并将其转换为节点对象并使用 node_save 保存。

    在最简单的形式中,它看起来像这样(注意这里没有访问检查,所以任何人都可以使用这个回调创建一个节点):

    <?php
    /**
     * Implementation of hook_menu().
     */
    function demo_menu() {
      $items = array();
      $items['demo/js'] = array(
        'title' => 'Demo page',
        'page callback' => 'demo_js_page',
        'access callback' => TRUE,
        'type' => MENU_CALLBACK,
      );
      return $items;
    }
    
    /**
     * Page callback that saves a node.
     */
    function demo_js_page() {
      if (isset($_REQUEST['title'])) {
        $node = new stdClass;
        $node->type = 'blog';
        $node->title = check_plain($_REQUEST['title']);
        node_save($node);
        drupal_set_message(t('Created node %title', array('%title' => $_REQUEST['title'])));
      }
      return t('Thanks for visiting');
    }
    

    显示的代码将被插入到您 Drupal 站点上 sites/all/modules/demo 等文件夹中的 demo.module 文件中。您还需要一个如下所示的 demo.info 文件:

    name = Demo module
    description = Demo code.
    core = 6.x
    

    【讨论】:

    • 请注意,大量编写得不好的节点模块仅使用该代码是无法工作的。此外,即使这样可行,您可能希望在 node_save 之前使用 node_prepare 预处理节点,以应用内容过滤器,而您提供的代码没有这样做。
    • 是的,仅向新节点添加标题可能不是最常见的用例。我的代码示例可能更好地描述为最低限度:)
    • 我知道这已经很老了,但是在页面回调中使用 drupal_execute 类似于:drupal.org/node/293663 将允许您拥有任何自定义功能以及适当的验证。当您有 CCK 字段时,它是理想的选择。
    【解决方案2】:

    我首先要看的地方是这里:

    http://docs.jquery.com/Ajax

    然后先执行 load() 函数

    http://docs.jquery.com/Ajax/load#urldatacallback

    看看这是否足以满足您的需求。

    从您可能需要的最简单的 Ajax 调用开始,很容易陷入更通用的 $.ajax() 的复杂性中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多