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

Меняем местами сообщения в топике


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

В Render Row

			include( "arc/".$arc_path.$arc_file );
		$includer = @ob_get_contents();
		$includerkey

<< А что это самое последнее?.. Стереть? Или неоконченная мысль =)

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

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

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

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

В Render Row

			include( "arc/".$arc_path.$arc_file );
		$includer = @ob_get_contents();
		$includerkey

<< А что это самое последнее?.. Стереть? Или неоконченная мысль =)

Мои извинения, должно быть

$includerkey = "<span style='color:Gray;font-weight:bold'>[x]</span>";

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

 

В архиве поправил.

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

Вот кстати я подумал. А сколько будет весить множество архив-файлов, учитывая что файл занимает место = размеру кластера в ОС?

 

Допустим 10 000 постов-файлов. (В БД это примерно 10 метров.)

Размер кластара 4-32 kB. Что будет равно на винте 40-320 мегабайт

 

А я собираюсь сжать минимум 20 000 постов сейчас, и бог знает сколько потом.

Ход мысли правильный?

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

Вот кстати я подумал. А сколько будет весить множество архив-файлов, учитывая что файл занимает место = размеру кластера в ОС?

 

Допустим 10 000 постов-файлов. (В БД это примерно 10 метров.)

Размер кластара 4-32 kB. Что будет равно на винте 40-320 мегабайт

Идея архивации возникла не ради экономии места, а ради уменьшения нагрузки на MySQL

 

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

Сначала я делал под денвером на локальной машине: сбрасывал в архивы до тех пор, пока ibf_posts не уменьшилась на 2 Мб; при этом индекс тоже уменьшился на 1,5 Мб, выигрыш составил 3,5 Мб. Вес директории arc у меня на FAT32 составил:

Размер: 1,84 МБ (1 934 296 байт)

На диске: 3,21 МБ (3 375 104 байт)

 

Для эксперимента скопировал эту директорию на диск с NTFS:

Размер: 1,84 МБ (1 934 296 байт)

На диске: 2,39 МБ (2 514 944 байт)

 

Вывод: место на диске существенно не меняется.

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

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

А можно архивировать сразу весь топик, не отмечая чекбоксы?

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

 

Для того и big.php сделан - чтобы найти самые большие сообщения - для архивации.

 

Кстати, еще один приятный результат архивации:

На vesvalo.net сейчас сархивировано всего лишь 259 самых больших сообщений общим весом всего 1,84 МБ. Это всего лишь 2,5% от размера 40-меговой таблицы.

Однако на локальной машине рестор сипекс-дампером стал занимать 7 минут супротив бывших 12-13.

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

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

Только массовые расстрелы спасут страну!

 

Какие права ставить на папку arc?

Кто имеет право на архивацию и разархивацию, а так-же перемещение постов?)

 

Можешь в big.php сделать кнопку "Искать следующие 10 больших файлов" %)

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

 

И может быть лучше раскидывать посты по папкам, с структурой пути id форума/id топика/ пост id

?

 

В описании сказано:

Ниже добавить:

//+FatCat
//			$row['checkbox'] = $row['new_topic'] ? '' : $this->checkbox($row['pid']);
		$row['checkbox'] = $this->checkbox($row['pid']);

Может ну её нафик, первую строчку, раз есть вторая)?

 

PS

Мод у себя поставил на рабочий форум. Буду потихоньку юзать.

Спасиб)

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

Какие права ставить на папку arc?

Я сделал 0766, хотя подозреваю, что можно и урезать малость.

 

 

Кто имеет право на архивацию и разархивацию, а так-же перемещение постов?)

На перемещение я оставил от theIggs: те же, кому разрешено резать/склеивать. Аналогично сделал и на всё остальное.

 

 

 

Можешь в big.php сделать кнопку "Искать следующие 10 больших файлов" %)

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

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

