1. Главная
  2. Форумы
  3. Техподдержка Drupal
  4. FAQ

Привязка к каждому посту/комментарию кнопки «цитировать»

Главные вкладки

Здравствуйте!

Возможно, мой вопрос имеет к Друпал отношение косвенное и больше относится к JS, но, тем не менее, ответ на него часто нужен на сайтах, использующих Друпал.

Имеется сайт на Друпал с форумом (+ AF, Bbcode и BUEditor). Хочется дать пользователям возможность быстрого цитирования, чтобы щелчок на ссылке/кнопке вставлял в textarea кусок поста в тегах bbcode [ quote = "имя автора" ]%TEXT%[ / quote ]. Пытался найти в Сети описание того, как это делается, но, видимо, что-то с Гуглежом у меня сегодня не ладится — ничего путного не увидел. Подскажите, пожалуйста, если не трудно.
Спасибо.

Комментарии

Аватар пользователя Geldora Geldora 7 мая 2009 в 18:26

Поддерживаю! Кажется, Renexe говорил, что на Друпал.ру используется простой js - и тоже предлагал искать его в Гугле. И тоже пыталась - и тоже не нашла к сожалению (Поиск по Quote дает много мусора)

Может есть название у этого скрипта?

Аватар пользователя Geldora Geldora 7 мая 2009 в 19:07

Нет, модуль не так делает!...

Куот цитирует на отдельной странице +цитирует все сообещние (а если это нода?)- тот скрипт, который мы ищем уитирует только выделенное и без перехода на отдельную страницу.

Аватар пользователя penexe penexe 7 мая 2009 в 19:09
<img onclick="insertQuote();" onmouseover="getText('beerman');" title="Выделите текст и нажмите эту кнопку, чтобы вставить цитату" id="img_quote" src="/sites/all/themes/novosibirsk/img/icons/blog_pencil.gif"/>
function getText(aname) {
txt = '';
if (window.getSelection && !window.opera) txt = window.getSelection();
else if (document.getSelection) txt = document.getSelection();
else if (document.selection) txt = document.selection.createRange().text;
txt = '
"'</span> <span style="color: #339933;">+</span> aname <span style="color: #339933;">+</span> <span style="color: #3366CC;">'" wrote:
' + txt + '
\n'
;
}

function insertQuote() {
if (txt != '' && document.getElementById('edit-comment')) {
insertAtCaret(document.getElementById("edit-comment"), txt);
}
}

function insertAtCaret(textObj, textV) {
textV = textV.replace(/\s\[\?\]/g, '');
if (textV == ''||!textObj) return;
var ver = 8;
if (document.all && !window.opera) {
if (textObj.createTextRange && textObj.caretPos) {
var caretPos = textObj.caretPos;
caretPos.text = textV;
} else textObj.value+= textV;
} else {
var brows=navigator.userAgent.toString();
var scrollTop, scrollLeft;
if (textObj.type == 'textarea' && textObj.scrollTop) {
scrollTop = textObj.scrollTop;scrollLeft=textObj.scrollLeft;
}
if (brows.search(/opera\/?(\d*.\d*)/i) != -1) ver=RegExp.1ドル;
if (textObj.selectionStart >= 0 && ver >= 8) {
if (textObj.textLength != undefined) {
var selLength = textObj.textLength;
var selStart = textObj.selectionStart;
var selEnd = textObj.selectionEnd;
if (selEnd == 1 || selEnd == 2) selEnd=selLength;
var s1 = (textObj.value).substring(0, selStart);
var s2 = (textObj.value).substring(selEnd, selLength);
textObj.value = s1 + textV + s2;
textObj.setSelectionRange(selStart + textV.length, selStart + textV.length);
}
if (typeof scrollTop != 'undefined') {
textObj.scrollTop=scrollTop;textObj.scrollLeft=scrollLeft;
}
} else textObj.value+=textV;
}
}

Аватар пользователя Химический Али Химический Али 12 мая 2009 в 13:26

Вставьте в ваши шаблоны node.tpl.php, comment.tpl.php что-то вроде этого:

<a id="quote" title="Выделите текст и нажмите ссылку, чтобы вставить цитату" onmouseover="getText('<?php $node->user_name; ?>');" onclick="insertQuote(); return false;">цитировать</a>

