| yura3d | 
					
						 Отправлено: 16 августа 2009 — 19:54          
					 | 
				 
				
					
	        			
  
						  
        				ExBB Team ExBB Developer ExBB Mods Author 
        				 
  
        				Покинул форум 
        				Сообщений всего: 3394 
        				Дата рег-ции: Февр. 2009  
        				 Откуда: Минск, Беларусь 
						Репутация: 353 
        				 
        				 
         				 
        				  
					 | 
					Borman пишет:Опросник на главной форума!?   
Честно говоря, возможность достаточно специфическая и не думаю что многим пригодится. Опросы на форумах обычно сопроваждаются полемикой и дискуссиями в соответствующих темах, где, собственно, эти опросы и размещаются. Ведь очень часто бывает, что предложенных вариантов недостаточно или человек хочет проголосовать за несколько вариантов, ровно как и высказать свою точку зрения в теме опроса 
 
Borman пишет:А может сделать возможность вывода нужного опроса из какой либо темы на главную, добавив в скрипте "создания опроса" строку "вывести на главную страницу" и установив галочку. Причем опрос должен быть только один, т.е. если попытаться вывести больше, то выводится только последний последний а предыдущие возвращаются в свои темы.   
А вот этот вариант мне уже нравится больше. Только слегка его подкорректируем, в итоге получив такие возможности: 
- На главную страницу форума можно вынести один опрос из любой темы форума
 - Вынесенный на главную страницу опрос продолжает размещаться в своей теме (для наглядности)
 - Рядом с вынесенным на главную страницу опросом размещается ссылка на тему опроса (на случай, если голосующий захочет продолжить обсуждение вопроса)
 
 Реализация описанных возможностей (Отобразить)Вот набросал минут за 15    
Открываем файл  include/common.php, находим строку:
 CODE:define("FM_SEARCH_EXC",		"data/search_exc.php");  
И после неё размещаем строку:
 CODE:define("FM_MAINPOLL",		"data/mainpoll.php");  
Теперь открываем файл  index.php, находим строку:
 CODE:$allforums = array_filter($fm->_Read(FM_ALLFORUMS),"Filter_Cat");  
После неё добавляем строки:
 CODE:// Main Page Poll Mod by yura3d (http://www.exbb.org/) 
$poll_html = (($mainpoll = $fm->_Read(FM_MAINPOLL)) && $mainpoll) ? poll($mainpoll[0], $mainpoll[1]) : '';  
Далее в этом же файле находим строки:
 CODE:	$todayvisit = sprintf($fm->LANG['TodayVisit'], $today['guests'] + $members + $hiddens, $today['guests'], $members, 
		($hiddens) ? sprintf($fm->LANG['HiddensOnline'], $hiddens) : '', ($was) ? '<br>'.implode(', ', $was) : ''); 
}  
После них добавляем строки:
 CODE:// Main Page Poll Mod by yura3d (http://www.exbb.org/) 