:$query_messa= "SELECT topic_id , pid , author_name , post FROM ibf_posts ORDER BY length( post ) DESC LIMIT 0 , 10";

Сделаю на конце лимит 11, 20...

 

 

И может быть лучше раскидывать посты по папкам, с структурой пути id форума/id топика/ пост id

?

Это утяжелит запрос к БД. И все равно не поможет ориентироваться в файлах.

 

 

// $row['checkbox'] = $row['new_topic'] ? '' : $this->checkbox($row['pid']);

$row['checkbox'] = $this->checkbox($row['pid']);[/code]

Может ну её нафик, первую строчку, раз есть вторая)?

Если уверен, что не захочешь откатить к состоянию, когда на первом сообщении топика нет чекбокса - тогда нафиг.

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

Так всё-таки насчёт массовых расстрелов. Это может иметь какие-либо негативные последствия)?

 

//У меня теперь новая игра. Найти и убить большой пост. Не дать БД подрасти)

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

Так всё-таки насчёт массовых расстрелов. Это может иметь какие-либо негативные последствия)?

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

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

У меня вроде dohtml в старых постах остался работать. (сейчас он уже просто отключен)

С мультиаттичами мод тоже работает.

 

Кнопочку "отметить все чекбоксы на странице" в панельке модера можешь сделать?)

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

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

Кнопочку "отметить все чекбоксы на странице" в панельке модера можешь сделать?)

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

С обоими вопросами засада. Буду думать.

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

Я у себя для начала вот так сделал.

Просто убрал кнопочку редактировать и удалить.

В Render Row после

$includerkey = "<span style='color:Gray;font-weight:bold'>[x]</span>";

Дописал

$post['delete_button'] = "";
$post['edit_button']= "";

 

Но конечно было бы круче, чтоб delete работала! :D

 

Подрубил БД уже на 4 метра. Радусь, что теперь можно сколько угодно текста пихать на форум) и жаба душить не будет.

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

Радусь, что теперь можно сколько угодно текста пихать на форум) и жаба душить не будет.

Ага.

А еще можно сархивировать сообщение, а потом по ФТП в файл залить громадный текст или ХТМЛ. Иногда бывает нужно или таблиц напихать сложнючих, или просто огромную портянку в шапку топика засунуть.

 

 

Доделал удаление архивов при удалении сообщений и топиков: уже работает и при удалении опциями модератора, и при удалении через панель модератора.

 

Сейчас доделаю чекбоксик "выделить все сообщения страницы", и перезалью обновленное поисание.

 

 

UPD:

Перезалил.

Чекбоксик "Выделить все сообщения страницы" пришлось сделать вверху, рядом с "Добавить новый опрос", чтобы избежать вложенных тегов <form>...

 

Сильно изменились файлы Moderate.php и modfunctions.php.

 

В скине сделал так, чтобы кнопки "редактировать" и "цитировать" не отображались в архивированных сообщениях.

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

айти: 

	if ($post['attach_id'] != "")
	{
		if (is_file($this->upload_dir."/".$post['attach_id']))
		{
			unlink ($this->upload_dir."/".$post['attach_id']);
		}
	}

Ниже добавить:


// +FatCat
$arc_path = ($post['pid']-$post['pid']%1000)/1000;
$arc_path = intval($arc_path)."/";
$arc_file = $post['pid']%1000;
$arc_file = intval($arc_file).".arc";

	if (is_file("arc/".$arc_path.$arc_file))
	{
		unlink ("arc/".$arc_path.$arc_file);
	}

// -FatCat

 

Где это искать? В какой функции? У меня там мод мультиаттачей стоит, по другому немного всё..

 

Файлы удаляются при удалении топика, но остаются при удалении единичного поста.

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

Где это искать? В какой функции? У меня там мод мультиаттачей стоит, по другому немного всё..
В файле Moderate.php в двух функциях есть удаление аттачей:

function delete_post()

function complete_deleting()

