BB-коды. PHP and JavaScript
Вопрос первый:
Вопрос по JavaScript. Как добавлять коды в поле ввода [COLOR="Red"]textarea[/COLOR]?
Я использовал следующий код:
[HTML]<a href="#" onClick="java script:onItalic();return(false);">
<img src="image/button/text_italics.jpg" name="text_italics">
</a>
.
<textarea name = "textarea" rows ="8" cols = "67">text</textarea>
.
.
<script language=JavaScript>
<!--
function onItalic() {
text=document.form.textarea.value;
x=prompt("Выделяемый текст","");
document.form.textarea.value= text + "" + x + "";
}
// или просто
function onItalic() {
text=document.form.textarea.value;
document.form.textarea.value= text + " ";
}
// -->
</script>
[/HTML]
Это, понятное дело, не самый лучший способ. Здесь, на CodeNet, используются немного другие функции. Что-то вроде:
[HTML]// выделенный текст в поле textarea присваиваем переменной “x”
if (empty(x)) {
document.errorForm.textError.value= text + " ";
} else {
document.errorForm.textError.value= text + "" + x + "";
}
[/HTML]
Вроде бы все просто, но мне, к сожалению, не попадались команды с помощью которых можно было ба выделенный текст в поле [COLOR="#ff0000"]textarea [/COLOR]присваиваем переменной. Please to help.
Вопрос второй:
Вопрос по замене bb-кодов на html-ные. С основными, типа – [noparse][br][url][/pre][/noparse], вопросов нет. Я просто задаю основные в массив с bb-кодами и соответствующими html далее выполняю следующее действие:
// массив bb-кодов$primaryB[]
// массив html-кодов $primaryH[]
// пример bb <-> html <-> <b>
// допустим основных у нас 20 и их количество записано в переменную $primaryPoll
// сам текст записан в переменной $text
for ($i = 1; $i <= $primaryPoll; $i++){
$text = str_replace("$primaryB[$i]", "$primaryH[$i]", $text);
}
?>
Все вопросы возникают со сложными bb-кодами. У меня есть идея как это сделать, но все же хотелось бы предварительно посоветоваться.
Идея следующая:
// сам текст записан в переменной $text
// сначала заменяем все основные(в том числе и закрывающие)
// если там что-то и останется после этого, то это только сложные коды
// соответственно…
$text = str_replace("]",'">', $text);
// далее идут два массива со сложными кодами
// массив bb-кодов$involvedB[]
// массив html-кодов $involvedH[]
// пример bb <-> html [url= <-> <a href="
// допустим основных у нас 10 и их количество записано в переменную $involvedPoll
// и далее замена
for ($i = 1; $i <= $involvedPoll; $i++){
$text = str_replace("$involvedB[$i]", "$involvedH[$i]", $text);
}
?>
Вроде все. Надеюсь, я не слишком много написал и достаточно доступно? Надеюсь, мне кто ни будь, поможет с моей проблемой, и посоветует чего ни будь толковое.
ну как всегда.
да я нашел пару твоих сообшений следующего содержания
мне надо создать ПРИМЕТИВНЫЙ редактор для админской странички, а WYSIWYG-редактор это значительно выше уровнем чем то что мне нужно
аха. я нашел эту функцию
[HTML]// Взятие крайних узлов выделения (корня — root и самых крайних "слева" и "справа" — start и end)
// на вход даем окно (т.е. iframe.contentWindow)
function get_selection_bounds(editor_window){
var range, root, start, end
if(editor_window.getSelection){ // Gecko, Opera
var selection = editor_window.getSelection()
// Выделение, вообще говоря, может состоять из нескольких областей.
// Но при написании редактора нас это не должно заботить, берем 0-ую:
range = selection.getRangeAt(0)
start = range.startContainer
end = range.endContainer
root = range.commonAncestorContainer
if(start.nodeName.toLowerCase() == "body") return null
// если узлы текстовые, берем их родителей
if(start.nodeName == "#text") start = start.parentNode
if(end.nodeName == "#text") end = end.parentNode
if(start == end) root = start
return {
root: root,
start: start,
end: end
}
}else if(editor_window.document.selection){ // MSIE
range = editor_window.document.selection.createRange()
if(!range.duplicate) return null
var r1 = range.duplicate()
var r2 = range.duplicate()
r1.collapse(true)
r2.moveToElementText(r1.parentElement())
r2.setEndPoint("EndToStart", r1)
start = r1.parentElement()
r1 = range.duplicate()
r2 = range.duplicate()
r2.collapse(false)
r1.moveToElementText(r2.parentElement())
r1.setEndPoint("StartToEnd", r2)
end = r2.parentElement()
root = range.parentElement()
if(start == end) root = start
return {
root: root,
start: start,
end: end
}
}
return null // браузер, не поддерживающий работу с выделением
}[/HTML]
еще осталось понять как ей пользоваться настраивать и тд