Форум -> Обо всём... -> Внедрение тега Спойлер, как сделать? (тег spoiler) |
Внедрение тега Спойлер, как сделать? (тег spoiler) |
---|
Vovich90 | Дата: 18.11.2007, в 03:43 | Сообщение №1 |
  ПользовательПользователь №: 32 Сообщений: 28
 | Привет всем! Помогите внедрить тег спойлера в систему. Спойлер используется для скрытия большого количиства текста от незрегистрированных пользователей (хотя это необязательно). Примеры можно увидить на многих форумах phpBB, IPB и т.д. (очень часто используется на torrent-трекерах ).
Так вот, я думаю очень многим эта функция понадобилась, т.к. зачасту при добавлении файлов (особенно музыки) хочется написать как можно больше текста, но это приведет к большому размеру, и неочень удобно для чтения. А так, спрятав под спойлер, пользователи смогут открывать и закрывать необходимый им текст.
Итак, нужно чтобы при использования тега [SPOILER=значение]текст[SPOILER], где значение - заголовок спойлера, текст автоматически прятался, чтобы его прочитать, нужно раскрыть спойлер. Я думаю для этого подойдет такойже скрипт, что используется для раскрывания блоков (на этом сайте), либо в модуле Video Catalog.
Буду признателен, если кто поможет это сделать.
Чтобы легче было понять, выкладываю скрин, как это должно выглядеть. 
Пример вложенных спойлеров: 
ЗЫ: что-то превьюхи не показываются(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Отредактированно Serg_pnz 10.11.2009 г. в 18:18:25 |
|
|
Sunvas | Дата: 18.11.2007, в 03:48 | Сообщение №2 |
  ПрофиПользователь №: 181 Сообщений: 554
 | Собсно там все очень просто: по шаблону ищим SPOILERы в тексте и заменяем их таблицей со скрытым нижним дивом. При клике на таблицу делаем SwitchMenu([ид спойлера]). И всего-то. |
|
|
Serg_pnz | Дата: 18.11.2007, в 04:02 | Сообщение №3 |
  АдминистраторПользователь №: 1 Сообщений: 2243
 | Vovich90, всё показывается, если юзать [img]http://www.www.ru[/img]
По поводу сплоера.
Как добавлять кнопку в бб-редактор я уже писал.
Значит первым шагом добавляем, а вторым - копируем функцию дешифровки тега цитаты, заточив её под свернуть/развернуть (тоже есть описание этих блоков)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Отредактированно Serg_pnz 18.11.2007 г. в 13:04:29 | Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот |
|
|
Vovich90 | Дата: 18.11.2007, в 07:57 | Сообщение №4 |
  ПользовательПользователь №: 32 Сообщений: 28
 | Для одиночного спойлера получилось, а вот со вложенными нет(
Вот мой код (для 2.1 Лайт) файл sources.php
PHP - Код | 1 2 3 4 5 6
| <?php //Спойлер $bb[] = "#[spoiler=(.*?)](.*?)[/spoiler]#is"; $html[] = "<table width="90%" border="0" cellspacing="1" cellpadding="3"><div id="cont"><tr><th onclick="SwitchMenu('pokaz4');SwitchMenu('pokaz5');SwitchMenu('pokaz6');" style="cursor:pointer;" nowrap="nowrap"><div align="left" id="pokaz5" style="display:block;"><img src="images/icon_plu.gif" align="bottom"> \1</div><div align="left" id="pokaz6" style="display:none;"><img src="images/icon_min.gif" align="bottom"> \1</div></th></tr></div><tr><td><div id="pokaz4" style="display:none;">\2</div></td></tr></table>"; //Спойлер ?> |
как сделать, чтобы вложенные работали? |
|
|
Serg_pnz | Дата: 18.11.2007, в 09:40 | Сообщение №5 |
  АдминистраторПользователь №: 1 Сообщений: 2243
 | вот сюда и в аналоги, что бы id был уникальным
а про вложенные цитаты я уже писал.
и вообще тебе надо тогда шаманить не в первой части дешифровщика бб-тегов, а во второй, там, где идет обработка code, php, quote и hide
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Отредактированно Serg_pnz 18.11.2007 г. в 18:43:01 | Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот |
|
|
Vovich90 | Дата: 11.08.2008, в 00:33 | Сообщение №6 |
  ПользовательПользователь №: 32 Сообщений: 28
 | Всем привет, это опять я. Решил поднять данный вопрос снова, только теперь хочу сделать этот хак на ас 4.х. Там способ фильтрации бб-кодов немного изменился и у меня есть несколько вопросов.
Для начала приведу код, который я вставил в function/function.php (как я понял только в этом файле идет обработка бб-тэгов):
1800 строка
PHP - Код | 1 2 3
| <?php if (preg_match("#\[spoiler\](.*?)\[/spoiler\]#si", $sourse)) $sourse = encode_spoiler($sourse); ?> |
1824 строка - чем заменяется тэг
PHP - Код | 1 2 3 4 5 6 7 8 9 10 11 12
| <?php # Format spoiler function encode_spoiler($text) { $spid = time().mt_rand(0,1024); $start_html = "<div class=\"sp-wrap\"><div id=\"cont\" class=\"sp-head\" OnClick=\"SwitchMenu('".$spid."')\"><img src=\"images/misc/icon_plus.gif\"> "._SPOILER."</div><div id=\"".$spid."\" class=\"sp-body\" style=\"display:none;\">"; $end_html = "</div></div>"; while (preg_match("#\[spoiler\](.*?)\[/spoiler\]#si",$text)) { $text = preg_replace("#\[spoiler\](.*?)\[/spoiler\]#si", "".$start_html."\\1".$end_html."", $text); } return $text; } ?> |
2308 строка - сама кнопка (по этому куску нет вопросов, привожу на всякий пожарный)
PHP - Код | 1 2 3
| <?php $code .= "<div class=\"editorbutton\" OnMouseOver=\"this.className='editorbuttonover';\" OnMouseOut=\"this.className='editorbutton';\" OnClick=\"InsertCode('spoiler', '', '', '', '".$id."')\"><img src=\"".img_find("editor/quote")."\" title=\""._ESPOILER."\"></div>"; ?> |
Итак вот первые 2 вопроса:
1. Когда вкладываю спойлер в спойлер, то вложенный спойлер имеет тотже $spid что и основной. Как сделать чтобы всем вложенным спойлерам (не ограниченное кол-во) присваивался разный $spid ?
2. Если в одном комментарии или посте вставить несколько спойлеров, то опять же они имеют один и тот же $spid . Вопрос аналогичный предыдущему. |
|
|
RockKenny | Дата: 11.08.2008, в 14:17 | Сообщение №7 |
  Активный участникПользователь №: 171 Сообщений: 232
 | Vovich90, так ты всетаки прикрутил спойлер для слаеда?
если да, сделай плз инструкцию. |
|
|
Serg_pnz | Дата: 11.08.2008, в 15:58 | Сообщение №8 |
  АдминистраторПользователь №: 1 Сообщений: 2243
 | 2. id спойлера делаем зависимым от номера поста
1. id внутренних - есть id всего поста плюс приписка по внутреннему счетчику.
Т.е.
1. Верстаем
[spoiler=#][/spoiler]
[spoiler=#][/spoiler]
При чем # - это именно символ решетки или какой-то другой хитрый знак.
2. Заносим в базу и узнаем номер последнего id (пусть будет 935), занесенного в базу. Достаем тот последний внесенный пост (или предварительно позаботясь сохраним его в tmp-переменной, так даже лучше) и меняем решетки на номер, т.е. получим
[spoiler=935][/spoiler]
[spoiler=935][/spoiler]
3. Считаем количество спойлеров и порядковые номера дописываем через дефис, получится что-то вроде
[spoiler=935-1][/spoiler]
[spoiler=935-2][/spoiler]
4. Обновляем запись в базе с id=935 с учетом внесенных номеров сплойеров.
Вариант 2. Всё тоже самое, но контролировать сие на яваскрипт еще на этапе верстки, но боюсь, что алгоритм будет намного сложнее.
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Отредактированно Serg_pnz 11.08.2008 г. в 19:43:59 | Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот |
|
|
Serg_pnz | Дата: 11.08.2008, в 16:02 | Сообщение №9 |
  АдминистраторПользователь №: 1 Сообщений: 2243
 | Вариант 3. Описанные преобразования делать не на этапе сохранения в базу, а при генерации страницы. думаю, что так дольше, но если база уже набита, то не надо править таблицу.
Важное примечание: под id имеется ввиду id комментария, а не родительского файла. | Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот |
|
|
RockKenny | Дата: 11.08.2008, в 17:35 | Сообщение №10 |
  Активный участникПользователь №: 171 Сообщений: 232
 | что надо поправить, чтоб работало в 2,5?
PHP - Код | 1 2 3 4 5 6
| <?php //Спойлер $bb[] = "#[spoiler=(.*?)](.*?)[/spoiler]#is"; $html[] = "<table width="90%" border="0" cellspacing="1" cellpadding="3"><div id="cont"><tr><th onclick="SwitchMenu('pokaz4');SwitchMenu('pokaz5');SwitchMenu('pokaz6');" style="cursor:pointer;" nowrap="nowrap"><div align="left" id="pokaz5" style="display:block;"><img src="images/icon_plu.gif" align="bottom"> \1</div><div align="left" id="pokaz6" style="display:none;"><img src="images/icon_min.gif" align="bottom"> \1</div></th></tr></div><tr><td><div id="pokaz4" style="display:none;">\2</div></td></tr></table>"; //Спойлер ?> |
|
|
|
Serg_pnz | Дата: 11.08.2008, в 19:50 | Сообщение №11 |
  АдминистраторПользователь №: 1 Сообщений: 2243
 | RockKenny, 1 - заслешить кавычки, 2 (не уверен) - использовать не одинарную кавычку, а ' | Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот |
|
|
RockKenny | Дата: 11.08.2008, в 21:11 | Сообщение №12 |
  Активный участникПользователь №: 171 Сообщений: 232
 | с ' ваще ниче не вышло, а просто с ковыками вон какая жудть, причем тег спойлер не использовался в сообщении

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Отредактированно RockKenny 11.08.2008 г. в 21:14:02
Прикрепленные файлы:
 Скачать: 12.77 KB |
|
|
Serg_pnz | Дата: 11.08.2008, в 22:00 | Сообщение №13 |
  АдминистраторПользователь №: 1 Сообщений: 2243
 | RockKenny, ну а тут кто будет заслешивать квадратные скобки?
Код | 1
| $bb[] = "#[spoiler=(.*?)](.*?)[/spoiler]#is"; |
| Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот |
|
|
RockKenny | Дата: 11.08.2008, в 23:05 | Сообщение №14 |
  Активный участникПользователь №: 171 Сообщений: 232
 | теперь работает но выглядит отвратно.
PHP - Код | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?php //Спойлер $bb[] = "#\[spo\](.*?)\[/spo\]#is"; $html[] = "<table width=\"100%\" height=\"5\" border=\"0\" cellspacing=\"1\" cellpadding=\"1\" class=\"bgcolor4\"> <div id=\"cont\"><tr> <th onclick=\"SwitchMenu('pokaz74');SwitchMenu('pokaz5');SwitchMenu('pokaz76');\" style=\"cursor:pointer;\" nowrap=\"nowrap\"> <div id=\"pokaz75\" style=\"display:block;\"><div align=\"left\">Спойлер</div></div> <div id=\"pokaz76\" style=\"display:none;\"><div align=\"left\">Спойлер</div></div> </th></tr></div> <tr><td class=\"bgcolor1\"><div id=\"pokaz74\" style=\"display:none;\">\\1</div> </td></tr> </table>"; "<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\"><tr><td width=\"1\" height=\"1\" class=\"bgcolor1\"></td></tr></table>"; //Спойлер ?> |
|
|
|
Serg_pnz | Дата: 11.08.2008, в 23:14 | Сообщение №15 |
  АдминистраторПользователь №: 1 Сообщений: 2243
 | Лучше это внедрить http://demos111.mootools.net/Accordion | Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот |
|
|
RockKenny | Дата: 11.08.2008, в 23:32 | Сообщение №16 |
  Активный участникПользователь №: 171 Сообщений: 232
 | не спорю, но с моими знаниями...
мне только косметически поправить
http://fixshop.ru/index.php?name=Forums&op=showtopic&id=355&pagenum=1#2 |
|
|
Serg_pnz | Дата: 12.08.2008, в 02:57 | Сообщение №17 |
  АдминистраторПользователь №: 1 Сообщений: 2243
 | RockKenny, расставь свои стили внутри $html[] | Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот |
|
|
RockKenny | Дата: 12.08.2008, в 11:00 | Сообщение №18 |
  Активный участникПользователь №: 171 Сообщений: 232
 | наконец сделал, вот код спойлера для 2,5
PHP - Код | 1 2 3 4 5 6 7 8 9 10
| <?php //Спойлер2 $bb[] = "#\[spo\](.*?)\[/spo\]#is"; $html[] = " <div align=\"center\"> <table width=\"100%\" cellspacing=\"1\" cellpadding=\"3\" border=\"0\" align=\"center\" class=\"bgcolor4\"> <th class=\"bgcolor1\" onclick=\"SwitchMenu('pokaz74');SwitchMenu('pokaz5');SwitchMenu('pokaz76');\" style=\"cursor:pointer;\" nowrap=\"nowrap\"><div align=\"left\">Спойлер</div></th> <tr class=\"bgcolor1\"> <td><div id=\"pokaz74\" style=\"display:none;\">\\1</div></td></tr></table>"; //Спойлер2 ?> |
|
|
|
RockKenny | Дата: 12.08.2008, в 11:18 | Сообщение №19 |
  Активный участникПользователь №: 171 Сообщений: 232
 | Serg_pnz, как сделать, что б у разных спойлеров разные id были? А то разворачиваются сразу все.
или лучше, чтоб спойлеру присваивался id сообщения?
Блин, для этого база нужна.... чеж делать?
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Отредактированно RockKenny 12.08.2008 г. в 11:26:24 |
|
|
Serg_pnz | Дата: 12.08.2008, в 11:46 | Сообщение №20 |
  АдминистраторПользователь №: 1 Сообщений: 2243
 | RockKenny, а может воспользоваться функцией генерации паролей? поставить эдак символов 15 - вот тебе и разные id | Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот |
|
|
|
Вы не можете ответить в тему анонимно, пожалуйста, войдите или зарегистрируйтесь!
|