Модификация работы кнопки "цитата". Автор сего чуда - Uho

Ссылка "цитата", та которая над аватарой

в posting_buttons.html после

Код: Выделить всё

<script type="text/javascript" src="{T_TEMPLATE_PATH}/editor.js"></script>
добавляем функуцию addsuperquote

Код: Выделить всё

<script type="text/javascript">
function addsuperquote(post_id, username, post_date)
{
   var message_name = 'message_' + post_id;
   var theSelection = '';
   var divarea = false;


   if (document.all)
   {
      divarea = document.all[message_name];

   }
   else
   {
      divarea = document.getElementById(message_name);

   }

   // Get text selection - not only the post content :(
   if (window.getSelection)
   {
      theSelection = window.getSelection().toString();
   }
   else if (document.getSelection)
   {
      theSelection = document.getSelection();
   }
   else if (document.selection)
   {
      theSelection = document.selection.createRange().text;
   }

   if (theSelection == '' || typeof theSelection == 'undefined' || theSelection == null)
   {
      if (divarea.innerHTML)
      {
         theSelection = divarea.innerHTML.replace(/<br>/ig, '\n');
         theSelection = theSelection.replace(/<br\/>/ig, '\n');
         theSelection = theSelection.replace(/&lt\;/ig, '<');
         theSelection = theSelection.replace(/&gt\;/ig, '>');
         theSelection = theSelection.replace(/&amp\;/ig, '&');
         theSelection = theSelection.replace(/&nbsp\;/ig, ' ');


      }
      else if (document.all)
      {
         theSelection = divarea.innerText;

      }
      else if (divarea.textContent)
      {
         theSelection = divarea.textContent;

      }
      else if (divarea.firstChild.nodeValue)
      {
         theSelection = divarea.firstChild.nodeValue;

      }
   }

   if (theSelection)
   {
insert_text('[superquote=' + username + ',' + post_id + ',' + post_date + ']' + theSelection + '[/superquote]');
   }
   return;
}
</script>

в viewtopic_body.html

Код: Выделить всё

<!-- IF QUICK_REPLY -->
            ...
         <!-- ENDIF -->
заменяем на

Код: Выделить всё

<!-- IF QUICK_REPLY -->
            <tr>
               <td class="postdetails"><a href="#postform" onclick="addsuperquote({postrow.POST_ID},'{postrow.POSTER_QUOTE}','{postrow.POST_DATE}'); insert_text('\r\n'); return false;" title="{L_QUOTE_TEXT}">{L_QUOTE}</a></td>
            </tr>
         <!-- ENDIF -->

добавляем невидимый BBCode

Код: Выделить всё

[superquote={TEXT1},{NUMBER},{TEXT2}]{TEXT3}[/superquote]

Код: Выделить всё

<div class="quotetitle"><a href="./viewtopic.php?p={NUMBER}#p{NUMBER}" title="Добавлено: {TEXT2}">{TEXT1} писал(а):</a></div><div class="quotecontent">{TEXT3}</div>

если хочешь, чтобы без всплывающей подсказки, то замена HTML BBCode'а должна быть типа такой:

Код: Выделить всё

<div class="quotetitle"><a href="./viewtopic.php?p={NUMBER}#p{NUMBER}">Добавлено: {TEXT2}, {TEXT1} писал(а):</a></div><div class="quotecontent">{TEXT3}</div>

Кнопка цитата. Работает и как ссылка над аватарой (если текст выделен), и как цитирование всего поста (если выделения нет)

идем в viewtopic_body.html
ищем

Код: Выделить всё

<!-- IF postrow.U_QUOTE --><a href="{postrow.U_QUOTE}">{QUOTE_IMG}</a> <!-- ENDIF -->
заменяем на

Код: Выделить всё

<!-- IF postrow.U_QUOTE --><!-- IF QUICK_REPLY --><a href="#postform" onclick="addsuperquote({postrow.POST_ID},'{postrow.POSTER_QUOTE}','{postrow.POST_DATE}'); insert_text('\r\n'); return false;" title="{L_QUOTE_TEXT}">{QUOTE_IMG}</a><!-- ELSE --><a href="{postrow.U_QUOTE}">{QUOTE_IMG}</a><!-- ENDIF --><!-- ENDIF -->

ищем

Код: Выделить всё

<div class="postbody">{postrow.MESSAGE}</div>
заменяем на

Код: Выделить всё

<div class="postbody" id="message_{postrow.POST_ID}">{postrow.MESSAGE}</div>

ищем

Код: Выделить всё

<!-- IF QUICK_REPLY -->
            ....
<!-- ENDIF -->
удаляем это или закомменчиваем

идем в posting_buttons.html
в функции addsuperquote()
заменяем

Код: Выделить всё

         theSelection = divarea.innerHTML.replace(/<br>/ig, '\n');
         theSelection = theSelection.replace(/<br\/>/ig, '\n');
         theSelection = theSelection.replace(/&lt\;/ig, '<');
         theSelection = theSelection.replace(/&gt\;/ig, '>');
         theSelection = theSelection.replace(/&amp\;/ig, '&');
         theSelection = theSelection.replace(/&nbsp\;/ig, ' ');