function poll($forum_id,$topic_id) { 
		global $fm, $allforums; 
 
		$pollfile = 'forum'.$forum_id.'/'.$topic_id.'-poll.php'; 
		if (!file_exists($pollfile)) return ''; 
		 
		$topic = reset($fm->_Read('forum'.$forum_id.'/'.$topic_id.'-thd.php')); 
		 
		$fm->_GetModerators($forum_id, $allforums); 
		$_icon['divider']	= ($fm->exbb['text_menu'] === TRUE) ? ' : ' : ''; 
		$_icon['edit']		= ($fm->exbb['text_menu'] === TRUE) ? $fm->LANG['IconEdit']		: '<img src="./templates/'.DEF_SKIN.'/im/'.DEF_LANG.'/edit.gif" title='.$fm->LANG['IconEdit'].' alt='.$fm->LANG['IconEdit'].' border="0">'; 
		$_icon['del']		= ($fm->exbb['text_menu'] === TRUE) ? $fm->LANG['IconDel']		: '<img src="./templates/'.DEF_SKIN.'/im/'.DEF_LANG.'/delete.gif" border="0">'; 
 
		$poll_data = $fm->_Read($pollfile,FALSE); 
 
		if (!$poll_data['pollname'])  $poll_data['pollname'] = $topic['name']; 
 
		$poll_title = $poll_data['pollname']; 
 
		$moderlinks = $pollch = $do = ''; 
		if ($fm->user['id'] ===0) 
			$pollch = '<tr><td>'.$fm->LANG['PollNeedLogin'].'</td></tr>'; 
		elseif (isset($poll_data['ids'][$fm->user['id']]) || $topic['state'] == 'closed') { 
			foreach ($poll_data['choices'] as $choice) { 
					$pid    = $choice[0]; 
					$ptext  = $choice[1]; 
					$votes  = $choice[2]; 
					if (!$ptext) continue; 
 
					$percent = ($votes == 0) ? 0 : $votes / $poll_data['votes'] * 100; 
					$percent = sprintf( '%.2f' , $percent ).'%'; 
					$width   = ($percent > 0) ? (int) $percent * 2 : 0; 
					include('./templates/'.DEF_SKIN.'/poll_data.tpl'); 
			} 
			$do = '<b>'.$fm->LANG['VoteCount'].$poll_data['votes'].'</b>'; 
		} else { 
				foreach ($poll_data['choices'] as $choice) { 
						$pid    = $choice[0]; 
						$ptext  = $choice[1]; 
						if (!$ptext) continue; 
 
						include('./templates/'.DEF_SKIN.'/poll_view.tpl'); 
				} 
				$do = '<input type="submit" name="submit" value="'.$fm->LANG['Vote'].'" class="button" />'; 
		} 
		$edit = '<a href="postings.php?action=poll&forum='.$forum_id.'&topic='.$topic_id.'">'.$_icon['edit'].'</a>'.$_icon['divider']; 
		$del  = '<a href="postings.php?action=poll&delpoll=yes&savepoll=yes&forum='.$forum_id.'&topic='.$topic_id.'">'.$_icon['del'].'</a>'; 
		$moderlinks = ($fm->_Moderator === TRUE) ? '<a href="postings.php?action=mainpoll&forum='.$forum_id.'&topic='.$topic_id.'">'.$fm->LANG['MainPagePollOff'].'</a> '.$edit.' '.$del : null; 
 
		include('./templates/'.DEF_SKIN.'/poll.tpl'); 
		unset($poll_data,$pollch); 
		return '<br />'.$poll_html.'<center>'.$fm->LANG['MainPagePollTopic'].' <a href="topic.php?forum='.$forum_id.'&topic='.$topic_id.'">'.$topic['name'].'</a></center>'; 
}  
Далее открываем файл  topic.php, находим строку:
 CODE:$topic['poll']		= (isset($topic['poll'])) ? TRUE : FALSE;  
И заменяем её строкой:
 CODE:$topic['poll']		= (isset($topic['poll'])) ? $topic['poll'] : FALSE;  
Затем в этом же файле находим строку:
 CODE:if ($topic['poll']) $poll_html = poll($forum_id,$topic_id);  
И после неё размещаем строку:
 CODE:	else $poll_html = '';  
Далее в этом же файле находим строку:
 CODE:$pin = ($topic['pinned'] === TRUE) ? '<option value="unpin">'.$fm->LANG['UnPin'].'</option>' : '<option value="pin">'.$fm->LANG['Pin'].'</option>';  
И после неё размещаем строки:
 CODE:// Main Page Poll Mod by yura3d (http://www.exbb.org/) 
	$mainpoll		= $fm->_Read(FM_MAINPOLL); 
	$mainpoll_html	= ($topic['poll']) ? '<option value="mainpoll">'.(($mainpoll && $mainpoll[0] == $forum_id && $mainpoll[1] == $topic_id) ? $fm->LANG['MainPagePollOff'] : $fm->LANG['MainPagePollSet']).'</option>' : '';  
Теперь открываем файл  postings.php, находим строки:
 CODE:case 'addpoll'		:	addpoll(); 
							break;  
И после них размещаем строки:
 CODE:case 'mainpoll':		mainpoll(); 
							break;  
Далее в этом же файле находим строку:
 CODE:$fm->_Message($fm->LANG['AdditionPoll'], $fm->LANG['PollAdded'], 'topic.php?forum='.$forum_id.'&topic='.$topic_id);  
И над ней размещаем строки:
 CODE:$list = $fm->_Read2Write($fp_list, 'forum'.$forum_id.'/list.php'); 
  $list[$topic_id]['poll'] = TRUE; 
  $fm->_Write($fp_list, $list);  
