• 236 ЛС Pm All In One - вывод в окно о новых ЛС текста и ав • 
Добавил аватар пользователя и само сообщение
При создании темы о модах для двигателя форумов phpBB ветки до версии 3.0.14 название темы должно начинаться с названия мода на английском, без указания версии, затем тире, затем короткое название мода на русском с маленькой буквы. Создание тем не о модах в данном подфоруме запрещено. Посторонние темы о двиге и посторонних проблемах для ветки до версии 3.0.14 в соседнем подфоруме.

    236 ЛС Pm All In One - вывод в окно о новых ЛС текста и ав

Сообщение Разместил Александр Лешванов 24 апр 2017, 08:22

От автора Garret_Dark отдельной темой вслед этой - 145 Pm All In One - всплывающее окно о новых ЛС
Собственно решил между делом доделать данную модификацию дабы соответствовала теме "Все включено".
Добавил аватар пользователя и само сообщение, окно растягивается для прочтения сообщения, переход к сообщениям осуществляется нажатием на текст.
Разметку HTML и CSS выкладывать не буду, поскольку они сделаны под не стандартный стиль, и работать в других стилях не будут, но самую идею можно увидеть на изображении.

Аватар пользователя
Александр Лешванов
(можно Николаич)
(можно Николаич) 
*
Google Chrome 49.0.262 Google Chrome 49.0.262
Windows XP Windows XP
Монитор: 1152 x 864 1152 x 864

  236 ЛС Pm All In One - вывод в окно о новых ЛС текста и ав

Сообщение Разместил Александр Лешванов 24 апр 2017, 08:25

От автора Garret_Dark -
Код , поставить вместо того, что дан в инструкции в functions.php для мода 145 Pm All In One - всплывающее окно о новых ЛС
Код: выделить все
            $pm_user_id = 'u_' . $user->data['user_id'];
         $pm_user_last_privmsg = $user->data['user_last_privmsg'];   
         $sql = "SELECT p.msg_id, p.author_id, p.message_subject, p.message_text, p.message_time, u.username, u.user_avatar, u.user_avatar_type, u.user_avatar_width, u.user_avatar_height
            FROM " . PRIVMSGS_TABLE . " AS p, " . USERS_TABLE . " AS u
            WHERE p.message_time = $pm_user_last_privmsg
               AND p.author_id = u.user_id
               AND p.to_address = '$pm_user_id'";
         $result = $db->sql_query($sql);
         while( ($row = $db->sql_fetchrow($result)) && ($row['msg_id'] != '') )
         {
            // Assign specific vars
            $template->assign_vars(array(
               'S_PM_SENDER'   => $row['username'],
               'S_PM_SUBJECT'   => $row['message_subject'],
               'S_PM_TEXT'       => $row['message_text'],
               'S_PM_DATE'      => $user->format_date($row['message_time'], $format = 'd.m.Y, H:i'),
               'AVATAR_PM'     => $row['user_avatar'] ? get_user_avatar($row['user_avatar'], $row['user_avatar_type'], ($row['user_avatar_width'] > $row['user_avatar_height']) ? 90 : (90 / $row['user_avatar_height']) * $row['user_avatar_width'], ($row['user_avatar_height'] > $row['user_avatar_width']) ? 90 : (90 / $row['user_avatar_width']) * $row['user_avatar_height']) : '',
               )
            );
         }
         $db->sql_freeresult($result);

По коду:
{S_PM_SENDER}- автор сообщения
{S_PM_SUBJECT}- тема ЛС
{S_PM_TEXT} - текст ЛС
{S_PM_DATE}- дата
{AVATAR_PM} - аватарка отправителя
Все эти переменные вставить в шаблон на месте вывода сообщения из мода и оформить
А как быть со смайлами и картинками в теге [ img][ /img]? И с другими тегами? Есть возможность победить? Лично я, что знал (а это почти ничего), попробовал, на этом мысль кончилась... Если в ЛС есть теги - окно даже теряет аву, автора и всю его менюшку...

