EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

Интерактивное исправление ошибок на страницах сайта

 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB
Интерактивное исправление ошибок на страницах сайта
Автор Сообщение
corsar8888
Хостинг — это наше всё!
Хостинг — это наше всё!


Зарегистрирован: 01.01.2010
Сообщения: 280
Откуда: Новосибирск
12927 Монеты

СообщениеДобавлено: Пн, 22 Фев, 2010 16:48    Заголовок сообщения: Интерактивное исправление ошибок на страницах сайта Ответить с цитатой

Недавно встретил на сайте одну полезную функцию: интерактивное исправление ошибок.

"Если Вы обнаружили на странице ошибку, выделите мышью слово или фразу и нажмите сочетание клавиш Ctrl+Enter (подробнее)."

Выделяю, нажимаю, вылазиет окошко:
____________________________________
Сообщение об ошибке:

Выделен текст с ошибкой:
"выделенный текст"

в предложении:
"текст предложения"

Еще передать замечание:
"поле ввода"

"Отправить" | "Отменить"
_____________________________________

Пример того, о чём я пишу: http://www.scorcher.ru/art/cognition/cognition.php

Искал в поисковиках, каким образом можно реализовать эту функцию, но ничего не нашёл. Может, кто-нибудь из форумчан мне подскажет?

Заранее благодарен!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 4429

120354 Монеты

СообщениеДобавлено: Пн, 22 Фев, 2010 17:05    Заголовок сообщения: Ответить с цитатой

http://www.orphus.ru/
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
toltec-info
Два пингвина
Два пингвина


Зарегистрирован: 22.08.2008
Сообщения: 430

7971 Монеты

СообщениеДобавлено: Пн, 22 Фев, 2010 20:48    Заголовок сообщения: Ответить с цитатой

lazutov, она сильно будет тормозить загрузку страницы, не в курсе?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
[LP]LordPro.teus
Призрак Лорда
Призрак Лорда


Зарегистрирован: 26.07.2007
Сообщения: 5123

44732 Монеты

СообщениеДобавлено: Пн, 22 Фев, 2010 21:01    Заголовок сообщения: Ответить с цитатой

toltec-info
если так боитесь затормозить загрузку (хотя вероятнее - у вас слабый канал) - проксируйте скрипт
_________________

А ведь еще не поздно смотаться на Азовское море, согреться на солнышке...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2067
Откуда: Самара
11926 Монеты

СообщениеДобавлено: Пн, 22 Фев, 2010 21:41    Заголовок сообщения: Ответить с цитатой

toltec-info писал(а):
она сильно будет тормозить загрузку страницы, не в курсе?

Не сильно, размер скрипта 11 Кб, вот на лишних 11 Кб страница загрузится медленее.Другой вопрос, что ПОСЛЕ загрузки страницы нужно будет время, чтобы скрипт выполнился, но скорее всего это время будет незначительным по сравнению с загрузкой.
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
corsar8888
Хостинг — это наше всё!
Хостинг — это наше всё!


Зарегистрирован: 01.01.2010
Сообщения: 280
Откуда: Новосибирск
12927 Монеты

СообщениеДобавлено: Вт, 23 Фев, 2010 04:23    Заголовок сообщения: Ответить с цитатой

Цитата:
http://www.orphus.ru/

Спасибо, но это не то, что я ищу. Это ущербное подобие, да ещё и рекламу свою вешают.

Написал автору сайта, на котором расположен желанный скрипт (см выше), он ответил следующее:
Цитата:
...скрипт был разработан самостоятельно для сайта. Он предполагает
использование яваскрипта и серверного php-скрипта. То, что касается
ява-скрипта, доступно при сохранении страницы Как HML и там - самое главное, чем вы и можете воспользоваться. php - реализует второстепенную функцию.

Может быть, найдутся знающие люди и помогут мне вычленить из сайта скрипт и объяснить, что и как нужно сделать, чтобы он корректно заработал? Думаю, что этот скрипт будет очень полезен многим владельцам сайта.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2067
Откуда: Самара
11926 Монеты

СообщениеДобавлено: Вт, 23 Фев, 2010 12:15    Заголовок сообщения: Ответить с цитатой

Да это очень просто, в файл основной страницы напишите
Код:
<SCRIPT type=text/javascript>var sender_ip='203.97.178.76';var publisher_owner_id='0';</SCRIPT>
<SCRIPT type=text/javascript src="send_error.js"></SCRIPT>


