Скрипт добавляет к каждому комментарию дополнительные действия: **«Цитировать»**, **«Ответить»** и **«Жалоба»**, а для пользователей, имеющих права модератора, автоматически отображает дополнительные инструменты управления комментарием.
### Основные возможности
* **Цитирование выделенного текста** — позволяет выделить часть комментария и вставить её в форму ответа в формате
Код
`[quote=Имя]текст[/quote]`
* **Ответить** — выводит ссылку на стандартную страницу или форму ответа, используя системную переменную `$ANSWER_URL$`.
* **Жалоба** — отображается авторизованным пользователям для чужих комментариев.
* **IP-адрес** — модератор может открыть IP-адрес автора комментария.
* **Редактирование** — ссылка на редактирование комментария появляется только при наличии соответствующего пункта в панели модератора.
* **Удаление** — позволяет удалить комментарий с подтверждением действия.
* **Автоматическое отображение функций модератора** — ссылки «IP адрес», «Редактировать» и «Удалить» изначально скрыты и показываются JavaScript только в том случае, если соответствующие возможности присутствуют в `$MODER_PANEL$`.
### Как работает цитирование
При наведении на ссылку «Цитировать» функция `wQuote()` получает выделенный пользователем текст со страницы. После нажатия на ссылку `chitata()` добавляет его в поле сообщения:
Код
`[quote=Имя пользователя]Выделенный текст[/quote]`
Если пользователь ничего не выделил, вместо цитаты выводится предупреждение с предложением выделить текст.
### Удаление комментария
Функция `del_item(id)` сначала запрашивает подтверждение удаления. После подтверждения скрипт получает страницу сессии, извлекает значение `ssid` и отправляет POST-запрос через `_uPostForm`. После выполнения выводится уведомление:
**«Комментарий удален!»**
Такой подход использует внутренние механизмы uCoz и рассчитан на соответствующую структуру стандартного модуля комментариев.
### Управление панелью модератора
Интересная особенность этого старого решения заключается в том, что элементы управления модератора находятся в скрытом блоке `#wMODER$NUMBER$`.
JavaScript проверяет его содержимое:
- * если найдено `IP address` — показывается ссылка на IP;
- * если найдено `Редактировать` — появляется кнопка редактирования;
- * если найдено `Удалить` — появляется кнопка удаления.
Таким образом, один шаблон можно использовать как для обычных пользователей, так и для модераторов, не показывая служебные элементы тем, у кого нет соответствующих прав.
### Важный момент
Скрипт написан для старой структуры и API uCoz и использует такие функции, как `_uWnd`, `_uPostForm`, `del_item()` и системные переменные шаблона. Поэтому на современных шаблонах или после изменений в разметке uCoz отдельные части могут потребовать адаптации.
Несмотря на возраст, пример хорошо показывает, как средствами **uCoz + JavaScript + jQuery** можно было расширять стандартную систему комментариев без создания отдельного модуля.
- **Назначение:** расширение стандартных комментариев uCoz.
- **Технологии:** uCoz Template System, JavaScript, jQuery.
- **Функции:** цитирование, ответ, жалоба, просмотр IP, редактирование и удаление комментариев.
Код
<?if($CUR_USER_ID$ > 0)?><a href="javascript:chitata('$USERNAME$',selection);" onmouseover="wQuote()">Цитировать</a><?endif?>
<?if($ANSWER_URL$)?><a href="$ANSWER_URL$">Ответить</a><?endif?>
<?if($CUR_USER_ID$ > 0)?><?if($IS_OWN$ = 0)?><a href="/index/14-1-0-1" style="color:red;">Жалоба</a><?endif?><?endif?>
<?if($MODER_PANEL$)?> <a href="javascript://" onclick="prompt('IP address','$IP_ADDRESS$');return false;" id="wIP$NUMBER$" style="display:none;">ip адрес</a>
<a href="javascript://" rel="nofollow" onclick="new _uWnd('Ie',' ',-600,-200,{autosize:1,closeonesc:1,resize:0},{url:'/index/37-$ID$'});return false;" id="wEDIT$NUMBER$" style="display:none;">Редактировать</a>
<a href="javascript://" rel="nofollow" onclick="del_item($ID$); return false;" id="wDELETE$NUMBER$" style="display:none;">Удалить</a>
<div style="display:none;" id="wMODER$NUMBER$">$MODER_PANEL$</div>
<?endif?>
<script>
if ($('#wMODER$NUMBER$').text().indexOf('IP address') != -1) {
$('#wIP$NUMBER$').show();
}
if ($('#wMODER$NUMBER$').text().indexOf('Редактировать') != -1) {
$('#wEDIT$NUMBER$').show();
}
if ($('#wMODER$NUMBER$').text().indexOf('Удалить') != -1) {
$('#wDELETE$NUMBER$').show();
}
function del_item(id)
{
if (confirm('Вы подтверждаете удаление?')) {
$.get('/index/14-0-0-1', function (ssid)
{
_uPostForm('', {
type: 'POST',
data: {
a: '38',
s: id,
ssid: $('input[name="ssid"]', ssid).val()
},
url: '/index/'
});
_uWnd.alert('<b style="color:green">Комментарий удален!</b>', '', {
w: 222,
h: 77,
tm: 5555
});
});
}
}
function chitata(qname, text)
{
if (text != '') {
qname = qname.replace(/[\[\]]/g, '|');
parent.window.document.getElementById('message').focus();
parent.window.document.getElementById('message').value = parent.window.document.getElementById('message').value + ('[quote=' + qname.replace(/[\[\]]/g, '|') + ']' + text + '[/quote]\n');
} else {
_uWnd.alert('<b style="color:#c82626;">Выделите текст для цитирования</b>', '', {
w: 222,
h: 77,
tm: 5555
});
}
}
function paste(text, flag)
{
if (document.selection && flag) {
document.addform.message.focus();
document.addform.document.selection.createRange().text = text;
} else
document.addform.message.value = document.addform.message.value + text;
}
function wQuote()
{
if (window.getSelection) {
selection = window.getSelection().toString();
} else if (document.getSelection) {
selection = document.getSelection();
} else {
selection = document.selection.createRange().text;
}
}
</script>
<?if($ANSWER_URL$)?><a href="$ANSWER_URL$">Ответить</a><?endif?>
<?if($CUR_USER_ID$ > 0)?><?if($IS_OWN$ = 0)?><a href="/index/14-1-0-1" style="color:red;">Жалоба</a><?endif?><?endif?>
<?if($MODER_PANEL$)?> <a href="javascript://" onclick="prompt('IP address','$IP_ADDRESS$');return false;" id="wIP$NUMBER$" style="display:none;">ip адрес</a>
<a href="javascript://" rel="nofollow" onclick="new _uWnd('Ie',' ',-600,-200,{autosize:1,closeonesc:1,resize:0},{url:'/index/37-$ID$'});return false;" id="wEDIT$NUMBER$" style="display:none;">Редактировать</a>
<a href="javascript://" rel="nofollow" onclick="del_item($ID$); return false;" id="wDELETE$NUMBER$" style="display:none;">Удалить</a>
<div style="display:none;" id="wMODER$NUMBER$">$MODER_PANEL$</div>
<?endif?>
<script>
if ($('#wMODER$NUMBER$').text().indexOf('IP address') != -1) {
$('#wIP$NUMBER$').show();
}
if ($('#wMODER$NUMBER$').text().indexOf('Редактировать') != -1) {
$('#wEDIT$NUMBER$').show();
}
if ($('#wMODER$NUMBER$').text().indexOf('Удалить') != -1) {
$('#wDELETE$NUMBER$').show();
}
function del_item(id)
{
if (confirm('Вы подтверждаете удаление?')) {
$.get('/index/14-0-0-1', function (ssid)
{
_uPostForm('', {
type: 'POST',
data: {
a: '38',
s: id,
ssid: $('input[name="ssid"]', ssid).val()
},
url: '/index/'
});
_uWnd.alert('<b style="color:green">Комментарий удален!</b>', '', {
w: 222,
h: 77,
tm: 5555
});
});
}
}
function chitata(qname, text)
{
if (text != '') {
qname = qname.replace(/[\[\]]/g, '|');
parent.window.document.getElementById('message').focus();
parent.window.document.getElementById('message').value = parent.window.document.getElementById('message').value + ('[quote=' + qname.replace(/[\[\]]/g, '|') + ']' + text + '[/quote]\n');
} else {
_uWnd.alert('<b style="color:#c82626;">Выделите текст для цитирования</b>', '', {
w: 222,
h: 77,
tm: 5555
});
}
}
function paste(text, flag)
{
if (document.selection && flag) {
document.addform.message.focus();
document.addform.document.selection.createRange().text = text;
} else
document.addform.message.value = document.addform.message.value + text;
}
function wQuote()
{
if (window.getSelection) {
selection = window.getSelection().toString();
} else if (document.getSelection) {
selection = document.getSelection();
} else {
selection = document.selection.createRange().text;
}
}
</script>

Комментарии (0)
Присоединиться к обсуждению
Поделитесь мнением об этом материале — комментарий появится в списке слева сразу после отправки.