Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Быстрая цитата


Автор: 2man 3.8.2005, 17:41
Подскажите как сделать кнопку "быстрая цитата" на IPB 1.3. Я думаю, это где-то здесь меняется:
Код

<td class='pformleft'>
   <center>Для вставки цитаты, выделите нужный текст и <br><a href="javascript:Insert(selection)" onMouseDown="get_selection()"><b>НАЖМИТЕ СЮДА</b></a>

Автор: Sardar 5.8.2005, 16:56
Просто выбираем отселектированный текст через document.getSelection().toString() или document.selection.text для ИЕ. Полученный текст ставим куда угодно.

Автор: 2man 7.8.2005, 19:32
А по-понятнее можно как-нибудь объяснить?

Автор: 2man 12.8.2005, 07:40
Как я посмотрел делается у вас, я пытаюсь вставить $poster['name'] в скрипт, выглядит это дело так:
Код

<td class='pformleft'>
   <center>Для вставки цитаты, выделите нужный текст и <br><a href="javascript:Insert(selection, $poster['name'])" onMouseDown="get_selection()"><b>НАЖМИТЕ СЮДА</b></a>

но эффекта ноль smile
Добавлено @ 07:45
Выдает ошибку, а если меняю на:
Код

<a href="javascript:Insert(selection, 'name')" onMouseDown="get_selection()"

то просто выдает обычную цитату smile

Автор: Sardar 12.8.2005, 16:39
Insert, get_selection это функции этого форума, а не какие-то встроенные вещи.

У нас get_selection() вызываеться по onmouseover и складывает в переменную selection отселектированный текст на странице. Затем если человек кликает на картинку, достаёться пост по id, достаёться его текст, сравниваеться с полученной селекцией. Если подстрока не найденна, то считаеться что участник кликнул на кнопку цитаты другого человека.
Это всё переписанные функции.

Что тебе нужно? Нежели сложно посмотреть http://forum.vingrad.ru/html/quote.js ?
Впрочем написанно кривовато, в новом дизайне я переписал чуть по другому smile

