Перейти к контенту

[2.3.x](SnS) AJAX Быстрый ответ


Рекомендуемые сообщения

Проверил правильность инструкций для 2.2 и 2.3. Они рабочие.

Чуть улучшил, см. начало пункта 5 и фрагменты с $this->ipsclass->class_ajax->print_nocache_headers(); из пункта 7.

 

Перезалил во избежание непониманий.

Ссылка на комментарий
Поделиться на других сайтах

  • Ответы 771
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

Загружено фотографий

Sannis:

Так что либо неверная установка

ну не может этого быть, я уже столько раз перепроверил. пробывал с исходными файлами дистрибутива..

 

либо пересеклась с другими модами(нужно разбираться на месте)

 

Ну навскидку сейчас припомню, что установлено:

ваш мод аякс опросов

вставка ника и цитаты в сообщение

аркада

модуль жизни форума (d12)

универсальный установщик модулей

mjournal

снег

hide mod

"плавающая" форма ответа

 

 

попробую еще раз завтра. залью какой-нибудь скин другой и файлы из дистрибутива буду гонять...

 

 

 

 

в старой инструкции небыло этого:

<!--SnS.Ajax.Fast.Reply-->

<div id='sns-afr-posts'></div>

<!--/SnS.Ajax.Fast.Reply-->

 

было:

<!--SnS.Ajax.Fast.Reply-->

<div id='sns-afr-posts'></div>

это критично?

 

еще одно. в старой инструкции (это та, которая я позавчера качал), небыло этого:

Найти:

 

//-----------------------------------------

// Load ajax class

//-----------------------------------------

 

require_once( KERNEL_PATH . 'class_ajax.php' );

 

$this->class_ajax = new class_ajax();

$this->class_ajax->ipsclass =& $this->ipsclass;

$this->class_ajax->class_init();

 

Добавить после:

 

// (SnS) AJAX Fast Reply

$this->ipsclass->class_ajax =& $this->class_ajax;

// (SnS) AJAX Fast Reply [E]

Ссылка на комментарий
Поделиться на других сайтах

<!-- -->

— это комментарии, они не критичны.

Ссылка на комментарий
Поделиться на других сайтах

Sannis: Важная поправка. Попробывал добавить сообщение через 6ого ослика - оно добавилось как надо!

я просто по дефолту использую огнелиса (2.0.0.11) и именно в нем эта проблема O_o

Видимо код в джаве не дружелюбен к огнелису...

Ссылка на комментарий
Поделиться на других сайтах

Остальные ajax функции форума работают как надо? Тогда откладывается пока я с Огнелисом не познакомлюсь. Но если его поддержка не заложена ребятами из IPS, то не стоит на это надеяться.
Ссылка на комментарий
Поделиться на других сайтах

Ошибка: uncaught exception: Permission denied to call method Location.toString

 

вроде такая

 

ps: ctrl+f5 не помогает - сообщение остается в форме - не добавляется на форум.

Ссылка на комментарий
Поделиться на других сайтах

XP, Firefox/2.0.0.11, IP.B 2.2.2 работает как надо. Какая у вас операционка/версия браузера.

 

P.S. Строку с ошибкой привести тоже лень я так понимаю. Видимо вам не нужно рещение этой проблемы, если вы так к ней относитесь.

Ссылка на комментарий
Поделиться на других сайтах

Интересно как у него это получилось так. Хотя там, блин форум на 2 сетки как мне помнится, нда...
Ссылка на комментарий
Поделиться на других сайтах

2Arhar:

 

$INFO['board_url'] = 'http://forum.evanescence.ru';

 

Думаете?

 

 

2Sannis:

XP, Firefox 2.0.0.11, IPB 2.2.2

 

В консоли ошибок нет ссылки на строку с ошибкой - просто поле с ошибкой указано:

Ошибка: uncaught exception: Permission denied to call method Location.toString

 

 

 

 

форум на 2 сетки как мне помнится, нда...

Это как? O_o

Ссылка на комментарий
Поделиться на других сайтах

Поставьте Firebug. На 2 сетки не у вас, у другого.

 

Зашёл на форум... Могу помочь только при наличии доступа к файлам, посмотреть что выдаёт ошибку. Ибо она в php.

Ссылка на комментарий
Поделиться на других сайтах