Я не стал изобретать велосипед, и добавил удаление архивов там, где сделано удаление аттачей.

 

 

Файлы удаляются при удалении топика, но остаются при удалении единичного поста.

А корзина у тебя установлена?

У меня за удаление поста из корзины отвечает function complete_deleting()

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

Нашёл. Фенкс.

Корзины нету.

 

Теперь такой глюк - если тема закрыта, то пишет что чекбоксами мы ничего не выбрали.

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

Теперь такой глюк - если тема закрыта, то пишет что чекбоксами мы ничего не выбрали.

Спасибо! Буду смотреть, разбираться.

 

UPD:

Сделал, чтобы работало не только в закрытых темах, но и в топиках с опросами.

Открывающий тег <form...> вместе с инпутом переехали из скина в Topic.php...

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

"Пометить все сообщения страницы" В закрытых топиках не работают тогда(

 

Если в топике есть опрос - нет вобще чекбокса.

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

"Пометить все сообщения страницы" В закрытых топиках не работают тогда(

 

Если в топике есть опрос - нет вобще чекбокса.

Проверяй:

 

1.

Кода

<form method='POST' style='display:inline' name='collect' action='{$ibforums->base_url}'>

вообще не должно быть в скиновом файле.

 

2.

Кода

{$ibforums->lang['select_all_checkbox']} <input name='allbox' type='checkbox' value='Check All' onclick='CheckAll();' />

вообще не должно быть в скиновом файле.

 

3. Topic.php

Вот функция с разметкой:

		if ($this->topic['poll_state'])
	{
		$this->output = str_replace( "<!--{IBF.POLL}-->", $this->parse_poll(), $this->output );
		// Если есть опрос - добавляем форму и чекбокс:
		$this->output = str_replace( "<!--{IBF.START_NEW_POLL}-->", "<form method='POST' style='display:inline' name='collect' action='{$ibforums->base_url}'>{$ibforums->lang['select_all_checkbox']} <input name='allbox' type='checkbox' value='Check All' onclick='CheckAll();' /> | ", $this->output );
		// Добавили
	}
	else
	{
		// Can we start a poll? Is this our topic and is it still open?

		if ( $this->topic['state'] != "closed" AND $ibforums->member['id'] AND $ibforums->member['g_post_polls'] AND $this->forum['allow_poll'] )
		{
			if ( 
				 ( ($this->topic['starter_id'] == $ibforums->member['id']) AND ($ibforums->vars['startpoll_cutoff'] > 0) AND ( $this->topic['start_date'] + ($ibforums->vars['startpoll_cutoff'] * 3600) > time() ) )
				 OR ( $ibforums->member['g_is_supmod'] == 1 )
			   )
			{
				// Добавляем в открытые топики без опросов
				$this->output = str_replace( "<!--{IBF.START_NEW_POLL}-->", "<form method='POST' style='display:inline' name='collect' action='{$ibforums->base_url}'>{$ibforums->lang['select_all_checkbox']} <input name='allbox' type='checkbox' value='Check All' onclick='CheckAll();' /> | ".$this->html->start_poll_link($this->forum['id'], $this->topic['tid']), $this->output );
			}
		}
	else{
			// Добавляем в закрытые топики
			$this->output = str_replace( "<!--{IBF.START_NEW_POLL}-->", "<form method='POST' style='display:inline' name='collect' action='{$ibforums->base_url}'>{$ibforums->lang['select_all_checkbox']} <input name='allbox' type='checkbox' value='Check All' onclick='CheckAll();' /> | ", $this->output );
		}
	}

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

Формы нормально выстроены. Только вот ява-скрипт отмечающий все чекбоксы находится в фун-ции start_poll_link, который выдаётся только в открытых топиках без опросов. Надо бы куда-нить перенести.

 

 

Там кстати есть такая фича - отметка highlight'ом и дарклайтом. Можно отмечать не область где находятся чекбоксы а пространство где показано сообщение?

 

Ещё--

Пропущено ARC_POSTZ тут

Найти:

 

$actions = array( 'MOVE_TOPIC', 'CLOSE_TOPIC', 'OPEN_TOPIC', 'DELETE_TOPIC', 'EDIT_TOPIC', 'PIN_TOPIC', 'UNPIN_TOPIC', 'UNSUBBIT', 'MERGE_TOPIC', 'SPLIT_TOPIC' );

 

Заменить на:

 

$actions = array( 'MOVE_TOPIC', 'CLOSE_TOPIC', 'OPEN_TOPIC', 'DELETE_TOPIC', 'EDIT_TOPIC', 'PIN_TOPIC', 'UNPIN_TOPIC', 'UNSUBBIT', 'MERGE_TOPIC', 'SPLIT_TOPIC', 'DELETE_POSTZ', 'MOVE_POSTZ', 'RECOMB_POSTZ', 'DEARC_POSTZ' );

 

____

Кнопка отметить все жжёт. Открываю все страницы топика, метра так на 2. Архивирую ]:->

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

Формы нормально выстроены. Только вот ява-скрипт отмечающий все чекбоксы находится в фун-ции start_poll_link, который выдаётся только в открытых топиках без опросов. Надо бы куда-нить перенести.

У меня скрипт переехал в function PageTop($data)

 

 

 

Там кстати есть такая фича - отметка highlight'ом и дарклайтом. Можно отмечать не область где находятся чекбоксы а пространство где показано сообщение?

Не понял, о чем это...

 

 

 

Ещё--

Пропущено ARC_POSTZ тут

Ага. У меня стоит мод oska, поэтому та строка не используется, вот и пропустил.

 

Еще раз подчистил инструкцию, спасибо за замечания!

 

И еще была проблема: открывающий тег <form...> выводился всем, а закрывающий только модераторам, что не есть гуд.

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

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

Ну вроде как про это...

cb.className = 'hlight';

cb.className = 'dlight';

Если отметить все чекбоксы - то вроде как подсветка появляется у них)

 

