Главная Wp-Recall WP-Recall: Пишем свое дополнение и кастомизация Онлайн оповещение о новых сообщениях в чате
5 ответ(ов) в теме
sergey.shel
не в сети 2 недели
На сайте с 11.01.2018
Участник
Тем 7
Сообщения 22
1
07:20

Версия WP-Recall: 16.8.0

Пытаюсь реализовать ajax обновление о новом сообщении в чате, на иконках в нижнем уголке странице и в списке клиентов [userlist inpage="30" orderby="time_action" template="rows"  usergroup="wp_capabilities:author" data="description, profile_fields" filters="0" order="DESC"]

bg_init_tim();
function bg_init_tim(){

jQuery(document).ready(function($) {
var data = {
action: 'my_action'
};

jQuery.post( myajax.url, data, function(response) {
if(data['user_id']['status'] == 0){
$.each(data/* ['user_id'] */,function(index,value){
$('#id'+value/* ['id'] */).append('');
}
});
});

setTimeout(function(){ bg_init_tim() }, 1000);
}

В бэкенде

add_action('wp_ajax_my_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
function my_action_callback() {

add_action('wp_footer','rcl_get_last_chats_box',10);
//как то получить массив и закодировать в JSON
wp_die();
}

Редакции сообщения
01.09.2018 07:29sergey.shelПричина: не указано
0
Otshelnik-Fm
не в сети 10 минут
На сайте с 27.01.2013
Модератор
Тем 26
Сообщения 11747
2
08:35

Для вставки кода стоило воспользоваться кнопкой многострочный код. Как сейчас - его читать невозможно

Внутри функции зачем wp_footer?
Почитайте о том как строятся ajax запросы в вордпресс. Тут я вижу много пробелов

p.s. ajax запрос каждую секунду на всех страницах сайта ради получения нового сообщения - вордпресс не обладает таким запасом прочности. Именно поэтому в самом плагине этот функционал отсутствует. А проверяется новое сообщение только если ты на странице чата. И то сделана настройка в опциях допа чата позволяющая еще уменьшить время опроса. Так вероятность повалить сервер снижается. Подумайте - надо оно вам. 5 человек на сайте легко могут вам 500-е ошибки добавить.

0
sergey.shel
не в сети 2 недели
На сайте с 11.01.2018
Участник
Тем 7
Сообщения 22
3
08:50

Да - опыта пока маловато.
На сайте - админу надо работать со списком сообщений. Обновлять не обязательно секунду - можно 10 секунд. Подскажите - как вывести данные в бэкенд.

0
Otshelnik-Fm
не в сети 10 минут
На сайте с 27.01.2013
Модератор
Тем 26
Сообщения 11747
4
09:12

Подглядеть можете в дополнении чата

Например тут /wp-recall/add-on/rcl-chat/actions_cron.php функция rcl_chat_send_notify_messages получает по крону раз в час непрочитанные сообщения и отправляет их на почту - вот вам готовый запрос к базе данных на выборку непрочитанных сообщений. Надо только текущего пользователя сообщения оставить. Все непрочитанные вам не нужны.

или в /wp-recall/add-on/rcl-chat/core.php функция rcl_chat_noread_messages_amount получает кол-во непрочитанных сообщений.

Начните с простого:
Потренируйтесь просто выполнять ajax запрос вернув просто текст периодично. Это апи вордпресс.
Как только у вас это выйдет - останется дело за выборкой из базы данных - но по примерам что я вам тут дал это будет сделать не сложно. Опять же связи тут с дополнением чата только название таблицы. Все равно придется делать через апи вордпресс - через $wpdb
т.е. разницы нет из какого плагина вы из БД данные вытаскиваете - реализация все равно будет используя доступное апи ВП

1
sergey.shel
не в сети 2 недели
На сайте с 11.01.2018
Участник
Тем 7
Сообщения 22
5
14:11

Вот так сделал - работает.

bg_init_tim();
function bg_init_tim(){	

	jQuery(document).ready(function($) {
		var data = {
			action: 'my_action',
		};

		 jQuery.ajax({
          url: myajax.url,
          data:{
               'action':'my_action'
               },
          dataType: 'JSON',
          success:function(response){
            if(response) {
				
				$(".fa-commenting").remove();
				$.each(response,function(index,value){
					$('#id'+value).append('<i class="fa fa-commenting" aria-hidden="true"></i>');
					$('#'+value).append('<i class="fa fa-commenting" aria-hidden="true"></i>');
				});
			} 
        }
     });
	});
	
	setTimeout(function(){ bg_init_tim() }, 2000); 
}



add_action( 'wp_enqueue_scripts', 'myajax_data', 99 );
function myajax_data(){

	wp_localize_script('twentyseventeen-global', 'myajax', 
		array(
			'url' => admin_url('admin-ajax.php')
		)
	);  

}

add_action('wp_ajax_my_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
function my_action_callback() {
global $wpdb;

    $mess = $wpdb->get_results("SELECT * FROM ".RCL_PREF."chat_messages WHERE message_status='0' && private_key!='0' && message_time  > date_sub('".current_time('mysql')."', interval 1 hour)");
    
    if(!$mess) return false;
	
	$messages = array();
    foreach($mess as $m){
        $messages[] = $m->user_id;
    }
	
	$mes=json_encode($messages);
	echo $mes;
	
	wp_die();
}

 

Только id надо еще подписать \wp-recall\add-on\rcl-chat\index.php в 411 строке

Редакции сообщения
03.09.2018 14:14sergey.shelПричина: не указано
0
Вы не имеете права на публикацию сообщений в этой теме