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

Автор последнего сообщения на главной странице форума


Vakhara

Вопрос

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

Подскажите пожалуйста куда (в какую таблицу видимо и под каким названием поле) сохраняются сведения о последенем запостившем сообщение. А еще лучше и заодно в каком файле это дело (добавление/обновление) происходит.

Уточняю - это не те данные, что постятся в строке для непосредственно темы, а именно то, что выводится на главной странице после слова Автор.

Типа:

Тема: такая-то

Автор: такой-то

 

Насколько я поняла сведения об авторе берутся не из таблицы темы :D

Надеюсь, не сильно криво объяснила...

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

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

  • 0

сведения об авторе берутся из таблицы

members

сведения о теме из таблицы topics

сведения о сообщениях в posts

 

Скажи лчуше зачем ищеш, т.е. чего ты хочеш из менить.

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

  • 0

Ну, я пыталась перлопатить старенький мод с версии 1.3 суть которого заключалась в том, что связываются аккаунты между собой и человек сидя под одним аккаунтом постит сообщение от имени другого аккаунта, выбирая тот из выпадающего списка (в списке те аккаунты с которыми он до этого установил так сказать связь).

Вот. Я его таки сделала. Но обнаружилась проблема, что если в topics и posts тфблицы сведения заносятся праивльно, то вот почему-то на главной странице имя Автора указывается не то от чьего имени запостили сообщение, а под каким аккаунтом сидел человек на момент написания сообщения.

 

Так как я не умею нормально объяснять приведу еще пример на всяк случай.

Пользователь 1 и Пользователь 2.

Пользователь 1 сидит под своим аккаунтом, пишет ответ на пост и выбирает из выпадающего списка "Пользователь 2".

В тему сообщения его пост добавляется как от Пользователя 2. В форуме непосредственно напротив названия темы выводится Последнее сообщение: Пользователь 2.

НО!

На главной странице форума выовдится:

Тема: такая-то

Автор: Пользователь 1.

 

Вот...

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

  • 0

Ясно, тебе нужно просто в скине поменять выводимое имя автора.

 

открой

sources/classes/class_forums.php

и это тоже открой

sources/action_public/forums.php

 

и поищи там 'last_poster'

 

у тебя навреное для запоминания, выбраного при отправке сообщения, имени используется другое поле в таблице чтоли?

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

  • 0

sources/classes/class_forums.php

		if ( isset($forum_data['last_poster_name']))
	{
		$forum_data['last_poster'] = $forum_data['last_poster_id'] ? "<a href='{$this->ipsclass->base_url}showuser={$forum_data['last_poster_id']}'>{$forum_data['last_poster_name']}</a>"
																   : $forum_data['last_poster_name'];
	}
	else
	{
		$forum_data['last_poster'] = $this->ipsclass->lang['f_none'];
	}

 

sources/action_public/forums.php

 

$topic['last_poster'] = $topic['last_poster_id'] ? $this->ipsclass->make_profile_link( $topic['last_poster_name'], $topic['last_poster_id']) : "-".$topic['last_poster_name']."-";

 

да, кстати, по клику на Пользователь 1 (там где должно выводится Пользователь 2, а не вообще), выводится информация о Пользователь 2... Вот такая вот каша..

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

  • 0

да... каша не хилая

 

опиши пожалуйста подробно что и где ты изменяла когда приделывала эту модификацию

 

а то у меня понятия нет где ты что подправила

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

  • 0

Ок.. завтра попытаюсь скомпоновать и кинуть сюда...

Просто если бегло смотреть в саму базу данных то в теме и сообщении id юзера и его display_name заносятся правильно.... в таблицу и везде выводятся праивльно за исключением данного конкретного места на главной странице (ну и если есть подформуы, то и там), хотя именно вот эти файлы из которых я вырезку сделала я никаким местом вообще не трогала.

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

  • 0

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

 

sources/action_public/topics.php

 

Найти:

$this->output = str_replace( "<!--IBF.QUICK_REPLY_OPEN-->"  , $this->ipsclass->compiled_templates['skin_topic']->quick_reply_box_open($this->topic['forum_id'], $this->topic['tid'], $show, $this->md5_check), $this->output );

 

