Перейти к контенту
  • 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, спасибо большое. Все верно. Там не меняется. Еще раз спасибо, что не оставил без внимания %)

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

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

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

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

Гость
Ответить на вопрос...

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

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

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

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

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

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

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

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