[Spoiler Tag Mod] Тэг для скрытия спойлеров в сообщении

Автор DestroyNet, 17 сентября 2005, 08:36:23

« назад - далее »

0 Пользователи и 4 гостей просматривают эту тему.

DestroyNet

Spoiler Tag

сначала надо установить Быстрый парсинг

Добавляет в код теги [spoiler=your title]text[/spoiler]

Автор: Anguz

Avdenago


STRAIKER


dodther

Скачал этот мод. поставил его на 1.1.4  он работает. усе норм. но вот тока кроме админа никто не видит спойлеры. ставил разрешения смотреть их для всех. все равно никто не видит :( мож кто знает в чем проблема??

dodther

копался копался и выяснил что если закоментировать в файле subs.php
if(!allowedTo('spoiler_show'))
return '';


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

dodther


bbaaxx

а я коментирую if(!allowedTo('spoiler_show'))      return ''; и у меня пропадает вообще из всех тем сплойеры :(
в чем проблема может быть? а так все так же, только админы могут смотреть сплойеры, а при создании обычным пользователем темы со сплойером выходит ошибка.

Шаннар


dodther

Цитата: Шаннар, 2:463/587 от 03 апреля 2008, 00:14:58
Отчего не использовать мод Cut Text, собственно?
http://www.simplemachines.ru/index.php/topic,1800.0/all.html

вот млин. этоже тот же спойлер :) по названию ни в жизнь бы не догадался.
спасиб за подсказку

bbaaxx


MagicFly

#10
http://custom.simplemachines.org/mods/index.php?mod=195

Подскажите плз как в вышеуказанном спойлере реализовать следующее:
1. чтобы работал спойлер в спойлере
2. чтобы когда даешь название спойлеру [sрoiler=название], то в конечном виде показывало только название, а не Spoiler: название done
3. в каком куске кода переименовывается сам тэг? (например, хочу [offtop]) done
4. убрать необходимость выставления прав на просмотр спойлера (чтобы сразу был виден всем)
5. рамка содержимого спойлера (body) тянется на всю ширину экрана, не в зависимости от длины текста - как сделать это для названия спойлера (header), чтобы он тоже тянулся на всю ширину (как в phpbb3)? пробовал в css-ке ставить width: 100% - не работает
6. как прикрутить + - (плюс-минус) сбоку названия спойлера, чтобы менялось в зависимости от того закрыт или открыт спойлер, в текстовом или графическом виде?

Пока вроде все. Заранее спасибо за ответы.


wthawk

Цитата: MagicFly от 10 апреля 2009, 14:36:52

4. убрать необходимость выставления прав на просмотр спойлера (чтобы сразу был виден всем)

Я честно говоря не разобрался как права выставлять =( Помогите пожалуйста

MagicFly

Цитата: wthawk от 26 апреля 2009, 23:23:28
Я честно говоря не разобрался как права выставлять =( Помогите пожалуйста

Администрирование - Права доступа - выставляешь для каждой группы (внизу слева Show Spoilers и Post Spoilers).

Drakonsa


MagicFly

Цитата: MagicFly от 10 апреля 2009, 14:36:52
http://custom.simplemachines.org/mods/index.php?mod=195

Подскажите плз как в вышеуказанном спойлере реализовать следующее:
1. чтобы работал спойлер в спойлере
2. чтобы когда даешь название спойлеру [sрoiler=название], то в конечном виде показывало только название, а не Spoiler: название done
3. в каком куске кода переименовывается сам тэг? (например, хочу [offtop]) done
4. убрать необходимость выставления прав на просмотр спойлера (чтобы сразу был виден всем)
5. рамка содержимого спойлера (body) тянется на всю ширину экрана, не в зависимости от длины текста - как сделать это для названия спойлера (header), чтобы он тоже тянулся на всю ширину (как в phpbb3)? пробовал в css-ке ставить width: 100% - не работает
6. как прикрутить + - (плюс-минус) сбоку названия спойлера, чтобы менялось в зависимости от того закрыт или открыт спойлер, в текстовом или графическом виде?

Пока вроде все. Заранее спасибо за ответы.

up

Особенно интересует 1й пункт. И еще чтобы сам тэг можно было расположить в любой части текста, а не только с нового абзаца, куда он сам автоматом становится.

Controller

Цитата: MagicFly от 10 апреля 2009, 14:36:52
2. чтобы когда даешь название спойлеру [sрoiler=название], то в конечном виде показывало только название, а не Spoiler: название done
Подскажи, как ты это сделал... Я так понимаю это в Subs.php?
"НанЭл" - форум под напряжением

Shuranov

Немного подскажу, вчера писал себе пару подобных модификаций.
1. Сокрытие сообщений от пользователей по количеству набранных сообщений
2. Персональные сообщения прямо в теле поста

В виде мода не оформлял, в админке никакого управления нет, да и необходимости для себя не увидел.
Как это сделать?
1. Sources/Subs.php
Перемещаемся в самый конец функции parse_bbc
Перед строкой
Цитироватьreturn $message;
добавляем код:
Цитировать
        #Spoiler tag by Shuranov
        preg_match_all('|\[spoiler=([0-9]+)\](.*)\[/spoiler\]|U', $message, $arr, PREG_OFFSET_CAPTURE);
        $iCount = count($arr[1]);
        for($i = 0; $i < $iCount; $i++) {
                if($user_info['posts'] < $arr[1][$i][0]) {
                        $message = substr($message, 0, $arr[2][$i][1]).substr($message, $arr[2][$i][1]+strlen($arr[2][$i][0]));
                        for($j = $i+1; $j < $iCount; $j++) {
                                $arr[2][$j][1] -= strlen($arr[2][$i][0]);
                        }
                }
        }

       
        $message = preg_replace('|(\[spoiler=([0-9]+)\])(.*)(\[/spoiler\])|U', '<div class="spoiler"><i>Скрытый текст. Для просмотра сообщения у вас должно быть не менее $2 сообщений. <b>У вас '.$user_info['posts'].' сообщений</b></i><hr> $3</div>', $message);

         #PM tag by Shuranov
preg_match_all('|\[pm=([^\]]+)\](.*)\[/pm\]|U', $message, $arr, PREG_OFFSET_CAPTURE);
        $iCount = count($arr[1]);
        for($i = 0; $i < $iCount; $i++) {
      $values = explode(';', $arr[1][$i][0]);
      if(!in_array($user_info['username'], $values) && !in_array($user_info['name'], $values)) {
                        $message = substr($message, 0, $arr[2][$i][1]).substr($message, $arr[2][$i][1]+strlen($arr[2][$i][0]));
                        for($j = $i+1; $j < $iCount; $j++) {
                                $arr[2][$j][1] -= strlen($arr[2][$i][0]);
                        }
                }
        }

        $message = preg_replace('|(\[pm=([^\]]+)\])(.*)(\[/pm\])|U', '<div class="spoiler"><i>Скрытый текст. Личное сообщение для <b>$2</b></i><hr> $3</div>', $message);

2. Themes/default/Post.template.php
Перед строкой
Цитироватьif (!empty($context['smileys']['postform']))

ставим следующий код:
Цитироватьecho '<script language="JavaScript" type="text/javascript">
      function addSpoiler() {
         var iMessages = parseInt(prompt("Введите количество сообщений необходимых для просмотра"));
         if(isNaN(iMessages) || iMessages < 1) {
            return;
         }

         surroundText(\'[spoiler=\' + iMessages + \']\', \'[/spoiler]\', document.forms.', $context['post_form'], '.', $context['post_box_name'], ');
      }

      function PersonalM() {
         var sNick = prompt("Введите имена участников, разделяя точкой с запятой: \";\"");
         if(!sNick.length) {
            return;
         }

         surroundText(\'[pm=\'+sNick+\']\', \'[/pm]\', document.forms.', $context['post_form'], '.', $context['post_box_name'], ');
      }
   </script>';

   echo '<tr>
      <td></td>
      <td><input type="button" value="Spoiler" onClick="addSpoiler()"><input type="button" value="PM" onClick="PersonalM();"</td>
   </tr>';

И в Themes/default/style.css добавляем оформление:
Цитировать.spoiler {
   border: 1px dashed gray;
   background-color: #ffd35e;
}

Собственно все, время установки пара минут. До установки рекомендую сделать копии файлов, на всякий случай, но проблем быть не должно ни на одной версии 1.1.x SMF.

Посмотреть как это работает можно на моем форуме: Здесь в конце страницы. Если я ошибся темой, то извиняюсь и прошу администрацию перенести пост по нужному адресу.

Beer

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

Subaru

Приветы.
Пробую поставить на Форум спойлер скрывающий/открывающий текст.
Видел два варианта: Spoiler Tag Mod и CutText mod.
Оба варианта понравились, но по некоторым причинам больше подходит первый мод, поэтому решил отписаться здесь.
После установки мода на Форуме в самом верху выводятся сообщения об ошибках:
Notice: Undefined index: spoiler_tag_text in /var/www/pokernnru/data/www/poker.nn.ru/forum/Sources/Subs.php on line 953
Notice: Undefined index: spoiler_tag_click_info in /var/www/pokernnru/data/www/poker.nn.ru/forum/Sources/Subs.php on line 954
Notice: Undefined index: spoiler_tag_text in /var/www/pokernnru/data/www/poker.nn.ru/forum/Sources/Subs.php on line 953
Notice: Undefined index: spoiler_tag_click_info in /var/www/pokernnru/data/www/poker.nn.ru/forum/Sources/Subs.php on line 954

вот кусок соответсвующего кода из файла Subs.php
/*
   Styles:
   3: button
   2: link
   1: hover (default)
   */
   $retval = '';

   switch($position)
    {
      case 'before':
         switch($settings['spoiler_tag'])
            {
            case 3:
               $retval = (
                  '<div class="spoiler"><div class="spoilerheader">'.
                  '<input type="button" class="spoilerbutton" value="'.$txt['spoiler_tag_text'].$topic.'" '.
                  'onclick="n = this.parentNode.parentNode.lastChild;if(n.style.display == \'none\') {n.style.display = \'block\';} else {n.style.display = \'none\';} return false;"/> '.
                  $txt['spoiler_tag_click_info'].'</div><div class="spoilerbody" style="display: none">'
               );
            break;

            case 2:
               $retval = (
                  '<div class="spoiler"><div class="spoilerheader">'.
                  '<a href="javascript:void(0)" '.
                  'onclick="n = this.parentNode.parentNode.lastChild; if(n.style.display == \'none\') { n.style.display = \'block\'; } else {   n.style.display = \'none\';   } return false;">'.$txt['spoiler_tag_text'].$topic.'</a> '.
                  $txt['spoiler_tag_click_info'].'</div><div class="spoilerbody" style="display: none">'
               );
            break;

            case 1:
            default:
               $retval = (
                  '<fieldset class="spoiler" '.
                  'onmouseover="this.lastChild.style.display = \'block\';" onmouseout="this.lastChild.style.display=\'none\'">'.
                  '<legend><b>'.$txt['spoiler_tag_text'].$topic.'</b> <small>'.$txt['spoiler_tag_hover_info'].'</small>'.
                  '</legend><div class="spoilerbody" style="display: none">'
               );
         }
        break;

      case 'after':
         switch($settings['spoiler_tag'])
            {
            case 3:
            case 2:
               $retval = (
                  '</div></div>'
               );
            break;

            case 1:
            default:
               $retval = (
                  '</div></fieldset>'
               );
                   
         }
         break;
   }
   return $retval;
}


Строки 953 и 954 это - 
'onclick="n = this.parentNode.parentNode.lastChild;if(n.style.display == \'none\') {n.style.display = \'block\';} else {n.style.display = \'none\';} return false;"/> '.
                  $txt['spoiler_tag_click_info'].'</div><div class="spoilerbody" style="display: none">'

Причем, сам мод несмотря на ошибки - работает нормально...
В чем может быть проблема? Можно ли просто убрать сообщения об ошибках или это не правильно?

Попробовал также установить мод CutText mod
Также сверху Форума появляются ошибки:
Notice: Undefined index: CutText_ReadMore in /var/www/pokernnru/data/www/poker.nn.ru/forum/Sources/Subs.php on line 1173
Notice: Undefined index: CutText_before in /var/www/pokernnru/data/www/poker.nn.ru/forum/Sources/Subs.php on line 1180
Notice: Undefined index: CutText_after in /var/www/pokernnru/data/www/poker.nn.ru/forum/Sources/Subs.php on line 1180

Вот кусок кода из Subs.php

$codes = array(
array(
'tag' => 'cut',
'before' => '<div><div class="quoteheader"><a href="javascript:void(0)" onClick="n = this.parentNode.parentNode.lastChild; if(n.style.display == \'none\') { n.style.display = \'block\'; } else { n.style.display = \'none\'; } return false;">'.$txt['CutText_ReadMore'].'</a></div><div style="display: none"><div class="quote">',
'after' => '</div></div></div>',
'block_level' => true,
),
array(
'tag' => 'cut',
'type' => 'unparsed_equals',
'before' => '<div><div class="quoteheader"><a href="javascript:void(0)" onClick="n = this.parentNode.parentNode.lastChild; if(n.style.display == \'none\') { n.style.display = \'block\'; } else { n.style.display = \'none\'; } return false;">'.$txt['CutText_before'].'$1'.$txt['CutText_after'].'</a></div><div style="display: none"><div class="quote">',
'after' => '</div></div></div>',
'block_level' => true,
),


Строка 1173 -
'before' => '<div><div class="quoteheader"><a href="javascript:void(0)" onClick="n = this.parentNode.parentNode.lastChild; if(n.style.display == \'none\') { n.style.display = \'block\'; } else {   n.style.display = \'none\';   } return false;">'.$txt['CutText_ReadMore'].'</a></div><div style="display: none"><div class="quote">',

Строка 1180 -
'before' => '<div><div class="quoteheader"><a href="javascript:void(0)" onClick="n = this.parentNode.parentNode.lastChild; if(n.style.display == \'none\') { n.style.display = \'block\'; } else {   n.style.display = \'none\';   } return false;">'.$txt['CutText_before'].'$1'.$txt['CutText_after'].'</a></div><div style="display: none"><div class="quote">',

Хотя моды разные, ошибка как я понимаю одна и та же.  :(

Обязателен ли для работы этих модов быстрый парсинг? Пробовал ставить эти моды на Денвере, все работает без ошибок и безо всякого парсинга.
Спасибо всем кто попытается помочь.

P.S. Версия SMF 1.1.11

Шаннар

Цитата: Subaru от 12 февраля 2010, 12:51:35
Хотя моды разные, ошибка как я понимаю одна и та же.  :(

И описана она в FAQ раздела. Просто добавь перевод переменных — и всё должно заработать.

Subaru

#21
Спасибо. Действительно все получилось.
В папке forum/Themes/default/languages  модифицировал файл - Modifications.russian.php
Добавил туда следующие строки:
//Used by: Spoiler tag
$txt['spoiler_tag_text'] = '';
$txt['spoiler_tag_click_info'] = '';

Все заработало.  Как оказывается мало нужно человеку для счастья. :D
Премного благодарен Шаннару.