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

[2.1.x]Decrement Member's Post Count


SAT

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

Сори может туплю, так что тут надо сделать?

 

//------------------------
// найти и удалить из кода
//------------------------

			//-----------------------------------------
			// Remove polls assigned to this topic
			//-----------------------------------------

			$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'topics', 'where' => "tid".$tid ) );

//------------------------
// найти
//------------------------

			//-----------------------------------------
			// Remove the posts
			//-----------------------------------------

			$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'posts', 'where' => "topic_id".$tid ) );

//------------------------
// заменить на
//------------------------

			//-----------------------------------------
			// Remove the posts
			//-----------------------------------------

			//decrement
			$this->post_delete($posts);

			$this->ipsclass->DB->simple_exec_query( array( 'delete' => 'topics', 'where' => "tid".$tid ) );

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

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

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

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

ну как бы надо найти и удалить строчку кода, которая приведена после слов "найти и удалить из кода" :D

далее все по инструкции ;)

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

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

"когда IPB будет для MySQL 5" ... а она уже для MySQL 5 так как с версии 2.0 не имеет ошибок на MySQL 5 :D

Вот vBulletin тоже не говорили вроде ничего, но с какой-то версии тоже ошибки в MySQL 5 перестали сыпаться... Так что это ещё как посмотреть ... кстати, респект создателям IPB что уже в первые месяцы как зарелизило MySQL 5 они всё поправили в запросах! Молодцы (не то что некоторые :-P )

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

спецификация IPB 2.1.x - http://www.invisionpower.com/ip.dynamic/pr...oard/index.html

 

Invision Power Board requires PHP 4.3+ and either MySQL 3.23+ (4.x highly recommended), MSSQL or Oracle 9i for database storage. MySQL 5.x not yet supported - news on MySQL 5.x support coming soon.

 

 

ага? :D

 

потому когда будет поддержка SQL 5 тогда и мод поддерживать буедт

 

тема в помощь: IPB 2.1.x, mySQL 5

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

мод хороший, но если можно было бы в него еще прописать, что бы у юзера поинты отнимались, то вообще класс было бы.

может подскажите куда что прописать для этого ?

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

 

буду признателен за такое дополнение.

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

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

 

				$this->ipsclass->DB->simple_construct( array(  'select' => 'p.pid, p.topic_id, p.author_id, t.forum_id, t.inc_postcount, m.mgroup, m.posts, m.auto_g_change_history',
														   'from' => 'posts p, '.SQL_PREFIX.'topics t LEFT JOIN '.SQL_PREFIX.'members m ON(m.id=p.author_id)',
														   'where' => 'p.topic_id=t.tid AND p.pid'.$pid ) );

 

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

 

ЗЫ: вроде понятно изложил мысль... :D

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

У меня таже проблема з MySQL5:

 

mySQL query error: SELECT p.pid, p.topic_id, p.author_id, t.forum_id, t.inc_postcount, m.mgroup, m.posts, m.auto_g_change_history FROM ibf_posts p, ibf_topics t LEFT JOIN ibf_members m ON(m.id=p.author_id) WHERE p.topic_id=t.tid AND p.pid IN(19639)

 

Но если в sources/lib/func_mod.php поставить скобки:

 

'from' => '(posts p, '.SQL_PREFIX.'topics t) LEFT JOIN '.SQL_PREFIX.'members m ON(m.id=p.author_id)',

 

То происходит такая ошибка:

 

mySQL query error: SELECT p.pid, p.topic_id, p.author_id, t.forum_id, t.inc_postcount, m.mgroup, m.posts, m.auto_g_change_history FROM ibf_(posts p, ibf_topics t) LEFT JOIN ibf_members m ON(m.id=p.author_id) WHERE p.topic_id=t.tid AND p.pid IN(19639)

 

Каким образом поставить скобку там где нужно?

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

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

 

				$this->ipsclass->DB->simple_construct( array(  'select' => 'p.pid, p.topic_id, p.author_id, t.forum_id, t.inc_postcount, m.mgroup, m.posts, m.auto_g_change_history',
														   'from' => 'posts p, '.SQL_PREFIX.'topics t LEFT JOIN '.SQL_PREFIX.'members m ON(m.id=p.author_id)',
														   'where' => 'p.topic_id=t.tid AND p.pid'.$pid ) );

 

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

 

ЗЫ: вроде понятно изложил мысль... :D

я сделал так

после