Затем в этом же файле находим строку:
 CODE:function poll_edit() {  
И над ней размещаем строки:
 CODE:// Main Page Poll Mod by yura3d (http://www.exbb.org/) 
function mainpoll() { 
	global $fm; 
	 
	$fm->_Intvals(array('forum', 'topic', 'postkey')); 
	 
	$fm->_GetModerators($fm->input['forum'], $fm->_Read(FM_ALLFORUMS)); 
	if ($fm->_Moderator !== TRUE) 
		die; 
	 
	$mainpoll = $fm->_Read2Write($fp_mainpoll, FM_MAINPOLL); 
	 
	if ($mainpoll && $mainpoll[0] == $fm->input['forum'] && $mainpoll[1] == $fm->input['topic']) 
		$mainpoll = array(); 
	else 
		if (file_exists('forum'.$fm->input['forum'].'/'.$fm->input['topic'].'-poll.php')) 
			$mainpoll = array($fm->input['forum'], $fm->input['topic']); 
		else 
			$fm->_Message($fm->LANG['MainPoll'], $fm->LANG['PollNotFound']); 
	 
	$fm->_Write($fp_mainpoll, $mainpoll); 
	 
	$fm->_Message($fm->LANG['MainPoll'], ($mainpoll) ? $fm->LANG['MainPollOk'] : $fm->LANG['MainPollNo'], 
		'topic.php?forum='.$fm->input['forum'].'&topic='.$fm->input['topic']. 
		(($fm->input['postkey']) ? '&postid='.$fm->input['postkey'].'#'.$fm->input['postkey'] : '')); 
}  
Далее открываем файл  language/russian/lang_front_forums.php и находим строку:
 CODE:$this->LANG['TopRestore'] = 'Восстановить тему';  
И после неё размещаем строки:
 CODE:$this->LANG['MainPagePollSet'] = 'Вынести опрос на главную страницу'; 
$this->LANG['MainPagePollOff'] = 'Убрать опрос с главной страницы';  
Затем в этом же файле ищем строки:
 CODE:$this->LANG['DeleteTopicOk'] = 'Тема успешно удалена!';  
И после неё размещаем строки:
 CODE: 
/* 
	main page poll 
*/ 
$this->LANG['MainPoll'] = 'Опрос на главной странице'; 
$this->LANG['MainPollOk'] = 'Опрос успешно вынесен на главную страницу'; 
$this->LANG['MainPollNo'] = 'Опрос успешно убран с главной страницы'; 
$this->LANG['PollNotFound'] = 'Опрос не найден';
  
Теперь открываем файл  language/russian/lang_front_all.php, находим строки:
 CODE:$this->LANG['YOUSEARCH'] = '<br>Вы искали "<b>%s</b>"<br>Красным выделены короткие слова, исключенные из поиска<br>';  
И после них размещаем строки:
 CODE: 
/* 
	main page poll 
*/ 
$this->LANG['Vote'] = 'Проголосовать'; 
$this->LANG['VoteCount'] = 'Всего проголосовало: '; 
$this->LANG['Poll']					= 'Опрос'; 
$this->LANG['PollNeedLogin']		= 'Для голосования и просмотра результатов опроса войдите или зарегистрируйтесь'; 
$this->LANG['IconEdit'] = 'Правка'; 
$this->LANG['IconDel'] = 'Удалить'; 
$this->LANG['MainPagePollOff'] = 'Убрать опрос с главной страницы'; 
$this->LANG['MainPagePollTopic'] = 'Основная тема опроса:';
  
Далее открываем файл  templates/ваш_скин/board_body.tpl, находим строки:
 
И над ней вставляем строку:
 
И, наконец, открываем файл  templates/ваш_скин/topic_options.php, находим строку:
 CODE:<option value="restore">{$fm->LANG['TopRestore']}</option>  
И заменяем её строкой:
 CODE:<option value="restore">{$fm->LANG['TopRestore']}</option>{$mainpoll_html}  
Ну вот и всё.    Надеюсь, все изменения описал и ничего не забыл. После установки данного мода в опциях модератора появится пункт  Вынести опрос на главную страницу. Выносить опросы могут только администраторы, супермодераторы и модераторы раздела, в котором находится тема с опросом   | 
				 
				
					|   | 
					
						
						 
					 | 
				 
			 
            			
				
					| Borman | 
					
						 Отправлено: 16 августа 2009 — 21:01          
					 | 
				 
				
					
	        			
  
						  
        				Full Member 
        				 
  
        				Покинул форум 
        				Сообщений всего: 182 
        				Дата рег-ции: Февр. 2009  
        				 Откуда: Украина, Донецк 
						Репутация: 3 
        				 
        				 
         				 
        				  
					 | 
					Установил, но при попытке вывести опрос выдал это 
CODE:Fatal error: Call to undefined function mainpoll() in /home/spdplast/public_html/fiatclub.dn.ua/forums/postings.php on line 60  (Отредактировано автором: 16 августа 2009 — 21:05)  | 
				 
				
					|   | 
					
						
						 
					 | 
				 
			 
            			
				
					| yura3d | 
					
						 Отправлено: 16 августа 2009 — 21:06          
					 | 
				 
				
					
	        			
  
						  
        				ExBB Team ExBB Developer ExBB Mods Author 
        				 
  
        				Покинул форум 
        				Сообщений всего: 3394 
        				Дата рег-ции: Февр. 2009  
        				 Откуда: Минск, Беларусь 
						Репутация: 353 
        				 
        				 
         				 
        				  
					 | 
					Borman пишет:Установил, но при попытке установить выдал это   
Проверьте ещё раз правильность изменений файла postings.php, в частности, этот этап: 
Спойлер (Отобразить)Затем в этом же файле находим строку: 
CODE:function poll_edit() {  
И над ней размещаем строки:
 CODE:// Main Page Poll Mod by yura3d (http://www.exbb.org/) 
function mainpoll() { 
	global $fm; 
	 
	$fm->_Intvals(array('forum', 'topic', 'postkey')); 
	 
	$fm->_GetModerators($fm->input['forum'], $fm->_Read(FM_ALLFORUMS)); 
	if ($fm->_Moderator !== TRUE) 
		die; 
	 
	$mainpoll = $fm->_Read2Write($fp_mainpoll, FM_MAINPOLL); 
	 
	if ($mainpoll && $mainpoll[0] == $fm->input['forum'] && $mainpoll[1] == $fm->input['topic']) 
		$mainpoll = array(); 
	else 
		if (file_exists('forum'.$fm->input['forum'].'/'.$fm->input['topic'].'-poll.php')) 
			$mainpoll = array($fm->input['forum'], $fm->input['topic']); 
		else 
			$fm->_Message($fm->LANG['MainPoll'], $fm->LANG['PollNotFound']); 
	 
	$fm->_Write($fp_mainpoll, $mainpoll); 
	 
	$fm->_Message($fm->LANG['MainPoll'], ($mainpoll) ? $fm->LANG['MainPollOk'] : $fm->LANG['MainPollNo'], 
		'topic.php?forum='.$fm->input['forum'].'&topic='.$fm->input['topic']. 
		(($fm->input['postkey']) ? '&postid='.$fm->input['postkey'].'#'.$fm->input['postkey'] : '')); 
}    | 
				 
				
					|   | 
					
						
						 
					 | 
				 
			 
            			
            			
				
					| yura3d | 
					
						 Отправлено: 16 августа 2009 — 21:37          
					 | 
				 
				
					
	        			
  
						  
        				ExBB Team ExBB Developer ExBB Mods Author 
        				 
  
        				Покинул форум 
        				Сообщений всего: 3394 
        				Дата рег-ции: Февр. 2009  
        				 Откуда: Минск, Беларусь 
						Репутация: 353 
        				 
        				 
         				 
        				  
					 | 
					Borman 
С этим модом есть 2 нюанса, о которых нужно упомянуть: 
- В некоторых темах после установки мода могут пропасть опросы, созданные методом добавления опроса в существующую тему. Этот баг связан с ошибкой в моде добавления опроса в существующую тему. Данный мод эту ошибку устраняет, но чтобы видеть опросы вновь, в админке в списке форумов напротив раздела, в котором есть темы с пропавшими опросами, нужно выбрать пункт Восстановить темы. Опросы можно также восстанавливать конкретно в какой-либо теме, выбрав пункт Восстановить тему в опциях темы. Разумеется, все результаты голосований будут полностью сохранены
 - После переноса темы с опросом, который вынесен на главную страницу, в другой раздел, опрос снимается с главной страницы (разумеется, без потери результатов голосования). Для вынесения его на главную страницу снова необходимо вновь выбрать пункт Вынести опрос на главную страницу в опциях темы. В будущем данный недочёт будет устранён
 
  | 
				 
				
					|   | 
					
						
						 
					 | 
				 
			 
            			
            			
            			
            			
				
					| yura3d | 
					
						 Отправлено: 17 августа 2009 — 12:37          
					 | 
				 
				
					
	        			
  
						  
        				ExBB Team ExBB Developer ExBB Mods Author 
        				 
  
        				Покинул форум 
        				Сообщений всего: 3394 
        				Дата рег-ции: Февр. 2009  
        				 Откуда: Минск, Беларусь 
						Репутация: 353 
        				 
        				 
         				 
        				  
					 | 
					electron пишет:симпатишно и удобно. спасибо. только можно как-нибудь ссылку на тему из которой опрос убрать из-под окна опроса и вставить вверх блока опроса, чтоб было типа "Опрос из темы ......." ?   
Можно, и так действительно будет нагляднее, реализация тут: 
Реализация (Отобразить)
Открываем файл  index.php, находим строку:
 CODE:$topic = reset($fm->_Read('forum'.$forum_id.'/'.$topic_id.'-thd.php'));  
И после неё добавляем строку:
 CODE:$fm->LANG['Poll'] = sprintf($fm->LANG['Poll'], '<a href="topic.php?forum='.$forum_id.'&topic='.$topic_id.'" style="text-decoration: underline;">'.$topic['name'].'</a>');  
Далее в этом же файле находим строку:
 CODE:return '<br />'.$poll_html.'<center>'.$fm->LANG['MainPagePollTopic'].' <a href="topic.php?forum='.$forum_id.'&topic='.$topic_id.'">'.$topic['name'].'</a></center>';  
И заменяем её строкой:
 CODE:return '<br />'.$poll_html;  
Теперь открываем файл  language/russian/lang_front_all.php, находим строку:
 CODE:$this->LANG['Poll']					= 'Опрос';  
И заменяем её строкой:
 CODE:$this->LANG['Poll']					= 'Опрос из темы %s';  
Также удаляем из этого файла за ненадобностью строку:
 CODE:$this->LANG['MainPagePollTopic'] = 'Основная тема опроса:';  
На этом всё, теперь блок с опросом будет иметь заголовок  Опрос из темы YYY, где  YYY - название темы, являющееся ссылкой на тему      
 
Borman пишет:Не хочу показаться бестактным, а можно что бы гостям был виден опрос, но в тоже время без регистрации не проголосовать, мож я не так выразился но думаю понять можно о чем я   
Спасибо!   
Гости могут видеть только вопрос, так задумано. Возможности видеть варианты ответов и результаты голосований, как и собственно голосовать, доступны только для зарегистрированных пользоватетелей 
 
Borman пишет:Еще вспомнил, где можно подкорректировать что бы мог опрос выводить только админ, без модераторов   
Реализация (Отобразить)В файле  index.php найдите строку:
 CODE:$fm->_GetModerators($forum_id, $allforums);  
И удалите за ненадобностью. Далее в этом же файле найдите строку:
 CODE:$moderlinks = ($fm->_Moderator === TRUE) ? '<a href="postings.php?action=mainpoll&forum='.$forum_id.'&topic='.$topic_id.'">'.$fm->LANG['MainPagePollOff'].'</a> '.$edit.' '.$del : null;  
И замените её строкой:
 CODE:$moderlinks = (defined('IS_ADMIN')) ? '<a href="postings.php?action=mainpoll&forum='.$forum_id.'&topic='.$topic_id.'">'.$fm->LANG['MainPagePollOff'].'</a> '.$edit.' '.$del : null;  
Затем откройте файл  topic.php, найдите строку:
 CODE:$mainpoll_html	= ($topic['poll']) ? '<option value="mainpoll">'.(($mainpoll && $mainpoll[0] == $forum_id && $mainpoll[1] == $topic_id) ? $fm->LANG['MainPagePollOff'] : $fm->LANG['MainPagePollSet']).'</option>' : '';  
И замените её строкой:
 CODE:$mainpoll_html	= (defined('IS_ADMIN')) ? '<option value="mainpoll">'.(($mainpoll && $mainpoll[0] == $forum_id && $mainpoll[1] == $topic_id) ? $fm->LANG['MainPagePollOff'] : $fm->LANG['MainPagePollSet']).'</option>' : '';  
Затем откройте файл  postings.php, найдите строки:
 CODE:$fm->_GetModerators($fm->input['forum'], $fm->_Read(FM_ALLFORUMS)); 
	if ($fm->_Moderator !== TRUE) 
		die;  
И замените их строками:
 CODE:if (!defined('IS_ADMIN')) 
		die;  
На этом всё      
 
P.S. Просьба к тем, кто более-менее дружит с фотошопом, нарисуйте кнопку Убрать (по аналогии с другими кнопками, типа Правка, Удалить и т.п.) для данного мода, чтобы можно было использовать её вместо длинной ссылки Убрать опрос с главной страницы | 
				 
				
					|   | 
					
						
						 
					 | 
				 
			 
            			
            			
            
					 |