на

Код: Выделить всё

window.location='http://адрес_форума/posting.php?mode=quote&f={FORUM_ID}&p='+post_id;
Комментарии: 13

АрианАндрей 08 дек 2014, 16:17 Сообщение

Помогите, пожалуйста, переделать код под мой стиль.
У меня код цитаты такой:

Код: Выделить всё

<!-- IF postrow.U_QUOTE --><a class="profile-button" href="{postrow.U_QUOTE}" title="{L_REPLY_WITH_QUOTE}"><span>Цитата</span></a>&#160;<!-- ENDIF -->
Я же хочу , чтобы цитата работала и как ссылка над аватарой (если текст выделен), и как цитирование всего поста (если выделения нет), но не хватает ума переделать этот код под свои потребности.

Код: Выделить всё

    <!-- IF postrow.U_QUOTE --><!-- IF QUICK_REPLY --><a href="#postform" onclick="addsuperquote({postrow.POST_ID},'{postrow.POSTER_QUOTE}','{postrow.POST_DATE}'); insert_text('\r\n'); return false;" title="{L_QUOTE_TEXT}">{QUOTE_IMG}</a><!-- ELSE --><a href="{postrow.U_QUOTE}">{QUOTE_IMG}</a><!-- ENDIF --><!-- ENDIF --> 
И подскажите, надо ли что-то переделывать в остальных приведённых кодах?
  • 0

CabinetAdmin 08 дек 2014, 17:34 Сообщение

Вроде как должна быть такого типа:

Код: Выделить всё

<!-- IF postrow.U_QUOTE --><!-- IF QUICK_REPLY --><a class="profile-button"  href="#postform" onclick="addsuperquote({postrow.POST_ID},'{postrow.POSTER_QUOTE}','{postrow.POST_DATE}'); insert_text('\r\n'); return false;" title="{L_QUOTE_TEXT}"><span>Цитата</span></a><!-- ELSE --><a class="profile-button"  href="{postrow.U_QUOTE}" title="{L_REPLY_WITH_QUOTE}"><span>Цитата</span></a><!-- ENDIF -->&#160;<!-- ENDIF -->
Ариан » Сегодня, 18:17 писал(а):И подскажите, надо ли что-то переделывать в остальных приведённых кодах?
Если только это место:

Код: Выделить всё

<!-- IF QUICK_REPLY -->
            <tr>
               <td class="postdetails"><a href="#postform" onclick="addsuperquote({postrow.POST_ID},'{postrow.POSTER_QUOTE}','{postrow.POST_DATE}'); insert_text('\r\n'); return false;" title="{L_QUOTE_TEXT}">{L_QUOTE}</a></td>
            </tr>
         <!-- ENDIF -->
тут таблица не нужна будет.
  • 0
Хочешь поблагодарить? Есть способы: заходи на форум, создавай темы, делись опытом и наработками, общайся!

АрианАндрей 08 дек 2014, 18:42 Сообщение

Не могу найти этот код, чтобы заменить. В указанном шаблоне такой кусок отсутствует.

Код: Выделить всё

          theSelection = divarea.innerHTML.replace(/<br>/ig, '\n');
             theSelection = theSelection.replace(/<br\/>/ig, '\n');
             theSelection = theSelection.replace(/&lt\;/ig, '<');
             theSelection = theSelection.replace(/&gt\;/ig, '>');
             theSelection = theSelection.replace(/&amp\;/ig, '&');
             theSelection = theSelection.replace(/&nbsp\;/ig, ' ');
  • 0

CabinetAdmin 08 дек 2014, 19:29 Сообщение

Тут по сути два варианта мода. Они как раз по черте в первом сообщении делятся. Этот кусок, это правка первого варианта мода и находится он в добавленном в первый раз скрипте.
  • 0
Хочешь поблагодарить? Есть способы: заходи на форум, создавай темы, делись опытом и наработками, общайся!

АрианАндрей 08 дек 2014, 21:11 Сообщение

Вроде бы заработало. Появился ещё один вопрос. Как оформление цитаты перенести и на суперцитату?
В CSS для цитаты прописано это:

Код: Выделить всё

/* Quote block */
blockquote {
	background: #ebebeb none 6px 8px no-repeat;
	border: 1px solid #dbdbdb;
	font-size: 0.95em;
	margin: 0.5em 1px 0 25px;
	overflow: hidden;
	padding: 5px;
}

blockquote blockquote {
	/* Nested quotes */
	background-color: #bababa;
	font-size: 1em;
	margin: 0.5em 1px 0 15px;	
}

blockquote blockquote blockquote {
	/* Nested quotes */
	background-color: #e4e4e4;
}

blockquote cite {
	/* Username/source of quoter */
	font-style: normal;
	font-weight: bold;
	margin-left: 20px;
	display: block;
	font-size: 0.9em;
}

blockquote cite cite {
	font-size: 1em;
}

blockquote.uncited {
	padding-top: 25px;
}
Код замены в BBкоде вставил этот:

Код: Выделить всё

    <div class="quotetitle"><a href="./viewtopic.php?p={NUMBER}#p{NUMBER}">Добавлено: {TEXT2}, {TEXT1} писал(а):</a></div><div class="quotecontent">{TEXT3}</div>
  • 0

АрианАндрей 09 дек 2014, 00:48 Сообщение

Проблему решил поменяв код замены на

Код: Выделить всё

<blockquote><div><cite> <a href="./viewtopic.php?p={NUMBER}#p{NUMBER}">{TEXT2}, {TEXT1} писал(а):</a></cite>
{TEXT3}</div></blockquote>
  • 0

АрианАндрей 25 ноя 2015, 18:13 Сообщение

И вот теперь у меня большая проблема. Предыдущий код замены работает с просильвером, а приведённый автором работает в сабсильвере.
Как сделать, чтобы у меня оба стиля форума одинаково работали? К примеру, если создать ещё один скрытый ВВ-код, что и где надо будет поменять в шаблонах?.
  • 0

CabinetAdmin 25 ноя 2015, 20:11 Сообщение

Я если честно не понял, в чём заключается проблема? Для просильвера свою замену, для саба свою... Ббкод это ббкод, какая ему разница какой стиль... Он на обоих стилях будет отображаться одинаково.
  • 0
Хочешь поблагодарить? Есть способы: заходи на форум, создавай темы, делись опытом и наработками, общайся!

АрианАндрей 25 ноя 2015, 20:37 Сообщение

Замена HTML в ВВ-коде для сабсильвера работает эта:

Код: Выделить всё

<div class="quotetitle"><a href="./viewtopic.php?p={NUMBER}#p{NUMBER}">Добавлено: {TEXT2}, {TEXT1} писал(а):</a></div><div class="quotecontent">{TEXT3}</div>
для просильвера работает эта:

Код: Выделить всё

<blockquote><div><cite> <a href="./viewtopic.php?p={NUMBER}#p{NUMBER}">{TEXT2}, {TEXT1} писал(а):</a></cite>
{TEXT3}</div></blockquote>
Т.е. суперцитата одновременно в двух стилях не хочет работать. Я это проверил на двух форумах.
  • 0

CabinetAdmin 25 ноя 2015, 20:52 Сообщение

Завтра посмотрю, а то уже так не помню...

зы. А помимо ббкода, все остальные правки сделаны в обоих стилях? И не работает как, в обоих или только в одном?
  • 0
Хочешь поблагодарить? Есть способы: заходи на форум, создавай темы, делись опытом и наработками, общайся!

АрианАндрей 25 ноя 2015, 21:41 Сообщение

Все правки сделаны и перепроверены уже давно. У меня на одном форуме просильвер, на втором сабсильвер. Сейчас на втором запускаю просильвер. Долго мучился, пока не вспомнил, что были траблы больше года назад, когда одновременно на двух форумах суперцитату запускал. Сейчас на модернизируемом форуме суперцитата работает в том стиле, замену HTML которого я вставляю в ВВ-код.
  • 0

CabinetAdmin 26 ноя 2015, 19:53 Сообщение

Поставил на тестовом форуме, на просильвер и сабсильвер с обоими заменами - работает. Единственный момент, это когда меняешь замену, то цитата правильно отображается либо в том, либо в другом стиле... Чтобы они отображались одинаково надо просто добавить подходящие стили.

Вот например, если использовать замену:

Код: Выделить всё

<blockquote><div><cite><a href="./viewtopic.php?p={NUMBER}#p{NUMBER}">{TEXT2}, {TEXT1} {L_WROTE}:</a></cite>{TEXT3}</div></blockquote>
это код просильверовской цитаты, в нём он будет отображаться так же как и родной, а в сабе без дизайна. Вот чтобы и в нём он начал отображаться как встроенная цитата можно добавить стили. Вот так будет выглядеть стиль для стандартного оформления цитаты в subsilver2:

Код: Выделить всё

blockquote {
	margin: 10px 5px;
	padding: 0 5px 5px;
	border-color: #A9B8C2;
	border-width: 0 1px 1px 1px;
	border-style: solid;
	font-weight: normal;
	font-size: 1em;
	line-height: 1.4em;
	font-family: "Lucida Grande", "Trebuchet MS", Helvetica, Arial, sans-serif;
	background-color: #FAFAFA;
	color: #4B5C77;
}

blockquote cite {
	margin: 0 -5px 5px;
	padding: 4px;
	border-width: 1px 1px 0 1px;
	border-style: solid;
	border-color: #A9B8C2;
	color: #333333;
	background-color: #A9B8C2;
	font-size: 0.85em;
	font-weight: bold;
	display: block;
}

blockquote cite cite {
	font-size: 1em;
}
И всё.
  • 1
Хочешь поблагодарить? Есть способы: заходи на форум, создавай темы, делись опытом и наработками, общайся!

АрианАндрей 28 ноя 2015, 11:41 Сообщение

Спасибо! Всё заработало.
  • 0