$this->ipsclass->DB->simple_construct( array(  'select' => 'p.pid, p.topic_id, p.author_id, t.forum_id, t.inc_postcount, m.mgroup, m.posts, m.auto_g_change_history',
														   'from' => 'posts p, '.SQL_PREFIX.'topics t LEFT JOIN '.SQL_PREFIX.'members m ON(m.id=p.author_id)',
														   'where' => 'p.topic_id=t.tid AND p.pid'.$pid ) );
			$this->ipsclass->DB->simple_exec();

			while ( $r = $this->ipsclass->DB->fetch_row() )
			{
					$posts[ $r['pid'] ]	   = $r['topic_id'];
					$topics[ $r['topic_id'] ] = 1;

прописал

$this->ipsclass->DB->simple_construct( array( 'select' => 'points_reply', 'from' => 'forums', 'where' => "id=$r[forum_id]" ) );
	$this->ipsclass->DB->simple_exec();

	$w = $this->ipsclass->DB->fetch_row();
	$pcount = "points=points-".$w[points_reply];
$this->ipsclass->DB->simple_construct( array( 'update' => 'members',
				'set'	=> $pcount,
				'where'  => "id=$r[author_id]"
		)	   );
  $this->ipsclass->DB->simple_exec();

 

все работает, но когда удаляешь и появлятся страница где написано

сообщение удалено

сейчас вы будете перемещены

 

вверху этой страницы появилась надпись

IPB WARNING [2] mysql_fetch_array(): supplied argument is not a valid MySQL result resource (Line: 567 of \ips_kernel\class_db_mysql.php)

в чем проблема, что я не так прописал ?

 

если слешу вот это

$this->ipsclass->DB->simple_construct( array( 'update' => 'members',
				'set'	=> $pcount,
				'where'  => "id=$r[author_id]"
		)	   );
  $this->ipsclass->DB->simple_exec();

то надпись пропадает, но соответственно и поинты не отнимаются.

 

пробовал вычитать поинты через функцию такого типа

$this->ipsclass->DB->do_update('members', array( 'points' => $point,

), 'id='.$member_id);

соответствено сперва определив $point, но проблема с предупреждающей надписью осталась, хотя опять же все работает ;)

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

в цикле нельзя запрос ставить :D лучше отдельную выборку сделать в массив а потом все разобрать в цикле ;)

категорически не советую в кле далать, т.к. угробите базу

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

Прошу прощения за маленький оффтоп, однако давно хотел написать да всё как-то небыло времени:

Хотелось бы сказать автору этого мода большое спасибо! Мод очень мне помог. Ставил многие модификации SATa и ни с одной небыло проблем , если вижу что он автор, то без боязни ставлю мод. Ещё раз спасибо, огромное.

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

Хотелось бы сказать автору этого мода большое спасибо! Мод очень мне помог. Ставил многие модификации SATa и ни с одной небыло проблем , если вижу что он автор, то без боязни ставлю мод. Ещё раз спасибо, огромное.

 

спасибо большое за доверие к моим кодам :D

извините сейчас не выпускаю ни новых модификаций, и мало повремени на поддержку, но я не умер =Р

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

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

  • 2 недели спустя...
А для 2.0.4 этот мод пойдёт?

 

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

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

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

2 SAT

Спасибо за мод.

Единственное, у меня если посты удаляются из форума, в котором отключен счетчик, то счетчик - отнимается.

Думал, руки кривые - 3 раза перепроверил, все изменения соответствую руководству.

Не подскажете, где искать трабл?

 

P.S. Ставил на версию 2.1.6, полученную апгрейтом с 2.0 (после покупки здесь)

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

  • 2 недели спустя...
- если посты удаляются из форума, в котором отключен счетчик, то счетчик не отнимается

Как счетчик включить ? я мод поставил только посты неотнимаются когда я удаляю пост так и с корзины

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

  • 2 месяца спустя...

mySQL query error: SELECT p.pid, p.topic_id, p.author_id, t.forum_id, t.inc_postcount, m.mgroup, m.posts, m.auto_g_change_history FROM ibf_posts p, ibf_topics t LEFT JOIN ibf_members m ON(m.id=p.author_id) WHERE p.topic_id=t.tid AND p.pid=15921

SQL error: Unknown column 'p.author_id' in 'on clause'
SQL error code: 
Date: 21.8.2006, 10:20

Так как исправить эту ошибку?

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

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

.silent

 

о великий и могущественный программист, если так исправить, то кроме как в MySQL 5 не будет нигде работать.

 

а если вот так исправить, то вполне:

 

вместо вот этого кода(от в readme)

 

				//-----------------------------------------
			// Get Stuff
			//-----------------------------------------

			//decrement post cont
			$this->ipsclass->DB->simple_construct( array(  'select' => 'p.pid, p.topic_id, p.author_id, t.forum_id, t.inc_postcount, m.mgroup, m.posts, m.auto_g_change_history',
														   'from' => 'posts p, '.SQL_PREFIX.'topics t LEFT JOIN '.SQL_PREFIX.'members m ON(m.id=p.author_id)',
														   'where' => 'p.topic_id=t.tid AND p.pid'.$pid ) );
			$this->ipsclass->DB->simple_exec();

			while ( $r = $this->ipsclass->DB->fetch_row() )
			{
					$posts[ $r['pid'] ]	   = $r['topic_id'];
					$topics[ $r['topic_id'] ] = 1;

					//----------------------------------------
					// get members info for decrement popst count
					//----------------------------------------
					if (($this->forum['inc_postcount'] or $r['forum_id'] == $this->ipsclass->vars['forum_trash_can_id'])
						 and !$r['inc_postcount'])
					{
							$autors[$r['author_id']]['count']  += 1;
							$autors[$r['author_id']]['mgroup']  = $r['mgroup'];
							$autors[$r['author_id']]['posts']   = $r['posts'];
							$autors[$r['author_id']]['history'] = $r['auto_g_change_history'];
					}
			}

 