Непонимаю, как может быть ошибка в пхп, если в осле и опере (в опере я тоже проверил) - всё работает как надо!

Вообщем спасибо за попытку помочь, дальше попробую сам.

Ссылка на комментарий
Поделиться на других сайтах

думаю

у меня просто пермишн денайд в практике встречался только в таком случае

 

правда на uncaught exception: Permission denied to call method XMLHttpRequest.open

 

а тут Location.toString

firefox конечно зло, но у меня 2.1.х работает

Ссылка на комментарий
Поделиться на других сайтах

Arhar: Да тут дело не в самом форуме или в исходниках, а чисто в джаве. мод ведь пашет на других браузерах...

 

Ведь только джава в разных браузерах - по разному работает. Почти все любительские моды страдают от того, что были заточены под ослика, и только потом уже смотрят работоспособность в других браузерах.

Ссылка на комментарий
Поделиться на других сайтах

Тем не менее. На всякий случай напишите ваше текущее состояние функции fast_reply_post() в xmlout.php.

 

Так. А если пост набрать по-английски? :D

 

Архар, представь себе, но на поём ФФ там другая ошибка, и она в том что php возвращает error. Так что не факт что ошибка в доступе ;)

Ссылка на комментарий
Поделиться на других сайтах

			//-----------------------------------------
// (SnS) AJAX Fast Reply
//-----------------------------------------

