Сайт сообщества | Клуб пользователей | О проекте

Имя
Пароль
ПравилаРегистрацияСправка
Сообщения за деньПоиск

Вернуться   Клуб пользователей портальной системы RUNCMS > Опен Ресурс > Разработчикам > Готовые хаки

 
 
Опции темы Опции просмотра
Zormax вне форума Zormax
Старожил

Аватар для Zormax

| Цитировать Старый #1 05-06-2009, 21:51

Хак добавляющий спойлер (Spoiler) в BB-коды.
Только для тех версий порталов, что не имеют этот BB-код.

Спойлер - это возможность разместить компактно большу часть информации, которую можно показать по кнопке Show/Hide

Работает на любой версии портала и браузера с учетом мини оперы.

Принцип:
Выделяем текст что хотим свернуть, нажимаем кнопку спойлера, далее будет окно в котором предложат ввести название спойлера, если не вводить, то будет стандартное "Spoiler"

Начинаем:

1. Кнопку spoiler.gif кладем в \images\editor\

2. В файле стилей вашей темы прописываем новые стили:

Код:
.spoiler {
margin-top: 0.5em;
margin-bottom: 1em;
}
.spoiler .title {
font-size: 100%;
font-weight: bold;
display: block;
float: left;
}
.spoiler .title:after {
content: ' ';
}
.spoiler input {
font-size: 70%;
}
.spoiler .content {
border: 1px dashed black;
padding: 0.5em;
margin-top: 0.5em;
white-space: nowrap;
}

3. В глобальном языковом файле global.php что находится по адресу: \www\language\russian
прописываем:

define("_SPL","Спойлер");
ну и для английского языкового файла:
define("_SPL","Spoiler");


4. Открываем файл: \www\include\scripts.js
где нибудь в конце добавляем две функции:

Код:
function spoilerCODE(spoiler) {
var e = spoiler.parentNode.getElementsByTagName('div')[1];
if (spoiler.value == 'Show') {
e.style.display = '';
spoiler.value = 'Hide';
} else {
e.style.display = 'none';
spoiler.value = 'Show';
}
}
Код:
function xoopsCodeSpl(id) {
var maxchars    = 128;
var dom  = $(id);
var text = prompt("Введите название спойлера (Enter spoiler name), 128 max.", "");
if ( text != null && text != "" && maxchars != 0 && text.length < maxchars ) {
var bbopen = "[spoiler=" + text + "]";
} else {
var bbopen = "[spoiler=Spoiler]";
}
var bbclose = "[/spoiler]";
insertBB(dom, bbopen, bbclose);
storeCaret(dom);
}
P.S. Возможно у вас старая версия файла "scripts.js",
проверьте есть ли в вашем файле для имеющихся BB-кодов, такие упоминания:
insertBB(dom, bbopen, bbclose);
storeCaret(dom);

Если есть, то все хорошо, ваш файл корректно поддерживает все браузеры, если нет, то готовый файл возьмите из новой версии рони.

5. Открываем файл: \www\include\common.php
где нибудь в конце добавляем:

PHP код:
    if (strstr(trim(_HTTP_USER_AGENT), "Opera Mini")) {
    
define('_MINI_OPERA'TRUE);
    } else {
    
define('_MINI_OPERA'FALSE);
    } 

6. Открываем файл: \www\class\module.textsanitizer.php
внутри функции "xoopsCodeDecode" добавляем:

PHP код:
$patterns[]     = "/\[spoiler=([^\"']*)](.*)\[\/spoiler\]/isU";
if (
_MINI_OPERA) {
$replacements[] = '\\1:<div class="spoiler">\\2</div>';
} else {
$replacements[] = '<div class="spoiler"><div class="title">\\1:&nbsp;</div><input type="button" id="spoiler" value="Show" onClick=\'spoilerCODE(this);\' /><div class="content" id="spoiler" style="display: none">\\2</div></div>';


7. Некоторые исправления в этом же файле: \www\class\module.textsanitizer.php
нам нужно поменять порядок обработки смайлов и BB-кодов, чтобы если в названии сплойера есть смайл, то он корректно обрабатывался.
также сменив порядок обработки, мы в дальнейшем улучшаем обработку и других BB-кодов имеющих внутри параметр, например тега URL
в файле ниже ищем две функции:

sanitizeForDisplay
и
sanitizeForPreview

и меняем внутри них местами:

if ($allow_smileys == 1) {
$text = $this->smiley($text);
}


и

if ($allow_bbcode == 1) {
$text = $this->xoopsCodeDecode($text, $allow_html);
}


т.е. первой должна идти обработка "bbcode" и только потом за ней "smileys"


8. Открываем файл: \www\class\xoopsform\formdhtmltextarea.php
и добавляем вывод кнопки:

PHP код:
$ret .= " <a href='javascript:justReturn();'><img src='".XOOPS_URL."/images/editor/spoiler.gif' alt='"._SPL."' onclick='xoopsCodeSpl(\"".$this->getName()."\");' /></a>"

P.S. Возможно что у вас он не сработает, это связано с тем, что файл "scripts.js" кешируется браузером, почистите кеш.

P.S.S. Когда начал писать эту инструкцию, то я еще не знал что в версии 1.6 рони уже есть спойлер. )))
Посмотрел я его и мой больше понравился. )))

Хак by Zormax
Вложения
Тип файла: zip spoiler_hack.zip (3.3 Кбайт, 10 просмотров)


Всё для Sony Ericsson
Посетить домашнюю страницу Zormax
  Сообщения: 2,424 c 15.05.2004 | Репутация: 149
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Рейтинг@Mail.ru Хостинг провайдер Majordomo. Powered by: vBulletin Version 3.0
Copyright ©2000-2024, Jelsoft Enterprises Ltd.
Все разделы прочитаны - Руководство форума - Архив - Вверх
Rambler's Top100
Output: 127.39 Kb. compressed to 125.39 Kb. by saving 2.00 Kb. (1.57%)
Page generated in 0.08787 seconds with 12 queries