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. Просьба к тем, кто более-менее дружит с фотошопом, нарисуйте кнопку Убрать (по аналогии с другими кнопками, типа Правка, Удалить и т.п.) для данного мода, чтобы можно было использовать её вместо длинной ссылки Убрать опрос с главной страницы |
|
|
|