Понедельников НЕТ!
Регистрация или вход Регистрация или вход Избранное на этом сайте | Главная | Анкета | Рекомендовать | Обратная связь | В избранное | Сделать домашней
Скачать SSDForums
Скачать SSDForums 1.0.1 Скачать SSDForums 1.0.1
Скачать SSDForums 1.0.1 SP1 Скачать SSDForums 1.0.1 SP1
Скачать SSDForums 1.0.1 SP2 Скачать SSDForums 1.0.1 SP2
SSD Forums 1.0.1 SP3 only Slaed 3.5 Pro SSD Forums 1.0.1 SP3 only Slaed 3.5 Pro
SSD Forums 1.0.1 SP4-beta only Slaed 4.1 Pro SSD Forums 1.0.1 SP4-beta only Slaed 4.1 Pro
Jewelry Сase Team
Скачать Ruby Chat 0.1.1 Скачать Ruby Chat 0.1.1
Меню
Главная
Форум
Магазин цифровых товаров

Новости
Подписка на новости
Темы новостей
Добавить новость

Каталог файлов
Карта файлового архива
Публикации

Опросы
Анкета пользователя
Чат

BestMaker
Викторина
Архив новостей
Карманный оракул
Поиск по сайту с помощью Яндекс
Поиск по сайту с помощью Google
Фото дня
Для души
Погода на 3 дня
IndexCat
IndexTop
Map_Pages
Поиск по сайту









Подписка на новости
Ваше имя:
Ваш E-Mail:*
Секретный код:
Секретный код
Повторить:*
Интересное в сети

Sape — это система купли-продажи ссылок
с главных и внутренних страниц сайтов
[ 1 | 2 ] [>>]
Форум -> Обо всём... -> Внедрение тега Спойлер, как сделать? (тег spoiler)
Внедрение тега Спойлер, как сделать? (тег spoiler)
Vovich90 Дата: 18.11.2007, в 03:43 | Сообщение №1
Vovich90
Пользователь
Пользователь №: 32
Сообщений: 28

Привет всем! Помогите внедрить тег спойлера в систему. Спойлер используется для скрытия большого количиства текста от незрегистрированных пользователей (хотя это необязательно). Примеры можно увидить на многих форумах phpBB, IPB и т.д. (очень часто используется на torrent-трекерах ).

Так вот, я думаю очень многим эта функция понадобилась, т.к. зачасту при добавлении файлов (особенно музыки) хочется написать как можно больше текста, но это приведет к большому размеру, и неочень удобно для чтения. А так, спрятав под спойлер, пользователи смогут открывать и закрывать необходимый им текст.

Итак, нужно чтобы при использования тега [SPOILER=значение]текст[SPOILER], где значение - заголовок спойлера, текст автоматически прятался, чтобы его прочитать, нужно раскрыть спойлер. Я думаю для этого подойдет такойже скрипт, что используется для раскрывания блоков (на этом сайте), либо в модуле Video Catalog.

Буду признателен, если кто поможет это сделать.

Чтобы легче было понять, выкладываю скрин, как это должно выглядеть. http://img260.imageshack.us/img260/8583/primerspoilerzn2.th.jpg

Пример вложенных спойлеров: http://img204.imageshack.us/img204/7648/nfgnmgfmci3.th.jpg