Заменить:

		$names="";
	$names.="<option value='{$this->ipsclass->member['name']}'>{$this->ipsclass->member['name']}</option>";
 	$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'mlinks', 'where' => "mid='".$this->ipsclass->member['id']."'" ) );
	$this->ipsclass->DB->simple_exec();
	while($m=$this->ipsclass->DB->fetch_row())
	{
		$names.="<option value='{$m['name']}'>{$m['name']}</option>";
	}


	$this->output = str_replace( "<!--IBF.QUICK_REPLY_OPEN-->"  , $this->ipsclass->compiled_templates['skin_topic']->quick_reply_box_open($this->topic['forum_id'], $this->topic['tid'], $show, $this->md5_check, $names), $this->output );

 

sources/classes/post/class_post.php

 

Найти:

if (strlen( $_POST['Post'] ) > ($this->ipsclass->vars['max_post_length']*1024))
	{
		$this->ipsclass->Error( array( LEVEL => 1, MSG => 'post_too_long') );
	}

 

Добавить перед:

		$name=$this->ipsclass->input['UserName'];

 	$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'members', 'where' => "name='{$this->ipsclass->input['UserName']}'" ) );
	$this->ipsclass->DB->simple_exec();
	$n=$this->ipsclass->DB->fetch_row();

 

Далее ниже до конца функции заменить все $this->ipsclass->member на $n

 

sources/classes/post/class_post_new.php

 

Найти:

					$pinned = 1;
				$state = 'closed';

				$this->moderate_log('Pinned & closed topic from post form', $this->ipsclass->input['TopicTitle']);
			}
		}
	}

 

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

		$name=$this->ipsclass->input['UserName'];
		$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'members', 'where' => "name='".$name."'" ) );
	$this->ipsclass->DB->simple_exec();
	$n=$this->ipsclass->DB->fetch_row();

	$this->ipsclass->member['id']=$n['id'];

 

Далее ниже до конца функции заменить все $this->ipsclass->member на $n

 

Найти:

$this->output .= $this->ipsclass->compiled_templates['skin_post']->table_structure();

 

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

		$names="";
	$names.="<option value='{$this->ipsclass->member['name']}'>{$this->ipsclass->member['name']}</option>";
 	$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'mlinks', 'where' => "mid='".$this->ipsclass->member['id']."'" ) );
	$this->ipsclass->DB->simple_exec();
	while($m=$this->ipsclass->DB->fetch_row())
	{
		$names.="<option value='{$m['name']}'>{$m['name']}</option>";
	}

 

Найти:

$name_fields = $this->html_name_field();

 

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

$name_field = $this->ipsclass->compiled_templates['skin_post']->NameField($names);

 

Найти:

$this->output = str_replace( "<!--NAME FIELDS-->" , $name_fields  , $this->output );

 

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

$this->output = str_replace( "<!--NAME FIELD-->" , $name_field  , $this->output );

 

 

sources/classes/post/class_post_reply.php

 

Найти:

		else if ( $this->topic['state'] == 'closed' AND ( $this->times['open'] AND $this->times['open'] >= time() ) )
	{
		$this->topic['state'] = 'open';
	}

 

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

$name=$this->ipsclass->input['UserName'];
		$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'members', 'where' => "name='".$name."'" ) );
	$this->ipsclass->DB->simple_exec();
	$n=$this->ipsclass->DB->fetch_row();

	$this->ipsclass->member['id']=$n['id'];

 

Далее ниже до конца функции заменить все $this->ipsclass->member на $n

 

Найти:

$this->output .= $this->ipsclass->compiled_templates['skin_post']->table_structure();

 

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

				$names="";
	$names.="<option value='{$this->ipsclass->member['name']}'>{$this->ipsclass->member['name']}</option>";
 	$this->ipsclass->DB->simple_construct( array( 'select' => '*', 'from' => 'mlinks', 'where' => "mid='".$this->ipsclass->member['id']."'" ) );
	$this->ipsclass->DB->simple_exec();
	while($m=$this->ipsclass->DB->fetch_row())
	{
		$names.="<option value='{$m['name']}'>{$m['name']}</option>";
	}

 

Найти:

$name_fields = $this->html_name_field();

 

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

$name_field = $this->ipsclass->compiled_templates['skin_post']->NameField($names);

 

Найти:

