我试图在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之类的东西),那就没关系。
有没有人有个好主意?
由于
答案 0 :(得分:0)
我不知道它是否有用,但这是我的理由:
我修改了聊天室模块(使用drupal nodejs集成模块),以便添加图片上传。
我的提交表格与您的完全相同,结果就像您在此描述的那样:在刷新之前没有为所有者提供图像,但为其他人显示。
在服务器上,文本消息和图像消息之间唯一的区别是clienSocketId。 - 图像的客户端ID(不工作) - 空文本(工作)
所以我修改了nodejs集成模块,强制clienSocketId为空。
我仍然不知道原始聊天模块的文本消息是如何已经是空的clienSocketId,以及回调行为是否按设计运行但它解决了我的问题。