За последние 24 часа нас посетили 17549 программистов и 1282 робота. Сейчас ищут 1480 программистов ...

Модуль отметки ошибки на сайте и отправление админу.

Тема в разделе "JavaScript и AJAX", создана пользователем Prettynim, 14 май 2011.

  1. Prettynim

    Prettynim Активный пользователь

    С нами с:
    28 ноя 2009
    Сообщения:
    45
    Симпатии:
    0
    Адрес:
    Ставрополь
    Подскажите пожалуйста как сделать модуль для коррекции ошибок на сайте, в js не сильна, но есть уже работающий модуль для движка Drupal, а я хочу сделать аналог, только для обычного php сайта.
    Моя идея такова, что нужен код js, который при нажатии Ctrl+Enter будет просто открывать форму, и добавлять в поле формы кусочек выделенного элемента, и в общем то все, форма передает данные на сервер и посылается уведомление на почту.
    Из модуля для drupal я вытащила js код, но как его переписать для обычного сайт не могу понять.


    Код (Text):
    1.  
    2.  
    3. // $Id: spelling.js,v 1.1.2.1 2009/04/21 15:07:24 doq Exp $
    4.  
    5. var spelling = spelling || {};
    6.  
    7. spelling.autoAttach = function () {
    8.   new spelling.handler();
    9.  
    10.   // Show functionality description block.
    11.   var isKonqueror = -1 != navigator.userAgent.indexOf('Konqueror');
    12.   if (isKonqueror) {
    13.     // Workaround for Konqueror browser. Tested under Konqueror 3.5.
    14.     document.getElementById('block-spelling-0').style.display = 'block';
    15.   }
    16.   else {
    17.     $('#block-spelling-0').show();
    18.   }
    19. }
    20.  
    21. spelling.handler = function () {
    22.   var obj = this;
    23.   this.input = $(document);
    24.  
    25.   $(this.input)
    26.     .keydown(function (event) { return obj.onkeydown(event) });
    27. };
    28.  
    29. spelling.handler.prototype.onkeydown = function (e) {
    30.   if (!e) {
    31.     e = window.event;
    32.   }
    33.   // Enter and Ctrl.
    34.   if (13 == e.keyCode && e.ctrlKey) {
    35.     var selection = (parent.getSelection) ? parent.getSelection() : ((parent.document.getSelection) ? parent.document.getSelection() : ((document.selection.createRange) ? document.selection.createRange().text : null));
    36.     if (!selection || '' == selection) {
    37.       // TODO I think there should be some error handling if browser doesn't support text selection.
    38.       alert(Drupal.t("You haven't selected any text."));
    39.       return;
    40.     }
    41.     else {
    42.       if (confirm(Drupal.t('Are you sure you want to report the text with mistake below to the site administrator?') + "\n\n" + selection)) {
    43.         // When doing a post request, you need non-null data. Otherwise a
    44.         // HTTP 411 or HTTP 406 (with Apache mod_security) error may result.
    45.         $.ajax({
    46.           type: "POST",
    47.           url: Drupal.settings.spelling['uri'],
    48.           data: 'text=' + Drupal.encodeURIComponent(selection) + '&uri=' + Drupal.encodeURIComponent(Drupal.settings.spelling['requestUri']),
    49.           success: function (data) {
    50.             // Parse response.
    51.             var progress = Drupal.parseJson(data);
    52.             // Display errors.
    53.             if (progress.status == 0) {
    54.               alert(Drupal.t('Site administrator was successfully notified about spelling mistake.'));
    55.               return;
    56.             }
    57.           },
    58.           error: function (xmlhttp) {
    59.             alert(Drupal.t('Spelling mistake notification failed.'));
    60.           }
    61.         });
    62.       }
    63.     }
    64.  
    65.  
    66.   }
    67.  
    68. }
    69.  
    70.  
    71. // Global killswitch.
    72. if (Drupal.jsEnabled) {
    73.   $(document).ready(spelling.autoAttach);
    74. }
    [/code]
     
  2. marty

    marty Активный пользователь

    С нами с:
    13 июл 2011
    Сообщения:
    1
    Симпатии:
    0
    Вроде работает. Правда выглядит не очень, стандартные диалоговые окна выводит, я где-то видел поприятнее интерфейс

    Сервер, php:
    Код (Text):
    1.  
    2. <?php
    3. require_once('../scripts/main.php');
    4.  
    5.  $hFile  = @fopen('spcheck.txt', 'w');
    6.  if (!$hFile)
    7.     {
    8.      echo "{\"status\":\"1\"}";
    9.      return;
    10.     }
    11.  
    12.  if ($_SERVER['REQUEST_METHOD']=='POST')
    13.     {    
    14.      $text = urldecode($_POST['text']);
    15.      $uri  = urldecode($_POST['uri']);
    16.      fwrite( $hFile, "URI: " );
    17.      fwrite( $hFile, $uri );
    18.      fwrite( $hFile, "\r\n" );
    19.      fwrite( $hFile, "TEXT: " );
    20.      fwrite( $hFile, $text );
    21.      fwrite( $hFile, "\r\n" );
    22.      fclose($hFile);
    23.      echo "{\"status\":\"0\"}";
    24.     }
    25.  
    26. ?>
    Браузер:
    Код (Text):
    1.  
    2. var spelling = spelling || {};
    3.  
    4. spelling.autoAttach = function () {
    5.   new spelling.handler();
    6.  
    7.   // Show functionality description block.
    8.   var isKonqueror = -1 != navigator.userAgent.indexOf('Konqueror');
    9.   if (isKonqueror) {
    10.     // Workaround for Konqueror browser. Tested under Konqueror 3.5.
    11.     //document.getElementById('block-spelling-0').style.display = 'block';
    12.   }
    13.   else {
    14.     //$('#block-spelling-0').show();
    15.   }
    16. }
    17.  
    18. spelling.handler = function () {
    19.   var obj = this;
    20.   this.input = $(document);
    21.  
    22.   $(this.input)
    23.     .keydown(function (event) { return obj.onkeydown(event) });
    24. };
    25.  
    26. spelling.handler.prototype.onkeydown = function (e) {
    27.   if (!e) {
    28.     e = window.event;
    29.   }
    30.   // Enter and Ctrl.
    31.   if (13 == e.keyCode && e.ctrlKey) {
    32.     var selection = (parent.getSelection) ? parent.getSelection() : ((parent.document.getSelection) ? parent.document.getSelection() : ((document.selection.createRange) ? document.selection.createRange().text : null));
    33.     if (!selection || '' == selection) {
    34.       // TODO I think there should be some error handling if browser doesn't support text selection.
    35.       //alert(Drupal.t("You haven't selected any text."));
    36.       alert("You haven't selected any text.");
    37.       return;
    38.     }
    39.     else {
    40.       //if (confirm(Drupal.t('Are you sure you want to report the text with mistake below to the site administrator?') + "\n\n" + selection)) {
    41.       if (confirm('Are you sure you want to report the text with mistake below to the site administrator?' + "\n\nText:\n\"" + selection + "\"")) {
    42.         // When doing a post request, you need non-null data. Otherwise a
    43.         // HTTP 411 or HTTP 406 (with Apache mod_security) error may result.
    44.         $.ajax({
    45.           type: "POST",
    46.           //url: Drupal.settings.spelling['uri'],
    47.           url: "/spcheck.php",
    48.           //url: document.location.href
    49.           //data: 'text=' + Drupal.encodeURIComponent(selection) + '&uri=' + Drupal.encodeURIComponent(Drupal.settings.spelling['requestUri']),
    50.           data: 'text=' + encodeURIComponent(selection) + '&uri=' + encodeURIComponent(document.location.href),
    51.           success: function (data) {
    52.             // Parse response.
    53.             //var progress = Drupal.parseJson(data);
    54.             var progress = jQuery.parseJSON(data);
    55.             // Display errors.
    56.             if (progress.status == 0) {
    57.               //alert(Drupal.t('Site administrator was successfully notified about spelling mistake.'));
    58.               alert('Site administrator was successfully notified about spelling mistake.');
    59.               return;
    60.             }
    61.           },
    62.           error: function (xmlhttp) {
    63.             //alert(Drupal.t('Spelling mistake notification failed.'));
    64.             alert('Spelling mistake notification failed.');
    65.           }
    66.         });
    67.       }
    68.     }
    69.   }
    70. }
    71.  
    72. $(document).ready(spelling.autoAttach);