ЗЫ: что-то превьюхи не показываются(

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно Serg_pnz 10.11.2009 г. в 18:18:25
Sunvas Дата: 18.11.2007, в 03:48 | Сообщение №2
Sunvas
Профи
Пользователь №: 181
Сообщений: 552

Собсно там все очень просто: по шаблону ищим SPOILERы в тексте и заменяем их таблицей со скрытым нижним дивом. При клике на таблицу делаем SwitchMenu([ид спойлера]). И всего-то.
Serg_pnz Дата: 18.11.2007, в 04:02 | Сообщение №3
Serg_pnz
Администратор
Пользователь №: 1
Сообщений: 2242

Vovich90, всё показывается, если юзать [img]http://www.www.ru[/img]

По поводу сплоера.
Как добавлять кнопку в бб-редактор я уже писал.
Значит первым шагом добавляем, а вторым - копируем функцию дешифровки тега цитаты, заточив её под свернуть/развернуть (тоже есть описание этих блоков)

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно Serg_pnz 18.11.2007 г. в 13:04:29

Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот
Vovich90 Дата: 18.11.2007, в 07:57 | Сообщение №4
Vovich90
Пользователь
Пользователь №: 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
Serg_pnz
Администратор
Пользователь №: 1
Сообщений: 2242

вот сюда
Код
1
id="pokaz6"
и в аналоги, что бы id был уникальным
Код
1
id="pokaz6 \ 1"


а про вложенные цитаты я уже писал.

и вообще тебе надо тогда шаманить не в первой части дешифровщика бб-тегов, а во второй, там, где идет обработка code, php, quote и hide

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно Serg_pnz 18.11.2007 г. в 18:43:01

Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот
Vovich90 Дата: 11.08.2008, в 00:33 | Сообщение №6
Vovich90
Пользователь
Пользователь №: 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
RockKenny
Активный участник
Пользователь №: 171
Сообщений: 232

Vovich90, так ты всетаки прикрутил спойлер для слаеда?

если да, сделай плз инструкцию.
Serg_pnz Дата: 11.08.2008, в 15:58 | Сообщение №8
Serg_pnz
Администратор
Пользователь №: 1
Сообщений: 2242

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
Serg_pnz
Администратор
Пользователь №: 1
Сообщений: 2242

Вариант 3. Описанные преобразования делать не на этапе сохранения в базу, а при генерации страницы. думаю, что так дольше, но если база уже набита, то не надо править таблицу.

Важное примечание: под id имеется ввиду id комментария, а не родительского файла.

Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот
RockKenny Дата: 11.08.2008, в 17:35 | Сообщение №10
RockKenny
Активный участник
Пользователь №: 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
Serg_pnz
Администратор
Пользователь №: 1
Сообщений: 2242

RockKenny, 1 - заслешить кавычки, 2 (не уверен) - использовать не одинарную кавычку, а &#039;

Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот
RockKenny Дата: 11.08.2008, в 21:11 | Сообщение №12
RockKenny
Активный участник
Пользователь №: 171
Сообщений: 232

с &#039; ваще ниче не вышло, а просто с ковыками вон какая жудть, причем тег спойлер не использовался в сообщении

http://img379.imageshack.us/img379/4379/83625367yz7.th.jpg

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно RockKenny 11.08.2008 г. в 21:14:02


Прикрепленные файлы:

Скачать: 12.77 KB
Serg_pnz Дата: 11.08.2008, в 22:00 | Сообщение №13
Serg_pnz
Администратор
Пользователь №: 1
Сообщений: 2242

RockKenny, ну а тут кто будет заслешивать квадратные скобки?
Код
1
$bb[] = "#[spoiler=(.*?)](.*?)[/spoiler]#is";

Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот
RockKenny Дата: 11.08.2008, в 23:05 | Сообщение №14
RockKenny
Активный участник
Пользователь №: 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
Serg_pnz
Администратор
Пользователь №: 1
Сообщений: 2242

Лучше это внедрить http://demos111.mootools.net/Accordion

Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот
RockKenny Дата: 11.08.2008, в 23:32 | Сообщение №16
RockKenny
Активный участник
Пользователь №: 171
Сообщений: 232

не спорю, но с моими знаниями...

мне только косметически поправить
http://fixshop.ru/index.php?name=Forums&op=showtopic&id=355&pagenum=1#2
Serg_pnz Дата: 12.08.2008, в 02:57 | Сообщение №17
Serg_pnz
Администратор
Пользователь №: 1
Сообщений: 2242

RockKenny, расставь свои стили внутри $html[]

Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот
RockKenny Дата: 12.08.2008, в 11:00 | Сообщение №18
RockKenny
Активный участник
Пользователь №: 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
RockKenny
Активный участник
Пользователь №: 171
Сообщений: 232

Serg_pnz, как сделать, что б у разных спойлеров разные id были? А то разворачиваются сразу все.

или лучше, чтоб спойлеру присваивался id сообщения?
Блин, для этого база нужна.... чеж делать?

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Отредактированно RockKenny 12.08.2008 г. в 11:26:24
Serg_pnz Дата: 12.08.2008, в 11:46 | Сообщение №20
Serg_pnz
Администратор
Пользователь №: 1
Сообщений: 2242

RockKenny, а может воспользоваться функцией генерации паролей? поставить эдак символов 15 - вот тебе и разные id

Не все кальсоны с оторванными пуговицами - брюки. © Serg_pnz
"...даме водки? Это чистый спирт!" © кот Бегемот

Вы не можете ответить в тему анонимно, пожалуйста, войдите или зарегистрируйтесь!


[ 1 | 2 ] [>>]
Реклама
Главная | Форум | Новости | Подписка на новости | Темы новостей | Добавить новость | Каталог файлов | Карта файлового архива | Публикации | Опросы | Анкета пользователя | Чат | BestMaker | Викторина | Архив новостей | Карманный оракул | Поиск по сайту с помощью Яндекс | Поиск по сайту с помощью Google | Фото дня | Для души | Погода на 3 дня | IndexCat | IndexTop | Map_Pages | Весь Оракул

Rambler's Top100

Генерация страницы: 0.288 сек. и 17 запросов к базе данных за 0.024 сек.
Web site engine code is Copyright © 2006 by SLAED CMS. All rights reserved.