function fast_reply_post()
{
	//-----------------------------------------
	// Convert unicode
	//-----------------------------------------

	$_POST['Post'] = $this->convert_unicode( $_POST['Post'] );

	if( strtolower($this->ipsclass->vars['gb_char_set']) != 'iso-8859-1' &&
		strtolower($this->ipsclass->vars['gb_char_set']) != 'utf-8' )
	{
		if ( array_key_exists( strtolower($this->ipsclass->vars['gb_char_set']), $this->decode_charsets ) )
		{
			$this->ipsclass->vars['gb_char_set'] = $this->decode_charsets[strtolower($this->ipsclass->vars['gb_char_set'])];
			$_POST['Post'] = html_entity_decode( $_POST['Post'], ENT_NOQUOTES, $this->ipsclass->vars['gb_char_set'] );
		}
	}

	//-----------------------------------------
	// Init input
	//-----------------------------------------

	$this->ipsclass->input['fast_reply_used'] = 1;
	$this->ipsclass->input['sns_fast_reply_used'] = 1;

	//-----------------------------------------
	// Load and run post class
	//-----------------------------------------

	require_once( ROOT_PATH.'sources/action_public/post.php' );
	$post = new post();
	$post->ipsclass =& $this->ipsclass;
	$post->auto_run();

	$pid = $post->han_post->class_post->post['pid'];

	if( $this->ipsclass->vars['post_order_column'] != 'post_date' )
	{
		$this->ipsclass->vars['post_order_column'] = 'pid';
	}

	if( $this->ipsclass->vars['post_order_sort'] != 'desc' )
	{
		$this->ipsclass->vars['post_order_sort'] = 'asc';
	}

	if( $this->ipsclass->vars['post_order_sort'] == 'desc' )
	{
		if( $this->ipsclass->input['st'] != 0 )
		{
			$this->return_string('show_last');
		}
	}
	else
	{		
		if( $pid > 0 )
		{
			$blah = $this->ipsclass->DB->simple_exec_query(array('select' => 'COUNT(*) as posts', 'from' => 'posts', 'where' => 'topic_id='.$post->han_post->class_post->topic['tid'].' AND pid <= '.$post->han_post->class_post->post['pid']));
			$pcount = $blah['posts'];
			if( ($pcount % $this->ipsclass->vars['display_max_posts']) == 0 )
			{
				$pages = ($pcount) / $this->ipsclass->vars['display_max_posts'];
			}
			else
			{
				$number = (($pcount) / $this->ipsclass->vars['display_max_posts']);
				$pages = ceil($number);
			}

			$st = ($pages - 1) * $this->ipsclass->vars['display_max_posts'];
			if( $st != $this->ipsclass->input['st'] )
			{
				$this->return_string('show_last');
			}
		}
		else
		{
			$this->return_string('error');
		}
	}

	//-----------------------------------------
	// Load and init topics class
	//-----------------------------------------

	require_once( ROOT_PATH.'sources/action_public/topics.php' );
	$topics			 =  new topics();
	$topics->ipsclass   =& $this->ipsclass;
	$topics->post_count =  intval($pcount);
	$topics->init();
	$topics->topic_set_up();

	//-----------------------------------------
	// Get post
	//-----------------------------------------

	if( $post->han_post->class_post->is_merging_posts )
	{
		//-----------------------------------------
		// Prep for display
		//-----------------------------------------	

		$html = $post->han_post->class_post->show_post_preview( $post->han_post->class_post->new_post );

		//-----------------------------------------
		// Showing reason for edit?
		//-----------------------------------------

		if ( $this->ipsclass->member['g_is_supmod'] OR  $post->han_post->class_post->moderator['edit_post'] )
		{
			if ( $post->han_post->class_post->post_edit_reason )
			{
				$html .= "\n<div class='post-edit-reason'>
								{$this->ipsclass->lang['reason_for_edit']}: {$post->han_post->class_post->post_edit_reason}
								</div>";
			}
		}

		$html = $html . "\n" . '<!--IBF.ATTACHMENT_' . $pid . '-->';

		//-----------------------------------------
		// Grab render attach class
		//-----------------------------------------

		if ( !is_object( $post->han_post->class_post->class_attach ) )
		{
			require_once( ROOT_PATH . 'sources/classes/attach/class_attach.php' );
			$post->han_post->class_post->class_attach		   =  new class_attach();
			$post->han_post->class_post->class_attach->ipsclass =& $this->ipsclass;
		}

		$this->ipsclass->load_template( 'skin_topic' );
		$post->han_post->class_post->class_attach->type  = 'post';
		$post->han_post->class_post->class_attach->init();

		$html = $post->han_post->class_post->class_attach->render_attachments( $html, array( $pid => $pid ) );

		if ( $post->han_post->class_post->post['append_edit'] == 1 AND $post->han_post->class_post->post['edit_time'] AND $post->han_post->class_post->post['edit_name'] )
		{
			$e_time = $this->ipsclass->get_date( $post->han_post->class_post->post['edit_time'] , 'LONG' );
			$html .= "<br /><br /><span class='edit'>".sprintf($this->ipsclass->lang['edited_by'], $post->han_post->class_post->post['edit_name'], $e_time)."</span>";
		}

		$match = array();
		$js = '';
		preg_match_all('/fix_linked_image_sizes_attach_thumb\(.*?\);/is', $html, $match);
		for ( $i=0; $i < count($match); $i++ )
		{
			$js .= $match[$i][0]."\n";
		}
		//$js .= 'fix_linked_image_sizes();';
	}
	else
	{
		$raw_post = $post->han_post->class_post->post['post'];

		if ($this->ipsclass->vars['au_cutoff'] == '')
		{
			$this->ipsclass->vars['au_cutoff'] = 15;
		}

		if ($this->ipsclass->vars['custom_profile_topic'] == 1)
		{
			$query_type = 'topics_get_posts_with_join';
		}
		else
		{
			$query_type = 'topics_get_posts';
		}

		if (!in_array('skin_topic', $this->ipsclass->compiled_templates))
		{
			$this->ipsclass->load_template('skin_topic');
		}

		$this->ipsclass->DB->cache_add_query($query_type, array('pids' => array($post->han_post->class_post->post['pid']), 'scol' => $this->ipsclass->vars['post_order_column'], 'sord' => $this->ipsclass->vars['post_order_sort']));
		$o = $this->ipsclass->DB->simple_exec();

		if($row = $this->ipsclass->DB->fetch_row($o))
		{
			$return = $topics->parse_row( $row );

			$html = $this->ipsclass->compiled_templates['skin_topic']->RenderRow($return['row'], $return['poster']);

			$js =  <<<EOF
if ( ajax_loaded && use_enhanced_js )
{
menu_build_menu( 'edit-but-{$return['row']['pid']}',
new Array(  img_item + " <a title='{$this->ipsclass->lang['edit_full_desc']}' href='{$this->ipsclass->base_url}act=post&do=edit_post&f={$return['row']['forum_id']}&t={$return['row']['topic_id']}&p={$return['row']['pid']}&st={$this->ipsclass->input['st']}'>{$this->ipsclass->lang['edit_full_title']}</a>",
			img_item + " <a href='#' title='{$this->ipsclass->lang['edit_quick_desc']}' onclick='return ajax_prep_for_edit({$return['row']['pid']}, event);'>{$this->ipsclass->lang['edit_quick_title']}</a>" ) );
}
ipsmenu.register( 'edit-but-{$return['row']['pid']}' );

ipsmenu.register( 'post-member-{$return['row']['pid']}', '', 'popmenubutton-new', 'popmenubutton-new-out' );
EOF;

		}
		else
		{
			$this->return_string('error');
		}
	}

	foreach( $this->ipsclass->skin['_macros'] as $i => $row )
	{
		if ( $row['macro_value'] != "" )
		{
			$html = str_replace( "<{".$row['macro_value']."}>", $row['macro_replace'], $html );
		}
	}

	$html = str_replace( "<#IMG_DIR#>", $this->ipsclass->skin['_imagedir'], $html );
	$html = str_replace( "<#EMO_DIR#>", $this->ipsclass->skin['_emodir']  , $html );

	if ( $this->ipsclass->vars['ipb_img_url'] )
	{
		$html = preg_replace( "#img\s+?src=([\"'])style_(images|avatars|emoticons)(.+?)[\"'](.+?)?".">#is", "img src=\\1".$this->ipsclass->vars['ipb_img_url']."style_\\2\\3\\1\\4>", $html );
	}

	$html = preg_replace( "#htmldocument\.prototype#is", "HTMLDocument_prototype", $html );

	$ret = array(
					'is_mp'	=> $post->han_post->class_post->is_merging_posts,
					'pid'	=> $post->han_post->class_post->post['pid'],
					'html'	=> $html,
					'js'	=> $js,
					'topicsread'=> serialize($topics->read_array)
				);

	$this->return_string(serialize($ret));
}

 

 