$this->output = str_replace( "<!--NAME FIELDS-->" , $name_fields  , $this->output );

 

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

$this->output = str_replace( "<!--NAME FIELD-->" , $name_field  , $this->output );

 

 

Папка скинов: skin_post

 

добавить в конец перед последней }

 

function NameField($names){

$IPBHTML = "";


$IPBHTML .= <<<EOF

<tr>
<td colspan='2' align='center' class='bg1'>
<div style='width:100%;' align='center' class='borderwrap'>
<table cellpadding='0' cellspacing='0' width='100%' class='darkrow3'>
<tr>
 <td align="right" valign='top' width='20%'><b>{$this->ipsclass->lang['mua_names']}</b></td>
 <td align="left" width='80%'><select name='UserName'>{$names}</select></td>
</tr>
 </table>
</div>
</td>
</tr>
EOF;

return $IPBHTML;

}

 

Папка скинов: skin_topic

 

Найти:

<textarea onmouseover='checkselection()' id='fastreplyarea' cols="70" rows="8" name="Post" class="textarea" tabindex="1"></textarea>
	<!-- HIDDEN PASTE SELECTION QUESTION -->

 

Добавить перед:

{$this->ipsclass->lang['mua_names']}: <select name='UserName'>{$names}</select> <br>

 

Ммм... вроде как все... надеюсь, я ничего не упустила...

 

Еще создается таблица для связей и добавляются два поля в мэмбер базу.

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

  • 0

погляди у тебя в таблице ibf_topics

в поле last_poster_name

все как и должно быть т.е. там выбарные при отправке имена или же оригинальные (которые для last_poster_id заданы изначально)

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

  • 0

В том-то и дело, что там все правильно и last_poster_id и last_poster_name.... и эти данные как я и говорила выводятся напротив темы (в конкретном форуме) праивльно, но вот напротив форума так сказать... не праивльно....

 

Просто у меня смутные подозрения, что там каким-то не тем раком этот автор выводится именно для форумов а не конкретной темы... я попыталась понять октуда там что рстет, но окончтельно запуталась. вот с темой там все легко и понятно... а вот кстати кажется для форума самого надо искать не в forums.php, а boards.php но я там заблудилась...

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

  • 0

А ты про главную страницу форума говориш? (idx)

или когда уже смориш раздел (он же форум)?

 

Просто я специально порылся нашел откеда он идет и поэтому и спросил у тебя все ли ок с данными в самой табличке.

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

  • 0

Речь кажеться идёт о таблице ibf_forums, названия полей такие же как и в topics.

 

PS: Несмотрел особо что там понаписано выше, но ИМХО - я бы сделал этот мод через замену данных в $ipsclass->member.

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

  • 0
А ты про главную страницу форума говориш? (idx)

или когда уже смориш раздел (он же форум)?

 

Просто я специально порылся нашел откеда он идет и поэтому и спросил у тебя все ли ок с данными в самой табличке.

 

Я говорю про главную страницу. В разделе все нормально...

 

В общем, дабы не мучать особо. Привожу то, что надо было сделать с самого начал :D скриншот.

http://slil.ru/23077506

 

Верхняя часть - это главная страница ВСЕГО форума. Как видим там Автор Брат Медведь - это тот ник под которым сидел пользователь

Нижняя часть содержимое форума. Как видим там Автор Темный - а вот тут все праивльно. Брат Медведь сидя под своим аккаунтом выбрал из списка ник Темный и запостил сообщение.

 

Таблиа топикс как и положено хранит данные Темный и его id... Откуда берется Брат Медведь я вообще не пойдму... но точно не из таблицы топикс.

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

  • 0

Имя последнего ответившего в форуме запоминается в поле last_poster_name в таблице ibf_forums

 

вся фишка это кеш ))) когда ты изменяеш данные в таблице ibf_forums нужно его для форумов обновлять

для этого есть функция update_forum_cache

когда кто-то отвечает в форум она автоматом вызвается

 

вообщем гляди чего у тебя с last_poster_name в таблице ibf_forums

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

  • 0

xRay, спасибо большое. Все верно. Там не меняется. Еще раз спасибо, что не оставил без внимания %)

Я только разбираюсь со всем, так что тяжело не заблудиться %)

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

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

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

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