заменить на

 

				//-----------------------------------------
			// Get Stuff
			//-----------------------------------------

			//decrement post cont
			$this->ipsclass->DB->build_query( array( 'select'   => 'p.pid, p.topic_id, p.author_id',
											 'from'	 => array( 'posts' => 'p' ),
											 'where'	=> 'p.pid='.$row['pid'],
											 'add_join' => array( 0 => array( 'select' => 't.forum_id, t.inc_postcount',
																			  'from'   => array( 'topics' => 't' ),
																			  'where'  => "p.topic_id=t.tid",
																			  'type'   => 'left' ), 
															1 => array( 'select' => 'm.mgroup, m.posts, m.auto_g_change_history',
																			  'from'   => array( 'members' => 'm' ),
																			  'where'  => "m.id=p.author_id",
																			  'type'   => 'left' ) ),
									)	  );

			$this->ipsclass->DB->exec_query();



			while ( $r = $this->ipsclass->DB->fetch_row() )
			{
					$posts[ $r['pid'] ]	   = $r['topic_id'];
					$topics[ $r['topic_id'] ] = 1;

					//----------------------------------------
					// get members info for decrement popst count
					//----------------------------------------
					if (($this->forum['inc_postcount'] or $r['forum_id'] == $this->ipsclass->vars['forum_trash_can_id'])
						 and !$r['inc_postcount'])
					{
							$autors[$r['author_id']]['count']  += 1;
							$autors[$r['author_id']]['mgroup']  = $r['mgroup'];
							$autors[$r['author_id']]['posts']   = $r['posts'];
							$autors[$r['author_id']]['history'] = $r['auto_g_change_history'];
					}
			}

 

 

проверил на Oracle ща все работает, на мускуле не тестил, но могу предположить что во всех драйверах теперь будет работать.

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

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

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

Не могли бы вы мне помочь.

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

SAT , великий и могучий, как вы написали вот не работает ) потому что запрос очень сильно каверкает ) Попробуй сам ) Не мог бы ты потестировать и выложить рабочий код для блин мускла 5? )

 

да кстати, после изменений, которые предложил нашему вниманию .silent, опять же возникает ошибка - все та-же - потому что скобки не подставляются...

Прям не знаю что делать... Уже подумываю о том чтобы воткнуть запрос напрямую (=

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

SAT , великий и могучий, как вы написали вот не работает ) потому что запрос очень сильно каверкает ) Попробуй сам ) Не мог бы ты потестировать и выложить рабочий код для блин мускла 5? )

 

Вообще я жду что бы IPB поддерживала MySQL 5 :D

каверкает, но работает в MYSQL 4 и Oracle 10g :)

 

да кстати, после изменений, которые предложил нашему вниманию .silent, опять же возникает ошибка - все та-же - потому что скобки не подставляются...

 

вообще-то работет, не знаю как вы правили... но как я описал, работает только в MySQL

 

SAT , великий и могучий, как вы написали вот не работает )

 

Еще раз так напишешь и точно не отвечу :) а так стучись в ПМ, есть предложение, своего рода Бетта тестинг ;)

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

  • 1 месяц спустя...

SAT,

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

 

mySQL query error: SELECT p.pid, p.topic_id, p.author_id,t.forum_id, t.inc_postcount,m.mgroup, m.posts, m.auto_g_change_history FROM ibf_posts p  LEFT JOIN ibf_topics t ON ( p.topic_id=t.tid ) 
LEFT JOIN ibf_members m ON ( m.id=p.author_id )   WHERE p.pid=

SQL error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2
SQL error code: 
Date: Sunday 29th 2006f October 2006 10:44:51 PM

sql 4-ый

 

ошибка только при удалении из корзины

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

тьфу блин.... не тот запрос копирнул...

 

				//decrement post cont
			$this->ipsclass->DB->build_query( array( 'select'   => 'p.pid, p.topic_id, p.author_id',
											 'from'	 => array( 'posts' => 'p' ),
											 'where'	=> 'p.pid'.$pid,
											 'add_join' => array( 0 => array( 'select' => 't.forum_id, t.inc_postcount',
																			  'from'   => array( 'topics' => 't' ),
																			  'where'  => "p.topic_id=t.tid",
																			  'type'   => 'left' ),
															1 => array( 'select' => 'm.mgroup, m.posts, m.auto_g_change_history',
																			  'from'   => array( 'members' => 'm' ),
																			  'where'  => "m.id=p.author_id",
																			  'type'   => 'left' ) ),
									)	  );

 

так по идее должно работать

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


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

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

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