Написал на английском - тоже самое O_o ошибка добавления сообщения.

Ссылка на комментарий
Поделиться на других сайтах

В инструкции функция выглядит иначе.
Ссылка на комментарий
Поделиться на других сайтах

Это из инструкции, которую я качал буквально 2-3 дня назад. Сейчас поменяю на вчерашнюю.

 

Флуд получается какой-то... Вообщем поставил то, что качал вчера:

//-----------------------------------------
// (SnS) AJAX Fast Reply
//-----------------------------------------

function fast_reply_post()
{
	//-----------------------------------------
	// Convert unicode
	//-----------------------------------------

	$_POST['Post'] = $this->convert_unicode( $_POST['Post'] );

	if( strtolower($this->ipsclass->vars['gb_char_set']) != 'iso-8859-1' &&
		strtolower($this->ipsclass->vars['gb_char_set']) != 'utf-8' )
	{
		if ( array_key_exists( strtolower($this->ipsclass->vars['gb_char_set']), $this->decode_charsets ) )
		{
			$this->ipsclass->vars['gb_char_set'] = $this->decode_charsets[strtolower($this->ipsclass->vars['gb_char_set'])];
			$_POST['Post'] = html_entity_decode( $_POST['Post'], ENT_NOQUOTES, $this->ipsclass->vars['gb_char_set'] );
		}
	}

	//-----------------------------------------
	// Init input
	//-----------------------------------------

	$this->ipsclass->input['fast_reply_used'] = 1;
	$_POST['fast_reply_used'] = 1;
	$this->ipsclass->input['sns_fast_reply_used'] = 1;

	//-----------------------------------------
	// Load and run post class
	//-----------------------------------------

	require_once( ROOT_PATH.'sources/action_public/post.php' );
	$post = new post();
	$post->ipsclass =& $this->ipsclass;
	$post->auto_run();

	$pid = $post->han_post->class_post->post['pid'];

	if( $this->ipsclass->vars['post_order_column'] != 'post_date' )
	{
		$this->ipsclass->vars['post_order_column'] = 'pid';
	}

	if( $this->ipsclass->vars['post_order_sort'] != 'desc' )
	{
		$this->ipsclass->vars['post_order_sort'] = 'asc';
	}

	if( $this->ipsclass->vars['post_order_sort'] == 'desc' )
	{
		if( $this->ipsclass->input['st'] != 0 )
		{
			$this->return_string('show_last');
		}
	}
	else
	{		
		if( $pid > 0 )
		{
			$blah = $this->ipsclass->DB->simple_exec_query(array('select' => 'COUNT(*) as posts', 'from' => 'posts', 'where' => 'topic_id='.$post->han_post->class_post->topic['tid'].' AND pid <= '.$post->han_post->class_post->post['pid']));
			$pcount = $blah['posts'];
			if( ($pcount % $this->ipsclass->vars['display_max_posts']) == 0 )
			{
				$pages = ($pcount) / $this->ipsclass->vars['display_max_posts'];
			}
			else
			{
				$number = (($pcount) / $this->ipsclass->vars['display_max_posts']);
				$pages = ceil($number);
			}

			$st = ($pages - 1) * $this->ipsclass->vars['display_max_posts'];
			if( $st != $this->ipsclass->input['st'] )
			{
				$this->return_string('show_last');
			}
		}
		else
		{
			$this->return_string('error');
		}
	}

	//-----------------------------------------
	// Load and init topics class
	//-----------------------------------------

	require_once( ROOT_PATH.'sources/action_public/topics.php' );
	$topics			 =  new topics();
	$topics->ipsclass   =& $this->ipsclass;
	$topics->post_count =  intval($pcount);
	$topics->init();
	$topics->topic_set_up();

	//-----------------------------------------
	// Get post
	//-----------------------------------------

	if( $post->han_post->class_post->is_merging_posts )
	{
		//-----------------------------------------
		// Prep for display
		//-----------------------------------------	

		$html = $post->han_post->class_post->show_post_preview( $post->han_post->class_post->new_post );

		//-----------------------------------------
		// Showing reason for edit?
		//-----------------------------------------

		if ( $this->ipsclass->member['g_is_supmod'] OR  $post->han_post->class_post->moderator['edit_post'] )
		{
			if ( $post->han_post->class_post->post_edit_reason )
			{
				$html .= "\n<div class='post-edit-reason'>
								{$this->ipsclass->lang['reason_for_edit']}: {$post->han_post->class_post->post_edit_reason}
								</div>";
			}
		}

		$html = $html . "\n" . '<!--IBF.ATTACHMENT_' . $pid . '-->';

		//-----------------------------------------
		// Grab render attach class
		//-----------------------------------------

		if ( !is_object( $post->han_post->class_post->class_attach ) )
		{
			require_once( ROOT_PATH . 'sources/classes/attach/class_attach.php' );
			$post->han_post->class_post->class_attach		   =  new class_attach();
			$post->han_post->class_post->class_attach->ipsclass =& $this->ipsclass;
		}

		$this->ipsclass->load_template( 'skin_topic' );
		$post->han_post->class_post->class_attach->type  = 'post';
		$post->han_post->class_post->class_attach->init();

		$html = $post->han_post->class_post->class_attach->render_attachments( $html, array( $pid => $pid ) );

		if ( $post->han_post->class_post->post['append_edit'] == 1 AND $post->han_post->class_post->post['edit_time'] AND $post->han_post->class_post->post['edit_name'] )
		{
			$e_time = $this->ipsclass->get_date( $post->han_post->class_post->post['edit_time'] , 'LONG' );
			$html .= "<br /><br /><span class='edit'>".sprintf($this->ipsclass->lang['edited_by'], $post->han_post->class_post->post['edit_name'], $e_time)."</span>";
		}

		$match = array();
		$js = '';
		preg_match_all('/fix_linked_image_sizes_attach_thumb\(.*?\);/is', $html, $match);
		for ( $i=0; $i < count($match); $i++ )
		{
			$js .= $match[$i][0]."\n";
		}
		//$js .= 'fix_linked_image_sizes();';
	}
	else
	{
		$raw_post = $post->han_post->class_post->post['post'];

		if ($this->ipsclass->vars['au_cutoff'] == '')
		{
			$this->ipsclass->vars['au_cutoff'] = 15;
		}

		if ($this->ipsclass->vars['custom_profile_topic'] == 1)
		{
			$query_type = 'topics_get_posts_with_join';
		}
		else
		{
			$query_type = 'topics_get_posts';
		}

		if (!in_array('skin_topic', $this->ipsclass->compiled_templates))
		{
			$this->ipsclass->load_template('skin_topic');
		}

		$this->ipsclass->DB->cache_add_query($query_type, array('pids' => array($post->han_post->class_post->post['pid']), 'scol' => $this->ipsclass->vars['post_order_column'], 'sord' => $this->ipsclass->vars['post_order_sort']));
		$o = $this->ipsclass->DB->simple_exec();

		if($row = $this->ipsclass->DB->fetch_row($o))
		{
			$return = $topics->parse_row( $row );

			$html = $this->ipsclass->compiled_templates['skin_topic']->RenderRow($return['row'], $return['poster']);

			$js = '';
			if($this->ipsclass->member['id'])
			{
				$js =  <<<EOF
if ( ajax_loaded && use_enhanced_js )
{
menu_build_menu( 'edit-but-{$return['row']['pid']}',
	new Array(  img_item + " <a title='{$this->ipsclass->lang['edit_full_desc']}' href='{$this->ipsclass->base_url}act=post&do=edit_post&f={$return['row']['forum_id']}&t={$return['row']['topic_id']}&p={$return['row']['pid']}&st={$this->ipsclass->input['st']}'>{$this->ipsclass->lang['edit_full_title']}</a>",
				img_item + " <a href='#' title='{$this->ipsclass->lang['edit_quick_desc']}' onclick='return ajax_prep_for_edit({$return['row']['pid']}, event);'>{$this->ipsclass->lang['edit_quick_title']}</a>" ) );
}
ipsmenu.register( 'edit-but-{$return['row']['pid']}' );

ipsmenu.register( 'post-member-{$return['row']['pid']}', '', 'popmenubutton-new', 'popmenubutton-new-out' );
EOF;
			}
		}
		else
		{
			$this->return_string('error');
		}
	}

	foreach( $this->ipsclass->skin['_macros'] as $i => $row )
	{
		if ( $row['macro_value'] != "" )
		{
			$html = str_replace( "<{".$row['macro_value']."}>", $row['macro_replace'], $html );
		}
	}

	$html = str_replace( "<#IMG_DIR#>", $this->ipsclass->skin['_imagedir'], $html );
	$html = str_replace( "<#EMO_DIR#>", $this->ipsclass->skin['_emodir']  , $html );

	if ( $this->ipsclass->vars['ipb_img_url'] )
	{
		$html = preg_replace( "#img\s+?src=([\"'])style_(images|avatars|emoticons)(.+?)[\"'](.+?)?".">#is", "img src=\\1".$this->ipsclass->vars['ipb_img_url']."style_\\2\\3\\1\\4>", $html );
	}

	$html = preg_replace( "#htmldocument\.prototype#is", "HTMLDocument_prototype", $html );

	$ret = array(
					'is_mp'	=> $post->han_post->class_post->is_merging_posts,
					'pid'	=> $post->han_post->class_post->post['pid'],
					'html'	=> $html,
					'js'	=> $js,
					'topicsread'=> serialize($topics->read_array)
				);

	$this->return_string(serialize($ret));
}

 

 

