用于上传图像的Drupal ajax表单不能更新nodejs套接字内容

时间:2014-04-14 10:24:18

标签: ajax node.js drupal drupal-7

我试图在drupal7网站上聊天。

我选择了nodejs_chat

该模块只允许我们向每个人输入一些短信,但对我们来说还不够。

我们还需要上传图片。

所以我在页面的聊天下制作一个ajax表格,可以上传图片。

表单代码:

function _test_form($form, &$form_state) {
  $form['image_fid'] = array(
    '#title' => t('Image'),
    '#type' => 'managed_file',
    '#default_value' => '',
    '#upload_location' => 'public://image_example_images/',
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Submit'),
    '#submit' => array('_test_form_submit'),
    '#validate' => array(),
    '#ajax' => array(
      'callback' => '_test_ajax_ab_callback',
      'progress' => array(
        'type' => 'throbber',
        'message' => '',
      ), 
    ),
  );
  return $form;
}

并提交处理代码:

function _test_form_submit($form, &$form_state) {
  if ($form_state['values']['image_fid'] != 0) {
    // The new file's status is set to 0 or temporary and in order to ensure
    // that the file is not removed after 6 hours we need to change it's status
    // to 1. Save the ID of the uploaded image for later use.
    $file = file_load($form_state['values']['image_fid']);
    $file->status = FILE_STATUS_PERMANENT;
    file_save($file);

    // When a module is managing a file, it must manage the usage count.
    // Here we increment the usage count with file_usage_add().
    file_usage_add($file, 'test', 'test_image', 1);

    // Save the fid of the file so that the module can reference it later.

    global $user;
    $img = theme('image_style', array('path' => $file->uri, 'style_name' => 'medium'));

    $message = (object) array(
      'channel' => 'Chat__testing_test_1',
      'callback' => 'nodejsChatMessageHandler',
      'data' => array(
        'uid' => $user->uid,
        'name' => $user->name,
        'msg' => 'upload image',
        'img' => $img,
      ),
    );
    nodejs_send_content_channel_message($message);
  }
}

在表单提交处理程序中,我只做了两件事:

1)保存文件并对其进行主题化。

2)使用nodejs API nodejs_send_content_channel_message将内容插入nodejs套接字。

但是现在,这是一个很大的问题。

如果A,B,C人在同一个聊天室。

当A上传图片时,B和C都可以看到图片,但A不能。

我发现所有drupal ajax都有问题,而不是更新用户(启动ajax)的nodejs套接字内容。

如果我使用自定义ajax(自己编写$ .ajax之类的东西),那就没关系。

有没有人有个好主意?

由于

1 个答案:

答案 0 :(得分:0)

我不知道它是否有用,但这是我的理由:

我修改了聊天室模块(使用drupal nodejs集成模块),以便添加图片上传。

我的提交表格与您的完全相同,结果就像您在此描述的那样:在刷新之前没有为所有者提供图像,但为其他人显示。

在服务器上,文本消息和图像消息之间唯一的区别是clienSocketId。   - 图像的客户端ID(不工作)   - 空文本(工作)

所以我修改了nodejs集成模块,强制clienSocketId为空。

我仍然不知道原始聊天模块的文本消息是如何已经是空的clienSocketId,以及回调行为是否按设计运行但它解决了我的问题。