У меня скрипт переехал в function PageTop($data)

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

 

+=======

В скин-топик создаём новую функцию

function JavaSupMod(){
return <<<EOF

<script language='JavaScript' type="text/javascript">
<!--
ВЕСЬ наш жаба-скрипт
//-->
</script>
EOF;
}

 

в Топикс.php

 

Меняем

		if ($ibforums->member['g_is_supmod'] == 1)
	{
		$skcusgej = 1;

на

		if ($ibforums->member['g_is_supmod'] == 1)
	{
		$mod_links .= $this->html->JavaSupMod();
		$skcusgej = 1;

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

Если отметить все чекбоксы - то вроде как подсветка появляется у них)

Может быть у меня в Опере это не поддерживается...

Лень лазить в тормознутого и-эксплорера.

 

У меня архивация разрешена и обычным модерам.

Если не нужно грузить скрипт обычным мемберам, нет смысла создавать новую функцию в скине, можно вставить скрипт в function Mod_Panel - она открывается только модерам.

 

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

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

У меня Опера)

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

(Взвешивал после Оптимизации майАдмином)

 

постов   Вес		Дата
95,567  83.2 МБ 19.12.2007
95,692  81.5 МБ 20.12.2007
95,697  81.0 МБ 20.12.2007
95,947  80.7 МБ 21.12.2007
95,965  79.4 МБ 21.12.2007
96,396  68.6 МБ 23.12.2007

 

Мне теперь интресно - как архивировать темы, которые не открываются целиком, а виснут.

Примерно > 500 постов. Постранично долго.

Хочу скрипт постепенно идущий по всей таблице постов, и отправляющий всё в архив.

Скажем всё что старее одного года.

 

И ещё. Мы можем так сделать, чтобы не было обращения к ibf_post если файл сообщения имеется?

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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

Зарузка...

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

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

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