А парсить надо. Ибо
Вот это
Код: выделить все
               'S_PM_TEXT'       => $row['message_text'],

неправильно
Так надо
Код: выделить все
   $sql = "SELECT p.msg_id, p.author_id, p.message_subject, p.message_text, p.message_time, p.bbcode_bitfield, p.bbcode_uid, u.username, u.user_avatar, u.user_avatar_type, u.user_avatar_width, u.user_avatar_height
            FROM " . PRIVMSGS_TABLE . " AS p, " . USERS_TABLE . " AS u
            WHERE p.message_time = $pm_user_last_privmsg
               AND p.author_id = u.user_id
               AND p.to_address = '$pm_user_id'";
   $result = $db->sql_query($sql);
   $row = $db->sql_fetchrow($result);
   $message = $row['message_text'];
   $bbcode_bitfield = true;
   $bbcode = new bbcode(base64_encode($bbcode_bitfield));
   // Second parse bbcode here
   if ($row['bbcode_bitfield'])
   {
      $bbcode->bbcode_second_pass($message, $row['bbcode_uid'], $row['bbcode_bitfield']);
   }
   $message = bbcode_nl2br($message);
   $message = smiley_text($message);
   // Assign specific vars
   $template->assign_vars(array(
      'S_PM_SENDER'   => $row['username'],
      'S_PM_SUBJECT'   => $row['message_subject'],
      'S_PM_TEXT'       => $message,
      'S_PM_DATE'      => $user->format_date($row['message_time'], $format = 'd.m.Y, H:i'),
      'AVATAR_PM'     => $row['user_avatar'] ? get_user_avatar($row['user_avatar'], $row['user_avatar_type'], ($row['user_avatar_width'] > $row['user_avatar_height']) ? 90 : (90 / $row['user_avatar_height']) * $row['user_avatar_width'], ($row['user_avatar_height'] > $row['user_avatar_width']) ? 90 : (90 / $row['user_avatar_width']) * $row['user_avatar_height']) : '',
      )
   );
   $db->sql_freeresult($result);

Предварительно нужно подключить
Код: выделить все
include($phpbb_root_path . 'includes/bbcode.' . $phpEx);

Ребяты, раз допилка вставляется в функцию page_header(),то класс bbcode должен подключаться там в ./includes/functions.php
Найти
Код: выделить все
         $bbcode_bitfield = true;

Добавить перед
Код: выделить все
         include_once($phpbb_root_path . 'includes/bbcode.' . $phpEx);


УсеЁЁЁЁ!!!

Аватар пользователя
Александр Лешванов
(можно Николаич)
(можно Николаич) 
*
Google Chrome 49.0.262 Google Chrome 49.0.262
Windows XP Windows XP

  236 ЛС Pm All In One - вывод в окно о новых ЛС текста и ав

Сообщение Разместил Александр Лешванов 24 апр 2017, 08:30

В итоге получаем.....
Выкидываем все по инструкции - 145 Pm All In One - всплывающее окно о новых ЛС
Затем:
Open: includes/functions.php
Находим:
Код: выделить все
else
         {
            $s_privmsg_new = false;
         }