а приведенный выше код добавьте с помощью функции drupal_add_js: http://api.drupal.ru/api/function/drupal_add_js

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 27 июня 2009 в 2:07

Только дошли руки до того, чтобы попытаться реализовать это, но что-то, видимо, я делаю неправильно. Помогите, пожалуйста, определить, что именно я делаю не так.
1. Сохранил подаренный penexe JS в файл quote.js, который положил в папку на сервере.
2. Вставил в шаблон, который отрисовывает мне топик форума drupal_add_js, который добавляет мой скрипт.
3. Вставил в шаблон к каждому комментарию <?php <a id="quote" title="Выделите текст и нажмите ссылку, чтобы вставить цитату" onmouseover="getText('<?php print $account->name; ?>');" onclick="insertQuote(); return false;">цитировать</a> ?>
4. Если нажимаю на появившуюся кнопку «цитировать», ничего не происходит.
5. В коде страницы всё, вроде бы, в порядке: <a id="quote" title="Выделите текст и нажмите ссылку, чтобы вставить цитату" onmouseover="getText('Ingumsky');" onclick="insertQuote(); return false;">цитировать</a>
6. Сообщение о добавлении скрипта тоже есть:
7. При попытке проверить работу скрипта драгонфлаем, вижу, что уже при наведении мышки на «цитировать» выскакивает ошибка:

name: ReferenceError
message: Statement on line 1: Undefined variable: getText

А есть ещё и

Syntax error while loading: line 6 of linked script at http://localhost/drupal/sites/all/modules/birdie_features/files/quote.js?T :
Expected statement
txt = '<br />

8. Если нажать на «цитировать», вижу в драгонфлае ещё одно сообщение об ошибке:

name: ReferenceError
message: Statement on line 1: Undefined variable: insertQuote
Backtrace:
Line 1 of function script
insertQuote(); return false;

Подскажите, пожалуйста, что я делаю не так?

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 28 июня 2009 в 18:20

Спасибо Вам большое! Так действительно работает. После того, как я посмотрел код по последней Вашей ссылке, я понял, что же в первом варианте было не так — это позволило мне чуть лучше понять, как это всё работает. Спасибо!

Аватар пользователя Serg_M Serg_M 5 июля 2009 в 9:12

А для тех кто в "танке" все еще непонятно.
Вставляю в template.php
drupal_add_js (path_to_theme () .'/quote.js', 'theme');
в соей теме создаю файл quote.js, куда вставляю код (чем отличается код отсюда от кода оттуда, так и не понял, с виду одинаковый)

Вставляю в comment.tpl.php "что-то вроде этого"

Результатом у меня получается цитата, правда без user_name просто "".
{quote=""}здесь какой-то текст{/quote}
(здесь вместо фигурных должны квадратные скобки стоять)
но ведь цитата в виде символов, а не оформленная красиво, типа на сером квадрате кто написал и что написал???

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 16 июля 2009 в 19:59

но ведь цитата в виде символов, а не оформленная красиво, типа на сером квадрате кто написал и что написал???
«Оформленная красиво» делается через css. Данный код всего лишь вставляет в текстареа выделенный фрагмент текста заключённый в теги цитирования.

Аватар пользователя Sinn Sinn 10 ноября 2015 в 11:46

Переработал все выше написанное и оформил это все в виде модуля buquote. Взял за основу quote - там идет хороший фильтр. Добавил js код обработки клика, добавил добавление ссылки "Цитировать", сразу все перевел на русский. Функцию изменения настроек модуля убрал полностью. Так что надо просто включить модуль и включить "Quote filter" в "Форматы ввода".

Сейчас модуль позволяет цитировать в нодах типа blog, story, forum. Настраивается это в buquote.module на 84 строчке 'node_types' => array('blog', 'story', 'forum').
(削除) !!! Не могу прикрепить файл с модулем. Попробую чуть позже (削除ここまで)
Модуль в аттачменте

Аватар пользователя babuta babuta 25 июля 2009 в 21:45

Пробовал включить модуль как описано (настройки не трогал)
Получил на форуме