Собственно ничего не изменилось. Ошибка такая же всплывает.

Ссылка на комментарий
Поделиться на других сайтах

Тогда только дебаг спасёт мир.

 

Обновил пост про ctrl-enter. Проверялось в ФФ и Опере, отправляет быстрый ответ по Ctrl-Enter.

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

после добавления сообщения появляется окошко "пожалуйста подождите"

и ничего не происходит.

окошко висит,месседж не добавляется.

Ссылка на комментарий
Поделиться на других сайтах

В PHP части что-то сделали неверно, скорее всего в xmlout.php.
Ссылка на комментарий
Поделиться на других сайтах

Sannis, а вывод ошибок ещё не сделан? Это если стоит ограничение по времени ввода сообщений. Да ещё заметил такую штуку, когда отвечаешь через быстрое сообщение, то почему то номер сообщения становиться на один больше, то есть если предедущее сообщение было 10, то это становиться 12, при обновлении страницы оно становиться 11.
Ссылка на комментарий
Поделиться на других сайтах

Sannis, а вывод ошибок ещё не сделан? Это если стоит ограничение по времени ввода сообщений.

Нет ещё.

 

Да ещё заметил такую штуку, когда отвечаешь через быстрое сообщение, то почему то номер сообщения становиться на один больше, то есть если предедущее сообщение было 10, то это становиться 12, при обновлении страницы оно становиться 11.

Ок, учту, посмотрю.

Ссылка на комментарий
Поделиться на других сайтах


×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.