Добавляем после:
Код: выделить все
          $pm_user_id = 'u_' . $user->data['user_id'];
         $pm_user_last_privmsg = $user->data['user_last_privmsg'];   
            $sql = "SELECT p.msg_id, p.author_id, p.message_subject, p.message_text, p.message_time, p.bbcode_bitfield, p.bbcode_uid, u.username, u.user_avatar, u.user_avatar_type, u.user_avatar_width, u.user_avatar_height
                    FROM " . PRIVMSGS_TABLE . " AS p, " . USERS_TABLE . " AS u
                    WHERE p.message_time = $pm_user_last_privmsg
                       AND p.author_id = u.user_id
                       AND p.to_address = '$pm_user_id'";
           $result = $db->sql_query($sql);
           $row = $db->sql_fetchrow($result);
           $message = $row['message_text'];
         include_once($phpbb_root_path . 'includes/bbcode.' . $phpEx);         
           $bbcode_bitfield = true;
            $bbcode = new bbcode(base64_encode($bbcode_bitfield));
            // Second parse bbcode here
           if ($row['bbcode_bitfield'])
           {
              $bbcode->bbcode_second_pass($message, $row['bbcode_uid'], $row['bbcode_bitfield']);
           }
           $message = bbcode_nl2br($message);
           $message = smiley_text($message);
           // Assign specific vars
           $template->assign_vars(array(
              'S_PM_SENDER'   => $row['username'],
              'S_PM_SUBJECT'   => $row['message_subject'],
              'S_PM_TEXT'       => $message,
              'S_PM_DATE'      => $user->format_date($row['message_time'], $format = 'd.m.Y, H:i'),
              'AVATAR_PM'     => $row['user_avatar'] ? get_user_avatar($row['user_avatar'], $row['user_avatar_type'], ($row['user_avatar_width'] > $row['user_avatar_height']) ? 90 : (90 / $row['user_avatar_height']) * $row['user_avatar_width'], ($row['user_avatar_height'] > $row['user_avatar_width']) ? 90 : (90 / $row['user_avatar_width']) * $row['user_avatar_height']) : '',
              )
           );
               $db->sql_freeresult($result);

Open: styles/prosilver/template/overall_header.html
Находим и выкидываем весь блок от
Код: выделить все
<!-- IF S_USER_PM_POPUP and S_NEW_PM -->

до его
Код: выделить все
<!-- ENDIF -->

Там может быть все, что угодно...у каждого может быть свое...
Например по инструкции к моду у Гаррета надо выкинуть это:
Код: выделить все
   <!-- IF S_USER_PM_POPUP and S_NEW_PM -->
      var url = '{UA_POPUP_PM}';
      window.open(url.replace(/&/g, '&'), '_phpbbprivmsg', 'height=225,resizable=yes,scrollbars=yes, width=400');
   <!-- ENDIF -->

Затем находим самую первую сверху (это важно!!!):
Код: выделить все
<script type="text/javascript"

И добавляем перед:
Код: выделить все
<!-- IF S_USER_UNREAD_PRIVMSG > 0 -->
<script type='text/javascript'>
   var newTxt="<<<! {L_YOU_NEW_PM} !>>>";
var oldTxt=document.title;
function migalka(){
    if(document.title==oldTxt){
        document.title=newTxt;
    }else{
        document.title=oldTxt;
    }
}
var timer = setInterval(migalka,1000);
</script>
<!-- ENDIF -->

Этой правкой мы вставляем моргалку в титлу вкладок браузера (можно и не вставлять, если нервирует)
Затем лезем по файлу ниже и после блока вывода инфы о закрытом форуме:
Код: выделить все
            <strong>{L_INFORMATION}:</strong> {L_BOARD_DISABLED}
         <span class="corners-bottom"><span></span></span></div>
      </div>
   <!-- ENDIF -->