* warning: Illegal offset type in isset or empty in /srv/www/vhosts/*.RU/httpdocs/includes/path.inc on line 65.
* warning: Illegal offset type in /srv/www/vhosts/*.RU/httpdocs/includes/path.inc on line 70.
* warning: preg_match() expects parameter 2 to be string, array given in /srv/www/vhosts/*.RU/httpdocs/includes/bootstrap.inc on line 771.
* warning: preg_match() expects parameter 2 to be string, array given in /srv/www/vhosts/*.RU/httpdocs/includes/bootstrap.inc on line 771.
* warning: preg_match() expects parameter 2 to be string, array given in /srv/www/vhosts/*.RU/httpdocs/includes/bootstrap.inc on line 771.
* warning: preg_match() expects parameter 2 to be string, array given in /srv/www/vhosts/*.RU/httpdocs/includes/bootstrap.inc on line 771.
* warning: Illegal offset type in isset or empty in /srv/www/vhosts/*.RU/httpdocs/includes/path.inc on line 65.
* warning: Illegal offset type in /srv/www/vhosts/*.RU/httpdocs/includes/path.inc on line 70.
* warning: preg_match() expects parameter 2 to be string, array given in /srv/www/vhosts/*.RU/httpdocs/includes/bootstrap.inc on line 771.
* warning: Illegal offset type in isset or empty in /srv/www/vhosts/*.RU/httpdocs/includes/path.inc on line 65.
* warning: Illegal offset type in /srv/www/vhosts/*.RU/httpdocs/includes/path.inc on line 70.
* warning: preg_match() expects parameter 2 to be string, array given in /srv/www/vhosts/*.RU/httpdocs/includes/bootstrap.inc on line 771.
* warning: preg_match() expects parameter 2 to be string, array given in /srv/www/vhosts/*.RU/httpdocs/includes/bootstrap.inc on line 771.
* warning: Illegal offset type in isset or empty in /srv/www/vhosts/*.RU/httpdocs/includes/path.inc on line 65.
* warning: Illegal offset type in /srv/www/vhosts/*.RU/httpdocs/includes/path.inc on line 70.
* warning: preg_match() expects parameter 2 to be string, array given in /srv/www/vhosts/*.RU/httpdocs/includes/bootstrap.inc on line 771.
* warning: preg_match() expects parameter 2 to be string, array given in /srv/www/vhosts/*.RU/httpdocs/includes/bootstrap.inc on line 771.
* warning: preg_match() expects parameter 2 to be string, array given in /srv/www/vhosts/*.RU/httpdocs/includes/bootstrap.inc on line 771.
* warning: preg_match() expects parameter 2 to be string, array given in /srv/www/vhosts/*.RU/httpdocs/includes/bootstrap.inc on line 771.
* warning: Illegal offset type in isset or empty in /srv/www/vhosts/*.RU/httpdocs/includes/path.inc on line 65.
* warning: Illegal offset type in /srv/www/vhosts/*.RU/httpdocs/includes/path.inc on line 70.
* warning: preg_match() expects parameter 2 to be string, array given in /srv/www/vhosts/*.RU/httpdocs/includes/bootstrap.inc on line 771.

Верия Drupal 6.10, Quote 6.x-1.1-beta2
Здесь же как то получилось. Подскажите как лучьше внедрить эту возможность.
В 65 строке

if (isset ($map[$path_language][$path])) {
return $map[$path_language][$path];
}
function drupal_validate_utf8($text) {
if (strlen ($text) == 0) {
return TRUE;
}
771: return (preg_match ('/^./us', $text) == 1);
}
Аватар пользователя clubwave.ru clubwave.ru 17 августа 2009 в 22:21

функция insertAtCaret здесь слегка кривая.. не работает в google chrome

вот эта работает:

function insertAtCaret(tObj,textV){
textV=textV.replace(/\s\[\?\]/g,'')
if (textV==''||!tObj) return
var ver=8
if(document.all && !window.opera){
if (tObj.createTextRange&&tObj.caretPos) {
var caretPos=tObj.caretPos
caretPos.text=textV
}else tObj.value+= textV
}else
{var brows=navigator.userAgent.toString()
var scrollTop, scrollLeft
if (tObj.type=='textarea'&&tObj.scrollTop)
{scrollTop=tObj.scrollTop;scrollLeft=tObj.scrollLeft}
if(brows.search(/opera\/?(\d*.\d*)/i)!=-1) ver=RegExp.1ドル
if(tObj.selectionStart>=0&&ver>=8){
if(tObj.textLength!=undefined||tObj.value.length!=undefined)
{var selLength=tObj.textLength!=undefined?tObj.textLength:tObj.value.length
var selStart=tObj.selectionStart
var selEnd=tObj.selectionEnd
if (selEnd==1||selEnd==2)selEnd=selLength
var s1=(tObj.value).substring(0,selStart)
var s2=(tObj.value).substring(selEnd,selLength)
tObj.value=s1+textV+s2
tObj.setSelectionRange(selStart+textV.length,selStart+textV.length)
}
if (typeof scrollTop != 'undefined')
{tObj.scrollTop=scrollTop;tObj.scrollLeft=scrollLeft}
}else tObj.value+=textV
}
}
Аватар пользователя VladoMire VladoMire 14 сентября 2009 в 13:03

Нормальный код должен работать во всех браузерах, а так это ерунда, которую должно быть стыдно публиковать настоящему мастеру:
В chrome и safari вставка цитат не работает...

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 14 сентября 2009 в 13:08

"VladoMire" wrote:
Нормальный код должен работать во всех браузерах, а так это ерунда, которую должно быть стыдно публиковать настоящему мастеру:
В chrome и safari вставка цитат не работает...

Предложите свой вариант. Я не думаю, что последуют возражения.

Аватар пользователя Geldora Geldora 14 сентября 2009 в 20:23

"VladoMire" wrote:
В chrome и safari вставка цитат не работает...

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

Если ваш проект требует, чтобы кнопка Цитата работала в Сафари - думаю, вы сможете поправить модуль (и не забудете выложить его на Друпал.ру!) Лично мне вполне хватило 4х наиболее распространенных браузеров

Аватар пользователя VladoMire VladoMire 14 сентября 2009 в 23:49

"clubwave.ru" wrote:
функция insertAtCaret здесь слегка кривая.. не работает в google chrome
вот эта работает

Вот как раз этот код и не работает, если использовать тот что предложен

"Sinn" wrote:
Переработал все выше написанное и оформил это все в виде модуля buquote. Взял за основу quote - там идет хороший фильтр. Добавил js код обработки клика, добавил добавление ссылки "Цитировать", сразу все перевел на русский. Функцию изменения настроек модуля убрал полностью. Так что надо просто включить модуль и включить "Quote filter" в "Форматы ввода"
все работает.

Действительно в сафари упираться на стоит. Посмотрел на посещаемость своего одного сайта с 1000 чел в сутки , то получается сафари использует всего 2 человека.
Chrome 6 человек, Больше всех 212 человек Firefox, потом Опера 200, и поровну по 150 чел все три баузера IE 6, 7 и 8.

Аватар пользователя Ant141 Ant141 11 октября 2009 в 18:36

Почему-то не работат предложенный модуль, Drupal 6.14
На кнопке QUOTE ссылка на мойсайт.ru
Че делать? Очень классная штука, охота ее поставить
Тестил в нескольких браузерах. в чем может быть причина?

Аватар пользователя Arturus Arturus 23 декабря 2009 в 15:59

Хороший модуль.
У меня Drupal 6.14 заработал везде кроме формы комментариев Advanced Forum, при переходе к форме ответа (комментария) ссылка "цитировать" пропадает, хотя в типах материалов buquote.module стр. 93 тип forum есть
'node_types' => array('blog', 'story', 'forum'),

Аватар пользователя orsi orsi 25 февраля 2010 в 19:58

Тоже поставил себе этот модуль.
Просто и со вкусом ))

Хотелось бы в нём ещё видеть следующее:

Если пользователь не выделяет текст и нажимает на "цитировать" - то цитирование бы не происходило (защита), но происходила бы вставка ника.

Аватар пользователя iNFerNo iNFerNo 26 февраля 2010 в 6:48

цитирование работает только когда цитируешь пост. если цитируешь пост где уже вставлена цитата то при клике ответить кнопки цитирования уже нет...

что делать.

Аватар пользователя iNFerNo iNFerNo 26 февраля 2010 в 6:54

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

когда в том же блоге написан пост а ниже коменты то при выделение текста любого комента и клике на цитировать ничего не появляется.

пи.эс. использую модуль buquote

Аватар пользователя Sinn Sinn 2 марта 2010 в 17:01

с ajax comments он и не сможет работать (там js c textfield играет постоянно). сам для связки с ajax comments использую обычный quote. интеграцию с advanced forum тоже надо напильником доделывать.

Аватар пользователя opex opex 10 декабря 2010 в 11:42

"Arturus" wrote:
Хороший модуль.
У меня Drupal 6.14 заработал везде кроме формы комментариев Advanced Forum, при переходе к форме ответа (комментария) ссылка "цитировать" пропадает, хотя в типах материалов buquote.module стр. 93 тип forum есть
'node_types' => array('blog', 'story', 'forum'),

решили эту проблему?

не вставляет цитаты, если включен ckeditor..это как-нить можно обойти?

Аватар пользователя sokol sokol 14 декабря 2010 в 23:49

Проблема так и остается, лично у меня.
Так что пока пользователям приходится пользоваться разве что встроенной в FCKEditor кнопкой "цитата" (с настроенным мной стилем).
То есть скопировал, вставил, оформил стилем "цитата", комментируешь

Аватар пользователя Abazinchik Abazinchik 7 марта 2011 в 14:05

Поставил модуль buquote. Все работает отлично. Только вот одна мелочь мешает радоваться. В списке последних комментариев теперь у меня: "Тот писал" "Этот писал". Неинформативно получается. Никто не сталкивался с данной проблемой?

Аватар пользователя kpv_dnepr@drupal.org kpv_dnepr@drupal.org 12 апреля 2011 в 17:04

Hello world)))

Третий раз подхожу к этому скрипту и опять безуспешно, не могу понять в чем дело, на странице скрипт стоит, взял один в один с Друпал.ру, добавил в comments.php.tpl такой код

<?php
<img onclick="insertQuote();" onmouseover="getText('sokol');"
title="Выделите текст и нажмите эту кнопку, чтобы вставить цитату"
id="img_quote" src="http://www.drupal.ru/sites/all/themes/novosibirsk/img/icons/blog_pencil.gif">
?>

но ничего не происходит, может взгляните?

ссылка

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 13 апреля 2011 в 16:49

"<a href="mailto:kpv_dnepr@drupal.org">kpv_dnepr@drupal.org</a>" wrote:
но ничего не происходит, может взгляните?

Проверил. Всё у вас работает, если не считать того, что анкор ссылки набран в какой-то неправильной кодировке — у меня он отображается вопросами.

Аватар пользователя kpv_dnepr@drupal.org kpv_dnepr@drupal.org 14 апреля 2011 в 12:25

"<a href="mailto:ingumsky@drupal.org">ingumsky@drupal.org</a>" wrote:
Проверил. Всё у вас работает

Да, сам скрипт поборол, теперь не могу сделать что б имя пользователя писал, ставил
<?phponmouseover="getText('<?php print $account->name; ?>');"?>
<?phponmouseover="getText('<?php $node->user_name; ?>');"?>

а ставит только кавычки, и никак.

Что на Drupal.ru стоит?

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 14 апреля 2011 в 16:47

"<a href="mailto:kpv_dnepr@drupal.org">kpv_dnepr@drupal.org</a>" wrote:
Да, сам скрипт поборол, теперь не могу сделать что б имя пользователя писал, ставил

У меня на сайте была та же фигня. Это связано с тем, как формируется массив $links, из которого и выводятся ссылки под каждым комментариям. Я не разобрался и в итоге забил на это — добавил сделанные руками кнопки цитирования и shout (обратиться по имени) в тело комментария (а точнее — в author_pane, который там использую).

Аватар пользователя Радосвет Радосвет 9 июля 2011 в 10:41

"Sinn" wrote:
Переработал все выше написанное и оформил это все в виде модуля buquote. Взял за основу quote - там идет хороший фильтр. Добавил js код обработки клика, добавил добавление ссылки "Цитировать", сразу все перевел на русский. Функцию изменения настроек модуля убрал полностью. Так что надо просто включить модуль и включить "Quote filter" в "Форматы ввода".

Для 7 друпала не будет работать?

Логотип drupal.ru

Содержимое сайта публикуется на условиях CreativeCommons Attribution-ShareAlike 3.0 или более поздней версии. Программные коды в тексте статей — на условиях GNU GPL v2 или более поздней версии.

Документация по совместной работе с репозиторием drupal.ru – https://docs.drupal.ru/code

Drupal – торговая марка Дриса Бёйтарта

12+

AltStyle によって変換されたページ (->オリジナル) /