правда как я понимаю строчка var sender_ip='203.97.178.76'; должна генерится php используя ip адрес пользователя (без генерации работать будет, но ip адрес будет левый, как генерить ip обяснять не буду это элементарно, см. инет).

Создайте файл send_error.js, в нем будет текст (в нем надо заменить строчку action=\"/error_sending/send_error.php на php скрипт обрабатывающей результаты или отправляющий результаты mail'om на нужный вам ящик, опять таки обяснять как написать элементарный php скрипт по отправки на почтовый ящик результатов заполнения формы не буду, тем более теме "полезные скрипты" этого форума похожий скрипт есть):


Код:

//Использование: <script type="text/javascript" src="/error_sending/send_error.js"></script>
// или include_once($my_DOCUMENT_ROOT."error_sending/client_send_error.php");
document.write("<font size=2><font size=4 color=red><b>!</font> <font color=#A300CC>Е</font><font color=#8100B1>с</font><font color=#630092>л</font><font color=#4B0066>и</font></b> Вы обнаружили на странице ошибку, выделите мышью слово или фразу и нажмите сочетание клавиш Ctrl+Enter (<a href='/error_sending/help.htm' target='_blank'>подробнее</a>).</font>\r\n");
document.write("<span id='unikum_id_error_span' ></span>\r\n");

//if(typeof(sender_ip)=='undefined')
//var sender_ip="не известен..";

//var sender_cook=m_getCookie('user_ident');



// для фиксации диалога внизу не зависимо от прокрутки
// !!!!! document.body.style.background = 'url(/;-)/n.gif) no-repeat';
document.body.style.backgroundAttachment = 'fixed';

//alert(sender_cook);

document.onkeypress= function selectedText(e)
{
with (this)
{
    var pressed=0;
    var we = null;
    if (window.event) we = window.event;
    else if (parent && parent.event) we = parent.event;
    if (we) {
      // IE & Opera
      pressed = we.keyCode==10 ||  // IE
        (we.keyCode == 13 && we.ctrlKey); // Opera
    } else if (e) {
      // NN
      pressed =
        (e.which==10 && e.modifiers==2) || // NN4
        (e.keyCode==0 && e.charCode==106 && e.ctrlKey) ||
        (e.keyCode==13 && e.ctrlKey) // Mozilla
    }
    if(!pressed)
      return;
 }


/////////////////////

var context = 0;
var text=0;
var selection=0;
if(parent.getSelection)// типа оперы
{
   text=parent.getSelection();
}
else
if (parent.document.getSelection)
{
   text = parent.document.getSelection();
   
}
else //
{
selection = parent.document.selection;
range = document.selection.createRange();
range.expand("sentence");// показывать все предложение
context=range.text;
//alert(range.text);return;   
}
//alert(text);
if(context==0)// выделение окружающего в мозиле
{
if (text.getRangeAt)
{
var contlen=60;
//var maxlen="256";

var range = text.getRangeAt(0);
textRange = range.toString();
var newRange = window.document.createRange();
newRange.setStartBefore(range.startContainer.ownerDocument.body);
newRange.setEnd(range.startContainer, range.startOffset);
pre = newRange.toString();
newRange = range.cloneRange();
newRange.setStart(range.endContainer, range.endOffset);
newRange.setEndAfter(range.endContainer.ownerDocument.body);
suf = newRange.toString();
//alert(suf);return;
var p;
var s = (p=textRange.match(/^(\s*)/)) && p[0].length;
var e = (p=textRange.match(/(\s*)$/)) && p[0].length;
pre = pre + textRange.substring(0, s);
suf = textRange.substring(textRange.length - e, textRange.length) + suf;
textRange = textRange.substring(s, textRange.length - e);

pre = stripSlashn(pre.substring(pre.length-contlen, pre.length).replace(/^\S{1,10}\s+/, ""));
suf = stripSlashn(suf.substring(0, contlen).replace(/\s+\S{1,10}$/,""));

context= pre+" ["+text+"] "+suf;

//alert(context);return;

}
}


if(selection)
{
var oSelTxt = document.selection.createRange();
text=oSelTxt.text;
}
//if(!text)
//{
//alert('Ваш просмотрщик не поддерживает возможноть получения выделенного текста...Используйте шаблон для вставки текста вручную, введя цитату между [quote] и [/quote]');
//return;
//}

text=""+text;// - только для оперы и фокса: они иначе не воспринимают text как объект :))))

//alert(text.length);

if(text.length>200)
{alert("Выделен слишком большой фрагмент, больше 200 символов.");return;}

if(text.length==0)
{alert("Пожалуйста, выделите фрагмент текста!.. :)\r\n\r\nЕсли он итак был выделен, значит Ваш просмотрщик не позволил его считать.\r\nВ этом случае, пожалуяста, скопируйте фрагмент с ошибкой в окошко ввода.");return;}

if(text.length<3)
{alert("Пожалуйста, выделите фрагмент побольше!.. :)");return;}

//if(confirm("Выделенный текст:\n_____________________________________\n"+text+"\n_____________________________________\n\nПослать сообщение об ошибке?"))
//send_error(text);  url_encode(context)

theExp = new RegExp('"', "g");

text=text.replace(theExp,"&quot;");
//text=text.replace(/"/g,"&quot;"); - тоже можно

if(context)
{   
context=""+context;
context=context.replace(theExp,"&quot;");
}


show_error_dlg(1,context,text);

}

///////////////////////////////////
function show_error_dlg(show,context,select)
{
if(show)
{
id='unikum_id_error'; //unikum_id_error_span
border="#000000";
bgcolor="#E4E4E4";
text="<center><b>Сообщение об ошибке:</b><center><form name=error_form action=\"/error_sending/send_error.php?publisher_owner_id="+publisher_owner_id+"\" target=\"_error_sending_\" method=post>Выделен текст с ошибкой:<br><span style=\"color: #ff0000; background-color: #febbb8;\">&quot"+select+"&quot</span><br>";
if(context) text+="<br>в предложении:<br><span style=\"background-color: #febbb8;\">&quot;"+context+"&quot;</span><br>";
text+="<br>Еще передать замечание:<br>\
<textarea name=\"comment\"  maxlength=\"1012\" rows=3 cols=80 style=\"FONT-FAMILY: Verdana, Arial;FONT-SIZE: 10px;\"></textarea><br>\
<input type=hidden name=\"error_referrer\" value=\""+top.document.location+"\">\
<input type=hidden name=\"error_URL\" value=\""+document.location+"\">\
<input type=hidden name=\"error_context\" value=\""+context+"\">\
<input type=hidden name=\"error_selected\" value=\""+select+"\">\
<input type=\"submit\" name=\"submit\" value=\"Послать сообщение об ошибке\" onclick=\"javascript:show_error_dlg(0,0,0)\" style=\"FONT-FAMILY: Verdana, Arial;FONT-SIZE: 10px;\">&nbsp;\
<input type=\"button\" name=\"cancel\" value=\"Отмена\" onclick=\"javascript:show_error_dlg(0,0,0)\"  style=\"FONT-FAMILY: Verdana, Arial;FONT-SIZE: 10px;\">\
</form>\r\n";

//<input type=hidden name=\"sender_ip\" value=\""+sender_ip+"\">\
//<input type=hidden name=\"sender_cook\" value=\""+sender_cook+"\">\

var element = document.getElementById(id+"_span");
var isOther=0;
if(window.opera || navigator.userAgent.indexOf("Firefox")>0)
var isOther=1;
document.sizeX=0;// самодельное свойство, иначе expression не воспринимает переменную
document.sizeY=0;
if(isOther)// не поддерживают expression() в стилях
{
strX="0";
strY="0";
}
else
{
strX="expression((document.body.clientWidth-document.sizeX)/2)";//+(document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft))";
strY="expression( (document.getElementsByTagName(\'body\')[0].scrollTop + document.getElementsByTagName(\'body\')[0].clientHeight) - document.sizeY)";
}
var content = '<div  id="error_dlg" style="position:absolute;border:solid 2px '+border+';display:none;padding:2px;Z-INDEX:1000;LEFT:'+strX+';TOP:'+strY+';font-size:16px;background-color:'+bgcolor+';">'+text+'</div>';   
element.innerHTML = content;
document.getElementById("error_dlg").style.display = 'block';
document.sizeY=document.getElementById("error_dlg").offsetHeight;
document.sizeX=document.getElementById("error_dlg").offsetWidth;

if(isOther)
{
document.getElementById("error_dlg").style.left=(document.body.clientWidth-document.sizeX)/2;
document.getElementById("error_dlg").style.top=(document.getElementsByTagName('body')[0].clientHeight) - document.sizeY;

var FixedElement = document.getElementById("error_dlg");
FixedElement.style.position="fixed";
}

}
else
   document.getElementById("error_dlg").style.display = 'none';

}


function stripSlashn(str)
{
    return ("" + str).replace(/[\r\n]+/g," ").replace(/^\s+|\s+$/g,"");
}

_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2067
Откуда: Самара
11926 Монеты

СообщениеДобавлено: Вт, 23 Фев, 2010 12:21    Заголовок сообщения: Ответить с цитатой

Eё обратите внимение что есть помощь на странице http://www.scorcher.ru/error_sending/help.htm её тоже можно перенести на ваш сайт.

Файл send_error.js положите в ту же папку что основная страница, файл help.htm в папку error_sending от корня сайта.
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
corsar8888
Хостинг — это наше всё!
Хостинг — это наше всё!


Зарегистрирован: 01.01.2010
Сообщения: 280
Откуда: Новосибирск
12927 Монеты

СообщениеДобавлено: Вт, 23 Фев, 2010 13:27    Заголовок сообщения: Ответить с цитатой

Попробовал, не работает. Что-то сделал не то. Confused

В тушку страницы вставил:
Код:
<?
$sender_ip=getenv("Remote_addr");
$publisher_owner_id="0";
?>
<SCRIPT type=text/javascript src="send_error.js"></SCRIPT>

sender_ip - IP-адрес отправителя
Так и не понял, что значит переменная "publisher_owner_id"

Создал в корне директорию "error_sending", в неё затолкал файлы "send_error.js" с неизменным содержанием и "send_error.php" со следующим содержанием:
Код:

mail('Моё_мыло@mail.ru', 'сообщение об ошибке', convert_cyr_string($_POST['publisher_owner_id'].':'.$_POST['target']));
echo 'Ваше сообщение отправлено администратору!';


Эффекта ноль. Что не так сделал?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2067
Откуда: Самара
11926 Монеты

СообщениеДобавлено: Вт, 23 Фев, 2010 19:40    Заголовок сообщения: Ответить с цитатой

corsar8888 писал(а):

Эффекта ноль. Что не так сделал?

тогда исправьте
<SCRIPT type=text/javascript src="send_error.js"></SCRIPT>
на
<SCRIPT type=text/javascript src="error_sending/send_error.js"></SCRIPT>

P.S. Не будет работать дайте ссылку на страницу
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
corsar8888
Хостинг — это наше всё!
Хостинг — это наше всё!


Зарегистрирован: 01.01.2010
Сообщения: 280
Откуда: Новосибирск
12927 Монеты

СообщениеДобавлено: Чт, 25 Фев, 2010 03:37    Заголовок сообщения: Ответить с цитатой

Нашёл другой скрипт: http://mistakes.ru/script/mistakes_dev

Цитата:
Модуль состоит из двух файлов: mistakes2.js и mistakes.php

Чтобы его подключить, нужно поместить эти файлы в директорию своего сайта, например в папку «mistakes» и на всех страницах сайта между тегами «head» вставить строку:

Код:
<script type="text/javascript" src="http://адрес_сайта/mistakes/mistakes2.js"></script>


Файл mistakes2.js
Код:
var loc = window.location;
var loc = window.location;
var mis;
nN = navigator.appName;

function getText(e)
{function winop()
{//Измените эту строку:
phploc = "http://адрес сайта/mistakes/mistakes.php";
windop = window.open
(phploc,"mywin","height=400,width=335");}
        if (!e) e= window.event;
        if((e.ctrlKey) && ((e.keyCode==10)||(e.keyCode==13)))
        {if(nN == 'Microsoft Internet Explorer')
{if(document.selection.createRange())
{var range = document.selection.createRange();
        mis = range.text;
winop();}}
else
{if (window.getSelection())
{mis = window.getSelection();
winop();}

else if(document.getSelection())
{mis = document.getSelection();
winop();}}
    return true;}
    return true;}

document.onkeypress = getText;


Файл mistakes.php
Код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
        <TITLE>Отправить ошибку</TITLE>
<?php
if($_POST['submit']) {
    # Заголовок сообщения - замените "yousite.ru" на имя своего сайта:
                $title = 'Сообщение об ошибке на сайте yousite.ru';
        $url = (trim($_POST['url']));
        $mis =  substr(htmlspecialchars(trim($_POST['mis'])), 0, 100000);
                $comment =  substr(htmlspecialchars(trim($_POST['comment'])), 0, 100000);
                $mess = '
                Адрес страницы: '.$url.'
                Ошибка: '.$mis.'
                Комментарий: '.$comment.'
                '.$_POST['mess'];
                # Email адрес, на который должны приходить сообщения:
        $to = 'youmail@mail.ru';
        # От кого пришло сообщение - можно указать имя сайта: 
        $from='yousite.ru';
        mail($to, $title, $mess, 'From: '.$from);
        echo '<br><br><br><center>Спасибо!<br>Ваше сообщение отправлено.<br><br><input type="button" value="Закрыть окно" onClick="window.close()"><br><br><br><a class="copyright" href="http://mistakes.ru/script/mistakes_dev" target="_blank" title="">© Ошибки.ru</a><center>';
exit();}
?>
<script language="JavaScript">
function readtxt()
{ p=opener
 if(p!=null)document.forms.mistake.url.value=p.loc
 if(p!=null)document.forms.mistake.mis.value=p.mis
}
</script>
</head>
<body onload=readtxt()>
<span class="text">
Адрес страницы :
 </span><br />
<form name="mistake" action="" method=post>
<input type="text" name="url" size="30"><br />
              Ошибка :<br />
              <textarea rows="5" name="mis" cols="30"></textarea><br />
              Комментарий :<br />
              <textarea rows="5" name="comment" cols="30"></textarea>
              <div style="margin-top: 7px"><input type="submit" value="Отправить" name="submit">
              </div>
</form>

</BODY></HTML>


Недостатки:
- в IE7 и IE8 с настройками по умолчанию всплывающее окошко блокируется
- нет ограничения на количество выделяемого текста (число символов)
- поля "Ошибка" и "Адрес страницы" доступны редактированию пользователю (спорный недостаток, дело вкуса)

Кто хочет проявить мастерство и доработать скрипт? Very Happy
P.S. Эти функции реализованы в первом скрипте (см. выше)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2067
Откуда: Самара
11926 Монеты

СообщениеДобавлено: Чт, 25 Фев, 2010 13:13    Заголовок сообщения: Ответить с цитатой

corsar8888 писал(а):

Недостатки:
- в IE7 и IE8 с настройками по умолчанию всплывающее окошко блокируется

Эээ, по моему с такими настройками будет заблокировано любое всплывающее окно, т.е. это неисправимо скорее всего

corsar8888 писал(а):

- нет ограничения на количество выделяемого текста (число символов)

А зачем оно надо? Ну отправит кто-то вам текст всей страницы и что плохого, может в этом есть какой-то смысл (например, ложные сведения на всей странице)?
Если действительно надо, смотрите аттрибут maxlength у элементов формы

corsar8888 писал(а):

поля "Ошибка" и "Адрес страницы" доступны редактированию пользователю (спорный недостаток, дело вкуса)

Добавьте тегам <input ... > и <textarea...> аттрибут readonly, пример: <input type="text" readonly> и тогда пользователь не сможет их редактировать.
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
corsar8888
Хостинг — это наше всё!
Хостинг — это наше всё!


Зарегистрирован: 01.01.2010
Сообщения: 280
Откуда: Новосибирск
12927 Монеты

СообщениеДобавлено: Чт, 25 Фев, 2010 16:24    Заголовок сообщения: Ответить с цитатой

Веденин писал(а):
Если действительно надо, смотрите аттрибут maxlength у элементов формы

На сколько я знаю, textarea не поддерживает аттрибут maxlength, в отличие от input. Есть какой-то другой способ. Пробовал ограничить количество символов на стороне сервера, не получилось, плюнул. Пусть будет так, как есть.

Веденин писал(а):
Добавьте тегам <input ... > и <textarea...> аттрибут readonly, пример: <input type="text" readonly> и тогда пользователь не сможет их редактировать.

Я решил эту задачу тем же способом, спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB Часовой пояс: GMT
Страница 1 из 1

 


Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group