Добавляем код всплывающего окна моей сборки:
Код: выделить все
<!-- ВСПЛЫВАШКА О НОВЫХ ЛС -->
<!-- IF S_USER_PM_POPUP and S_NEW_PM -->
<div id="newpm">
<div id="hidden" class="m-stat-pm" style="text-align: center;" valign="middle">
      <table style="border-spacing: 0px; text-align: center;" border="0" >
      <tr><td colspan="2" style="text-align: center;" ><b style="font-size: 1.3em; color: #000060;">{L_YOU_NEW_PM}</b></td></tr>
      <tr><td colspan="2" style="text-align: center;" ><b style="font-size: 1.3em; color: #000060;" >{L_AUTHOR}: &nbsp; {S_PM_SENDER}</b></td></tr>
      <tr><td colspan="2" style="text-align: center;" ><b style="font-size: 1.3em; color: #000060;" >{L_SUBJECT}: &nbsp; {S_PM_SUBJECT}</b></td></tr>
      <tr><td colspan="2" style="text-align: center;" ><b style="font-size: 1.3em; color: #000060;" >{L_TIME}: &nbsp; {S_PM_DATE}</b></td></tr>
      <tr><td style="text-align: center;" ><b>{AVATAR_PM}</b></td></tr>
      <tr><td align="left"><b style="font-size: 1.3em; color: #000000;" >{S_PM_TEXT}</b></td></tr>
      <tr><td colspan="2" style="text-align: center;" ><a style="color: #000060; font-size: 1.3em;" href="{U_PRIVATEMSGS}">{L_VIEWING_PRIVATE_MESSAGES}</a></td></tr>
      <tr><td colspan="2" style="text-align: center;" ><a style="color: #000060; font-size: 1.3em;" href='' onclick="dE('hidden');return false;">{L_CLOSE_WINDOW}</a></td></tr>
      <embed pluginspage="http://www.fotovideoforum.ru/plplayer.swf" type="application/x-mplayer2" src="https://fotovideoforum.ru/sound.mp3" width="0" height="0" autostart="1"></embed>
      </table>
</div>
</div>
<!-- ENDIF -->

Файл музыкального сопровождения всплывающего окна с названием sound.mp3кидаем в корень форума....
Надеюсь, проигрывательplplayer.swfу вас там тоже имеется....
Затем: Open:styles/prosilver/theme/common.css
Находим в нем блок :
Код: выделить все
#newpm {
тут много буковок
}

и заменяем на
Код: выделить все
#newpm {
   position: fixed;
   top: 15%;
   left: 30%;
   z-index: 100;
   max-width: 550px;
   max-height: 500px;
   overflow: auto;
}

Блок ниже :
Код: выделить все
.newpm {
   width: 450px;
   height: auto;
   background-image: url('{T_THEME_PATH}/images/bg.png') no-repeat;
   background-position: right bottom;
   background-repeat: no-repeat;
   border: none;
}

Можно без сожаления тоже удалить....
Затем: Open:styles/prosilver/theme/content.css
Находим:
Код: выделить все
/* Content Styles
---------------------------------------- */

и добавляем с новой строки... (если нет такого - просто в самый верх файла)
Код: выделить все
.m-stat-pm {
    background: #E7E7F7;
   padding: 4px 4px 5px;
   position: relative;
   border: 1px solid #000066;
   border-radius: 5px;
}

В строке border: 1px solid #000066; задаем толщину окаемки и цвет заливки меняем на нужный...
Кешируемся...Много,много раз!!!!
Наслаждаемся окном ЛС со скроллом по вертикале в случае слишком длинного и большого ЛС...
В файле русификации перевод от инструкции по моду оставляйте....
Картинку от мода можно тож выкинуть.... Надоели эти картинки на каждом шагу...

Аватар пользователя
Александр Лешванов
(можно Николаич)
(можно Николаич) 
*
Google Chrome 49.0.262 Google Chrome 49.0.262
Windows XP Windows XP

  236 ЛС Pm All In One - вывод в окно о новых ЛС текста и ав

Сообщение Разместил Александр Лешванов 19 ноя 2019, 07:35

Полная инструкция в архиве -

Аватар пользователя
Александр Лешванов
(можно Николаич)
(можно Николаич) 
*
Google Chrome 49.0.262 Google Chrome 49.0.262
Windows XP Windows XP

Вернуться в 450 модов движка форумов phpBB (до версии 3.0.14)



 • Блок вывода аналогичных по названию других тем нашего форума • 

HTML5 Validated Счетчик ИКС Яндекс.Метрика
cron