Автор: 2man 13.8.2005, 17:18
Ты не совсем меня понял. Дело не в quote.js , а в /skin/*/skin_topic.php, скрипт идет именно оттуда. Я просто хочу заменить скрипт, тот что у вас, к примеру, на смайликами:
Цитата
Для вставки имени(ника), кликните на нем.

Для того, чтобы вставить цитату с этой страницы, выделите её и нажмите здесь.

на скрипт, который идет из кнопки быстрая цитата.
Чтобы цитируемый текст выглядел не как:
Цитата
Впрочем написанно кривовато

а как:
Цитата(Sardar @ 12.8.2005, 15:39)
Впрочем написанно кривовато


оффтоп: у вас этот самый javascript под смайликами и не работает smile

Автор: 2man 14.8.2005, 14:41
А если после
Код

<a href="javascript:Insert(selection, 'name')" onMouseDown="get_selection()"

Отправить его на quote.js?
Код

<a href="javascript:Insert(selection, 'name')" onMouseDown="get_selection()<QUOTE.JS>"

Автор: sergejzr 14.8.2005, 14:50
2man, тебе стоит наверное почитать про яваскрипт прежде чем генерировать решения smile)

Автор: Sardar 14.8.2005, 15:14
Цитата(2man @ 13.8.2005, 16:18)
Чтобы цитируемый текст выглядел не как:

Всё что нужно это сгенерить {quote=автор, дата, время}цитата{/quote}
Цитата(2man @ 13.8.2005, 16:18)
оффтоп: у вас этот самый javascript под смайликами и не работает
Где? Всё работает... подробней?
Цитата(2man @ 14.8.2005, 13:41)
Отправить его на quote.js?

Это явно не JS smile

Как сделанно здесь? Вставка цитаты делиться на две фазы: выборка селекции и собственно вставка. Выборка при наведении мышкой на кнопку, т.к. при клике селекция пропадёт.

Выборка селекции:
Код
//функция помещает селекцию со страницы в переменную InsertQuote.selection
InsertQuote.prepare=function() {
  if(document.getSelection) {
    if(typeof(window.getSelection)!="undefined") InsertQuote.selection=window.getSelection();
    else InsertQuote.selection=document.getSelection();
  } else InsertQuote.selection=document.selection.createRange().text;
}


Теперь нужно запретить цитирование от лица чужого участника, если ты вдруг нажал на чужую кнопку цитаты smile
Функции вставки передаёться ник пользоватля, время и дата, и id поста. Выборка поста по id удобней чем доступ методами DOM, к тому же не боишся смены дизайна.
Код

function InsertQuote(nick, datetime, postid) { //k,r,s
    if(InsertQuote.selection.toString().length>0) { //если селекция была
      var pst=document.getElementById(postid), sl="";
      var uct = (typeof(pst.innerText)!="undefined")? pst.innerText: (typeof(pst.textContent)!="undefined")? pst.textContent: "";
      if(n6||window.opera) {//небольшой патчь для оперы
        uct=extractRus(uct);
        sl=extractRus(InsertQuote.selection.toString());
      } else sl=InsertQuote.selection.toString();
      //проверим являеться ли отселектированный текст чатью поста участника
      if(uct.indexOf(sl)<0) {alert("Вы нажали на кнопку цитаты другого участника");return;}
      //вставим пост, у тебя другая функция
      ubbc_addAfter(((post.target.length>0)? "\n": "")+"[quote"+(nick?("="+nick+", "+datetime):"")+"]\n"+(InsertQuote.selection.toString())+"\n[/quote]\n");
    }
}

//патчь
function extractRus(txt){
  var h=[], v=0;
  function fltr(l){ return ((l>=1072&&l<=1103)||(l>=1040&&l<=1071)); }
  for(var i=0, e; i<txt.length; i++) {
    if(fltr(txt.charCodeAt(i))){
      for(e=i+1; e<txt.length&&fltr(txt.charCodeAt(e)); ++e);
      h.push(txt.substring(i,e));
      i=e;
    }
  }
 return h.join('');
}

Это оригинальные скрипты форума, чуть модифицированные мной.

Затем генериться кнопка:
Код
<img src="images/posttop4-off.gif" alt="Быстрая цитата" title="Скопировать выделение в поле ввода" onmouseover="InsertQuote.prepare();" onclick="InsertQuote('Sardar', '1.12.2004, 18:53', 'post308353')" />
<!-- где пост имеет идентификатор -->
<td class="post-row2r color1r" id="post308353">Содержимое поста...


Уверен что тебе не нужно залезать глубоко в исходники форума, просто дай ссылки на свой quote.js и вёрстку с кнопками, подкорректирую.

Автор: 2man 16.8.2005, 12:35
Цитата(Sardar @ 14.8.2005, 14:14)
Где? Всё работает... подробней?

http://forum.vingrad.ru/index.php?showtopic=61173
Вот мой quote.js:
http://mega-forum.net.ru/html/quote.js
Что-то я немного запутался smile smile В каком файле верстка кнопок находится?

Автор: Sardar 16.8.2005, 12:57
Цитата(2man @ 16.8.2005, 11:35)
http://forum.vingrad.ru/index.php?showtopic=61173

Во блин, я и не знал что такая ссылка существует smile

Затея хорошая, но лучше ссылочку ту убрать, т.к. есть более удобная "Быстрая цитата". А по той ссылке никак определить участника и время нельзя, можно разобрать Range, выделить пост, но это будет зависить от дизайна(при смене сразу лажа) и так глючно работать, что ты сам откажешся smile

Твой quote.js это не изменённый форумский скрипт, правильно должен работать. Ник и время, как уже сказал выше ты не получишь. В чём ещё проблема?

Автор: 2man 16.8.2005, 13:04
Так что у меня никак не получится запихнуть быструю цитату? А если через добавление кнопки http://forum.vingrad.ru/style_images/1/p_quick_quote.gif?

Автор: Sardar 16.8.2005, 13:29
Вся необходимая инфа для быстрой цитаты генериться на сервере, я же показал парой постов выше. Нужен ник участника, время и идентификатор поста.

Автор: 2man 16.8.2005, 13:34
Вроде немного понял
Код

function InsertQuote(nick, datetime, postid) { //k,r,s
    if(InsertQuote.selection.toString().length>0) { //если селекция была
      var pst=document.getElementById(postid), sl="";
      var uct = (typeof(pst.innerText)!="undefined")? pst.innerText: (typeof(pst.textContent)!="undefined")? pst.textContent: "";
      if(n6||window.opera) {//небольшой патчь для оперы
        uct=extractRus(uct);
        sl=extractRus(InsertQuote.selection.toString());
      } else sl=InsertQuote.selection.toString();
      //проверим являеться ли отселектированный текст чатью поста участника
      if(uct.indexOf(sl)<0) {alert("Вы нажали на кнопку цитаты другого участника");return;}
      //вставим пост, у тебя другая функция
      ubbc_addAfter(((post.target.length>0)? "\n": "")+"[quote"+(nick?("="+nick+", "+datetime):"")+"]\n"+(InsertQuote.selection.toString())+"\n[/quote]\n");
    }
}

//патчь
function extractRus(txt){
  var h=[], v=0;
  function fltr(l){ return ((l>=1072&&l<=1103)||(l>=1040&&l<=1071)); }
  for(var i=0, e; i<txt.length; i++) {
    if(fltr(txt.charCodeAt(i))){
      for(e=i+1; e<txt.length&&fltr(txt.charCodeAt(e)); ++e);
      h.push(txt.substring(i,e));
      i=e;
    }
  }
 return h.join('');
}

это я пихаю в quote.js, потом
Код

//функция помещает селекцию со страницы в переменную InsertQuote.selection
InsertQuote.prepare=function() {
  if(document.getSelection) {
    if(typeof(window.getSelection)!="undefined") InsertQuote.selection=window.getSelection();
    else InsertQuote.selection=document.getSelection();
  } else InsertQuote.selection=document.selection.createRange().text;
}

ставлю вместо
Код

function get_selection() {
   if (document.getSelection){
    selection = document.getSelection();
    selection = selection.replace(/\r\n\r\n/gi, "_doublecaret_");
    selection = selection.replace(/\r\n/gi, " ");
       while (selection.indexOf("  ") !=-1) selection = selection.replace(/  /gi, ""); 
    selection = selection.replace(/_doublecaret_/gi, "\r\n\r\n");
  } else
      selection = document.selection.createRange().text;
}

далее вставляю кнопку:
Код

<img src="images/posttop4-off.gif" alt="Быстрая цитата" title="Скопировать выделение в поле ввода" onmouseover="InsertQuote.prepare();" onclick="InsertQuote('Sardar', '1.12.2004, 18:53', 'post308353')" />
<!-- где пост имеет идентификатор -->
<td class="post-row2r color1r" id="post308353">Содержимое поста...

только вместо images/posttop-4off.gif наверное надо images/p_quick_quote.gif
Правильно?

Автор: Sardar 16.8.2005, 14:27
Цитата(2man @ 16.8.2005, 12:34)
Вроде немного понял

Почти, тебе будет не хватать функции ubbc_addAfter, замени её на paste(текст, true) - правда работать будет только под ИЕ. Моя ubbc_addAfter основанна на этом коде:
http://forum.vingrad.ru/index.php?showtopic=35775

Цитата(2man @ 16.8.2005, 12:34)
только вместо images/posttop-4off.gif наверное надо images/p_quick_quote.gif

Ну какя картинка там будет, это не важно. Важно что это кнопка для одного участника, каждый участник имеет такую кнопку.

Автор: 2man 16.8.2005, 15:08
А ты не мог бы сам добавить в мой quote.js то что надо и выложить сюда, а то я дамер в этих делах, еще чего накручу smile
http://mega-forum.net.ru/html/quote.js

Автор: Sardar 16.8.2005, 16:26
Нет, нужно изменять не JS, а код форума. Наведи мышкой на кнопку быстрой цитаты, в строке статуса видишь вызов. Это нужно от сервера, а код для клиента я дал в первых постах.

Автор: 2man 17.8.2005, 03:30
Чего-то не получилось. Ошибку на странице выдает smile

Автор: Sardar 17.8.2005, 15:15
Цитата(2man @ 17.8.2005, 02:30)
Чего-то не получилось. Ошибку на странице выдает

Что ты конкрентно сделал, выкладывай код, я не телепат smile

Автор: 2man 20.8.2005, 10:56
Так вот, какой у меня получился quote.js:
Код
function ins(name){ // вставка ника в форме быстрого ответа
if (document.REPLIER) {
var input=document.REPLIER.Post;
input.value=input.value+"[b]"+name+"[/b]"+" \n";
}
}

function Insert(text){ 
if (text!="") paste("[quote]"+text+"[/quote]\n", 0);
}

function paste(text, o){ // тут я заменил flag на o исходя из вашего файла
if (document.REPLIER) {
if ((document.selection)&&(o)) {
    document.REPLIER.Post.focus();
    document.REPLIER.document.selection.createRange().text = text;
} else document.REPLIER.Post.value += text;
}
}

// function get_selection() {
//   if (document.getSelection){
//    selection = document.getSelection();
//    selection = selection.replace(/\r\n\r\n/gi, "_doublecaret_");
//    selection = selection.replace(/\r\n/gi, " ");
//     while (selection.indexOf("  ") !=-1) selection = selection.replace(/  /gi, ""); 
//    selection = selection.replace(/_doublecaret_/gi, "\r\n\r\n");
//  } else
//      selection = document.selection.createRange().text;
// }

//функция помещает селекцию со страницы в переменную InsertQuote.selection
InsertQuote.prepare=function() {
  if(document.getSelection) {
    if(typeof(window.getSelection)!="undefined") InsertQuote.selection=window.getSelection();
    else InsertQuote.selection=document.getSelection();
  } else InsertQuote.selection=document.selection.createRange().text;
}


function InsertQuote(nick, datetime, postid) { //k,r,s
    if(InsertQuote.selection.toString().length>0) { //если селекция была
      var pst=document.getElementById(postid), sl="";
      var uct = (typeof(pst.innerText)!="undefined")? pst.innerText: (typeof(pst.textContent)!="undefined")? pst.textContent: "";
      if(n6||window.opera) {//небольшой патчь для оперы
        uct=extractRus(uct);
        sl=extractRus(InsertQuote.selection.toString());
      } else sl=InsertQuote.selection.toString();
      //проверим являеться ли отселектированный текст чатью поста участника
      if(uct.indexOf(sl)<0) {alert("Вы нажали на кнопку цитаты другого участника");return;}
      //вставим пост, у тебя другая функция
      ubbc_addAfter(((post.target.length>0)? "\n": "")+"[quote"+(nick?("="+nick+", "+datetime):"")+"]\n"+(InsertQuote.selection.toString())+"\n[/quote]\n");
    }
}

//патчь
function extractRus(txt){
  var h=[], v=0;
  function fltr(l){ return ((l>=1072&&l<=1103)||(l>=1040&&l<=1071)); }
  for(var i=0, e; i<txt.length; i++) {
    if(fltr(txt.charCodeAt(i))){
      for(e=i+1; e<txt.length&&fltr(txt.charCodeAt(e)); ++e);
      h.push(txt.substring(i,e));
      i=e;
    }
  }
 return h.join('');
}

далее, чтобы не добавлять отдельную кнопку, я решил поменять значение кнопки "цитата"
Код

<!-- REPORT / DELETE / EDIT / QUOTE DIV -->
        
        <div align='right'>
        {$post['report_link']}{$post['delete_button']}{$post['edit_button']}<a href='{$ibforums->base_url}act=Post&amp;CODE=06&amp;f={$ibforums->input[f]}&amp;t={$ibforums->input[t]}&amp;p={$post['pid']}'><{P_QUOTE}></a>
      </div>
      </td>
    </tr>

      это был старый код, а вот теперь новый:
Код

<!-- REPORT / DELETE / EDIT / QUOTE DIV -->
        
        <div align='right'>
        {$post['report_link']}{$post['delete_button']}{$post['edit_button']}<a href="javascript:Insert(selection)" onMouseDown="get_selection()"><{P_QUOTE}></a>
      </div>
      
      </td>
    </tr>

В итоге кнопка "цитата" вообще пропала. Что делать? smile

Автор: Sardar 20.8.2005, 17:34
2man я понял, ты совсем не разбираешся в JS, такую нелепость нагородить... smile
Переношу топик в раздел для начинающих, т.к. никакой пользы он не понесёт.


А теперь будем думать головой! smile
Нам нужно вставить цитату от каждого участника в форму ответа. При этом дефолтовое поведение с переходом на форму расширенного ответа не нужно.

Вставляемая цитата должна содержать имя участника, дату и отселектированный текст.

Что имеем? На клиенте только селекцию, всё остальное доставать достаточно геморно и привязанно к дизайну, поэтому проще вставить инфу на сервере.

Медитируем - я серьёзно, до полного просветления smile

Как только снова обрёл способность думать + посмотрел мой код на предидущей странице - здадача становиться делом 2 минут. Убираем твой код с Insert, который ты бездумно копируешь и пытаешся над ним шаманить, вместо того что бы просто его в слух прочесть(английский ты то должен понимать smile ).

Проблема: в моём коде используеться другая функця для вставки текста. НО! у тебя есть оригинальная paste. Обе функции делают одно и тоже, на этой ноте напрягай мозги до просветления smile

Код
function paste(text, o){
if (document.REPLIER) {
if ((document.selection)&&(o)) {
    document.REPLIER.Post.focus();
    document.REPLIER.document.selection.createRange().text = text;
} else document.REPLIER.Post.value += text;
}
}

//функция помещает селекцию со страницы в переменную InsertQuote.selection
InsertQuote.prepare=function() {
  if(document.getSelection) {
    if(typeof(window.getSelection)!="undefined") InsertQuote.selection=window.getSelection();
    else InsertQuote.selection=document.getSelection();
  } else InsertQuote.selection=document.selection.createRange().text;
}
function InsertQuote(nick, datetime, postid) { //k,r,s
    if(InsertQuote.selection.toString().length>0) { //если селекция была
      var pst=document.getElementById(postid), sl="";
      var uct = (typeof(pst.innerText)!="undefined")? pst.innerText: (typeof(pst.textContent)!="undefined")? pst.textContent: "";
      if(n6||window.opera) {//небольшой патчь для оперы
        uct=extractRus(uct);
        sl=extractRus(InsertQuote.selection.toString());
      } else sl=InsertQuote.selection.toString();
      //проверим являеться ли отселектированный текст чатью поста участника
      if(uct.indexOf(sl)<0) {alert("Вы нажали на кнопку цитаты другого участника");return;}
      //вставим пост, у тебя другая функция
      look_at_paste(((post.target.length>0)? "\n": "")+"[quote"+(nick?("="+nick+", "+datetime):"")+"]\n"+(InsertQuote.selection.toString())+"\n[/quote]\n", true);
    }
}
//патчь
function extractRus(txt){
  var h=[], v=0;
  function fltr(l){ return ((l>=1072&&l<=1103)||(l>=1040&&l<=1071)); }
  for(var i=0, e; i<txt.length; i++) {
    if(fltr(txt.charCodeAt(i))){
      for(e=i+1; e<txt.length&&fltr(txt.charCodeAt(e)); ++e);
      h.push(txt.substring(i,e));
      i=e;
    }
  }
 return h.join('');
}

Не пытайся скопировать код на прямую, там ошибка smile Если ты в начале поста читал и думал, то сразу её найдёшь smile

И так у нас есть две функции, одна снимает селекцию, вторая вставляет её. Первую как я уже говорил лучше вызывать по наведению мышки на кнопку, тогда селекция не будет пропадать при клике.

Очень мощно медитируем в это точке! smile

Займёмся твоей кнопкой:
Код
<a onmouseover="InsertQuote.prepare();" href="javascript:InsertQuote('{$author_name}', '{$post['post_date']}', 'post{$post['pid']}');">{$post['quick_quote_icon']}</a>

Не тупо копируем код, т.к. он не будет работать с пол оборота, а думаем! smile
Очевидно нам не хватает двух деталей: переменной $author_name - ник автора и $post['quick_quote_icon'] - кнопка быстрой цитаты.

Я разжевал так, что дальше вопросов быть не должно. Если не сумеешь сам, извини, но нужно править руки... smile

Автор: 2man 22.8.2005, 02:33
Наверное надо руки мне править, потому что не получилось.
Вот мой JS:
Код

function ins(name){
if (document.REPLIER) {
var input=document.REPLIER.Post;
input.value=input.value+"[b]"+name+"[/b]"+" \n";
}
}


function paste(text, o){ 
if (document.REPLIER) {
if ((document.selection)&&(o)) {
    document.REPLIER.Post.focus();
    document.REPLIER.document.selection.createRange().text = text;
} else document.REPLIER.Post.value += text;
}
}

InsertQuote.prepare=function() {
  if(document.getSelection) {
    if(typeof(window.getSelection)!="undefined") InsertQuote.selection=window.getSelection();
    else InsertQuote.selection=document.getSelection();
  } else InsertQuote.selection=document.selection.createRange().text;
}

function InsertQuote(nick, datetime, postid) { //k,r,s
    if(InsertQuote.selection.toString().length>0) { //если селекция была
      var pst=document.getElementById(postid), sl="";
      var uct = (typeof(pst.innerText)!="undefined")? pst.innerText: (typeof(pst.textContent)!="undefined")? pst.textContent: "";
      if(n6||window.opera) {//небольшой патчь для оперы
        uct=extractRus(uct);
        sl=extractRus(InsertQuote.selection.toString());
      } else sl=InsertQuote.selection.toString();
      //проверим являеться ли отселектированный текст чатью поста участника
      if(uct.indexOf(sl)<0) {alert("Вы нажали на кнопку цитаты другого участника");return;}
      //вставим пост, у тебя другая функция
      paste(text, o)(((post.target.length>0)? "\n": "")+"[quote"+(nick?("="+nick+", "+datetime):"")+"]\n"+(InsertQuote.selection.toString())+"\n[/quote]\n", true);
    }
}
//патчь
function extractRus(txt){
  var h=[], v=0;
  function fltr(l){ return ((l>=1072&&l<=1103)||(l>=1040&&l<=1071)); }
  for(var i=0, e; i<txt.length; i++) {
    if(fltr(txt.charCodeAt(i))){
      for(e=i+1; e<txt.length&&fltr(txt.charCodeAt(e)); ++e);
      h.push(txt.substring(i,e));
      i=e;
    }
  }
 return h.join('');
}

А вот я пробую вставить кнопку:
Код

<!-- REPORT / DELETE / EDIT / QUOTE DIV -->

        <div align='right'>
        {$post['report_link']}{$post['delete_button']}{$post['edit_button']}<a onmouseover="InsertQuote.prepare();" href="javascript:InsertQuote('{$author['name']}', '{$post['post_date']}', '{$post['pid']}');">{$post['p_quick_quote']}><img src="{$ibforums->vars['img_url']}/p_quick_quote.gif" alt="Быстрая цитата" width="111" heigth="20" /></a><a href='{$ibforums->base_url}act=Post&amp;CODE=06&amp;f={$ibforums->input[f]}&amp;t={$ibforums->input[t]}&amp;p={$post['pid']}'><{P_QUOTE}></a>
      </div>

И не получается. Ну что теперь не то? smile
Добавлено @ 02:39
И медитировал вроде нормально smile

Автор: 2man 22.8.2005, 04:53
Для того, чтобы была кнопка надо еще функцию прописывать. Ладно, опустим. Пусть у меня цитата вызывается через
Код

<center>Для вставки цитаты, выделите нужный текст и <br><a href="javascript:Insert(selection)" onMouseDown="get_selection()"><b>НАЖМИТЕ СЮДА</b></a>

Я меняю этот код на:
Код

<center>Для вставки цитаты, выделите нужный текст и <br><a onmouseover="InsertQuote.prepare();" href="javascript:InsertQuote('{$author['name']}', '{$post['post_date']}', '{$post['pid']}');"><b>НАЖМИТЕ СЮДА</b></a>

И... ошибка на странице. Значит, дело в JS. Смотрю JS. paste я поменял, insert убрал. медитирую... Тщательно медитирую... Ничего не происходит smile

Автор: Sardar 22.8.2005, 13:46
Ошибка при наводе мышкой на кнопку? Или при нажатии? Какая ошибка(скопируй что пишет браузер). Дай ссылку на уже отрисованную страницу.

На будущее, не заставляй меня это спрашивать, если есть ошибка то ты должен выложить лог браузера и привести отрывок сбойного кода smile

Автор: 2man 22.8.2005, 16:02
Сейчас проделал тоже самое, что и раньше на локалхосте. Кнопка появляется, но никакой функции не несет, т.е. принажатии на нее ничего не происходит
Я приаттачик скриншот моей кнопки, а при наводе мышкой на ник участника слева от кнопки js выглядит как:
javascript:InsertQuote('<a href=
Нашел вроде ошибку. заменил $author['name'] на $author_name чтобы посмотреть как цитата будет работать без ника и все стало нормально. при наводе мыши на кнопку быстрой цитаты js:
javascript:InsertQuote('','11.08.2005 - 07:33', '6');
Стало ясно, что ошибка как раз в $author['name']. Но вот еще проблема после того, как я нажал на кнопку быстрой цитаты ничего не произошло и ошибку на странице не выдало smile
Добавлено @ 16:09
Пример можешь посмотреть по этой ссылке: http://www.mega-forum.net.ru/index.php?showtopic=194

Автор: 2man 22.8.2005, 16:28
Видишь, если я просто навожу мышь на кнопку цитаты, у меня повляется:

javascript:InsertQuote('','11.08.2005 - 07:33', '6');

А у вас так:

javascript:Insert(selection, '2man','11.08.2005 - 07:33', '6');

Автор: Sardar 22.8.2005, 17:34
Цитата(2man @ 22.8.2005, 15:02)
s выглядит как:
javascript:InsertQuote('<a href=

Цитата(2man @ 22.8.2005, 15:02)
Нашел вроде ошибку. заменил $author['name'] на $author_name чтобы посмотреть как цитата будет работать без ника и все стало нормально. при наводе мыши на кнопку быстрой цитаты js:
javascript:InsertQuote('','11.08.2005 - 07:33', '6');

Цитата(2man @ 22.8.2005, 15:02)
Стало ясно, что ошибка как раз в $author['name']. Но вот еще проблема после того, как я нажал на кнопку быстрой цитаты ничего не произошло и ошибку на странице не выдало smile


Я не могу, если ещё раз запостишь без обращения к мозгу, отправлю тему в юмор smile
Когда ты предложил заменять ссылки на названия постов, я думал ты разбираешся в PHP и JS, следовательно можешь отличить текст от разметки и найти ошибку. Жаль я ошибался.

Повторяю, это форум программистов! Если ты просто человек, не знающий ни языка и не понимаешь что есть: строки в JS, вызов функций и ошибки синтаксиса, то я не могу тебе помочь smile

Если до сих пор не дошло о написанном выше(напряги мозги на словах "разметка", "строки", "ошибки синтаксиса"), то подумай с какого перепугу первым параметром функции InsertQuote должна быть лабуда типа '<a href=...' ? smile

Цитата(2man @ 22.8.2005, 15:02)
Нашел вроде ошибку. заменил $author['name'] на $author_name чтобы посмотреть как цитата будет работать без ника

Согласись что ты бездумно(на авось smile ) поставил $author_name, который естественно не существует.

Думаем в этой точке, сильно думаем! Если думаешь в верном направлении, то окажеться, что $author['name'] возвращает вёрстку! smile
Ещё раз очень хорошо думаем! Вероятно нам нужен ник автора без вёрстки!
Ещё раз очень-очень хорошо думаем!!! Вероятно он лежит под другим ключём в массиве $author!!! smile

Остальное предлагаю додумать самому. Если не знаешь как распечатаьт массив, не позорься в PHP, прочти мануал, это тебе поможет в будущем smile

Автор: 2man 23.8.2005, 08:27
Цитата(Sardar @ 22.8.2005, 16:34)
Я не могу, если ещё раз запостишь без обращения к мозгу, отправлю тему в юмор

Я просто запостил ход своих действий. Я понимаю, что js вида javascript:InsertQuote('<a href= полный бред. Не до такой степени уж я ламер smile
Цитата(Sardar @ 22.8.2005, 16:34)
Вероятно он лежит под другим ключём в массиве $author

Не совсем так. Я поставил $post['name'] и у меня все работает. При наводе мыши на кнопку все определяет замечательно: и ник стоит, и дата, и номер поста. Теперь по щелчку на кнопке у меня должна вставляться цитата. Щелкаю - ничего не происходит. Значит, теперь дело в js smile
Добавлено @ 08:29
Код js я выложил чуть выше smile

Автор: Sardar 23.8.2005, 18:40
Цитата(2man @ 23.8.2005, 07:27)
Щелкаю - ничего не происходит. Значит, теперь дело в js

Нет в руках, я серьзьёзно smile Наводим мышой на кнопку, получаем ошибку, читаем ошибку, думаем. Оказываеться нет функции InsertQuote! Ещё раз очень хорошо думаем!

Подсказка, глянь на свой quote.js, чего там не хватает? smile

P.S. в следующий раз напечатай пост, но перед тем как отправить, прочти и подумай smile Почитай что говорит браузер, ведь не молчит же он. А вообще я начал понимать, почему на бытовых приборах часто пишут глупые рекомендации, например в мануале моей эл. бритвы стоит: не ополаскиватйте бритвув горячей воде - можете обжечься smile

Автор: 2man 23.8.2005, 20:11
Цитата(Sardar @ 23.8.2005, 17:40)
Оказываеться нет функции InsertQuote!

Разве? А как же это:
Код

function InsertQuote(nick, datetime, postid) { //k,r,s
    if(InsertQuote.selection.toString().length>0) { //если селекция была
      var pst=document.getElementById(postid), sl="";
      var uct = (typeof(pst.innerText)!="undefined")? pst.innerText: (typeof(pst.textContent)!="undefined")? pst.textContent: "";
      if(n6||window.opera) {//небольшой патчь для оперы
        uct=extractRus(uct);
        sl=extractRus(InsertQuote.selection.toString());
      } else sl=InsertQuote.selection.toString();
      //проверим являеться ли отселектированный текст чатью поста участника
      if(uct.indexOf(sl)<0) {alert("Вы нажали на кнопку цитаты другого участника");return;}
      //вставим пост, у тебя другая функция
      paste(((post.target.length>0)? "\n": "")+"[quote"+(nick?("="+nick+", "+datetime):"")+"]\n"+(InsertQuote.selection.toString())+"\n[/quote]\n", true);
    }
}

Браузер никакую ошибку не выдает, я просто щелкаю по кнопке, а цитата не вставляется/
Цитата(Sardar @ 23.8.2005, 17:40)
Подсказка, глянь на свой quote.js

Понятное дело. А где ж еще smile А поконкретней?

Автор: Sardar 23.8.2005, 21:06
Цитата(2man @ 23.8.2005, 19:11)
Разве? А как же это:

Это то что ты отсюда взял, а теперь глянь на: http://www.mega-forum.net.ru/html/quote.js
На будущее: прежде чем сказать - проверь smile

Автор: 2man 24.8.2005, 09:18
Я проверял, вот мой http://www.mega-forum.net.ru/html/quote.js :
Код
function ins(name){
if (document.REPLIER) {
var input=document.REPLIER.Post;
input.value=input.value+"[b]"+name+"[/b]"+" \n";
}
}


function paste(text, o){
if (document.REPLIER) {
if ((document.selection)&&(o)) {
        document.REPLIER.Post.focus();
        document.REPLIER.document.selection.createRange().text = text;
} else document.REPLIER.Post.value += text;
}
}

InsertQuote.prepare=function() {
  if(document.getSelection) {
    if(typeof(window.getSelection)!="undefined") InsertQuote.selection=window.getSelection();
    else InsertQuote.selection=document.getSelection();
  } else InsertQuote.selection=document.selection.createRange().text;
}

function InsertQuote(nick, datetime, postid) { //k,r,s
    if(InsertQuote.selection.toString().length>0) { //если селекция была
      var pst=document.getElementById(postid), sl="";
      var uct = (typeof(pst.innerText)!="undefined")? pst.innerText: (typeof(pst.textContent)!="undefined")? pst.textContent: "";
      if(n6||window.opera) {//небольшой патчь для оперы
        uct=extractRus(uct);
        sl=extractRus(InsertQuote.selection.toString());
      } else sl=InsertQuote.selection.toString();
      //проверим являеться ли отселектированный текст чатью поста участника
      if(uct.indexOf(sl)<0) {alert("Вы нажали на кнопку цитаты другого участника");return;}
      //вставим пост, у тебя другая функция
      paste(((post.target.length>0)? "\n": "")+"[quote"+(nick?("="+nick+", "+datetime):"")+"]\n"+(InsertQuote.selection.toString())+"\n[/quote]\n", true);
    }
}
//патчь
function extractRus(txt){
  var h=[], v=0;
  function fltr(l){ return ((l>=1072&&l<=1103)||(l>=1040&&l<=1071)); }
  for(var i=0, e; i<txt.length; i++) {
    if(fltr(txt.charCodeAt(i))){
      for(e=i+1; e<txt.length&&fltr(txt.charCodeAt(e)); ++e);
      h.push(txt.substring(i,e));
      i=e;
    }
  }
 return h.join('');
}

Не знаю почему он тебе другое выдал, может из-за кеширования smile

Автор: Sardar 24.8.2005, 13:59
Цитата(2man @ 24.8.2005, 08:18)
Не знаю почему он тебе другое выдал, может из-за кеширования

Нет, я несколько раз жал ctrl+F5, может ты только что код туда поставил, ведь теперь нет ошибки на странице smile

А теперь догадайся почему цитата всё таки не работает. Смотри не на код, он в порядке, смотри на свою страницу smile

Автор: 2man 24.8.2005, 15:44
Хм.. а теперь у меня выдает ошибку на странице smile
Цитата(Sardar @ 24.8.2005, 12:59)
Смотри не на код, он в порядке, смотри на свою страницу

В коде php сто баллов все в порядке. Так что может еще быть??

Автор: 2man 25.8.2005, 15:56
Вопрос решен по аське. Огромный респект Sardar !

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)