Полезная информация


----

Начать новую тему Ответить на тему

Полезен ли данный мод?
Да применю у себя.
Не не хочу все правлю вручную.
Вы можете выбрать 1 вариант.

Результаты голосования
АвторСообщение

 Сообщение Forum Background for phpBB3 мод для оформления форума 2013-01-19

Аватар пользователя

Что да как.

Представлю вам очередной мод Forum Background for phpBB3, он позволит вам украсить вашу главную страницу где расположен список ваших форумов или подфорумы. Я тоже долго думал над дизайном и думаю данный мод хороший помощник в этом. Внизу предоставлены скрины автора и с моего форума(хотя подправить таки еще прийдется :-00): ).

Установка.

Скачиваем архив и устанавливаем как и другие моды по инструкции.Правок не очень много но будьте внимательны.
Вложение :
Forum_Background_for_phpBB3_1_0_10.zip [102.59 KiB]
Скачиваний: 162

Внимание !!! В инструкции для сабсильвера допущена ошибка !!! В первой же правке нам надо вставить
!-- ELSEIF forumrow.S_IS_LINK -->
      <tr>
         <td class="row1" width="50" align="center" style="background-image: url({forumrow.FORUM_BG}); background-repeat: repeat;">{forumrow.FORUM_FOLDER_IMG}</td>
         <td class="row1" style="background-image: url({forumrow.FORUM_BG}); background-repeat: repeat;">
 

И если приглядеться к строке
!-- ELSEIF forumrow.S_IS_LINK -->
 

То видна ошибка, вместо этой строки должна быть строка
<!-- ELSEIF forumrow.S_IS_LINK -->
 

Русификация

Открываем language/ru/acp файл forums.php

Находим
 

Добавляем перед
$lang = array_merge($lang, array(
   'FORUM_BG'                   => 'Фоновая картинка форума',
   'FORUM_BG_EXPLAIN'   => 'Путь к вашей картинке <em>images/forum_bg/test.gif</em>.',
));
 

Как пользоваться.

После установки.
Для вставки изображения вам надо залить файлы в папку images/forum_bg, потом зайти в административный центр на вкладку форумы, на страничке редактирования у вас появится новое поле "Фоновая картинка форума", вот туда вы и прописываете путь к вашей картинки, по умолчанию это путь images/forum_bg/"ваша картинка".

Скриншоты работы мода:
маленькое примечание что бы так было и у вас надо фото еще и обработать фотошопом(по умолчанию фото должно быть такого размера как и один подфорум или градиентом
Вложение :
Комментарий к файлу: От автора мода

Вложение :
Комментарий к файлу: один раздел моего форума

Вложение :
Комментарий к файлу: админка моего форума




_________________
Подпись:
back'up придумали трусы Ваша воля моими руками, но платно. Стучим в skype akella1900.

Теги темы
Forum Background for phpBB3, форомление, форум,форумы,украсить
          Вернуться наверх  
 


Аватар пользователя

Лучше и кеш стилей чистить для надежности
Да и все у вас есть, просто мод спасибок стоит, вот к примеру то что вы первым не могли найти
<dl class="<!-- IF forumrow.S_THANKS_FORUM_REPUT_VIEW_COLUMN and not S_IS_BOT -->thanks<!-- ELSE -->icon<!-- ENDIF -->" style="background-image: url({forumrow.FORUM_FOLDER_IMG_SRC}); background-repeat: no-repeat;">

Отсечь правки мода спасибок и будет искомая строка


_________________
Подпись:
-_- -_-
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!
          Вернуться наверх  
 


Аватар пользователя

Добрый вечер!!
все поставил, сделал запрос к БД
При добавлении изменённого файла functions_content.php
выбивает при заходе на тему форума ошибку.

Общая ошибка
SQL ERROR [ mysql4 ]

Unknown column 'forum_bg' in 'field list' [1054]

SQL

SELECT forum_bg, forum_id, forum_name, parent_id, forum_type, left_id, right_id FROM phpbb_1forums ORDER BY left_id ASC

BACKTRACE

FILE: (not given by php)
LINE: (not given by php)
CALL: msg_handler()

FILE: [ROOT]/includes/db/dbal.php
LINE: 757
CALL: trigger_error()

FILE: [ROOT]/includes/db/mysql.php
LINE: 193
CALL: dbal->sql_error()

FILE: [ROOT]/includes/functions_content.php
LINE: 125
CALL: dbal_mysql->sql_query()

FILE: [ROOT]/viewforum.php
LINE: 151
CALL: make_jumpbox()

Когда ставлю старый файл functions_content.php - все начинает работать по старому)))
Кто подскажет что не так.
Все правки проверял не один раз!


          Вернуться наверх  
 


Аватар пользователя

AAA писал(а):

Unknown column 'forum_bg' in 'field list'

Хмм, сначала правки, а потом запрос - так делали?


_________________
Подпись:
-_- -_-
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!
          Вернуться наверх  
 


Аватар пользователя

DeaDRoMeO писал(а):

Хмм, сначала правки, а потом запрос - так делали?


Да!
даже загружал старую БД! после чего сделал запрос((


          Вернуться наверх  
 


Аватар пользователя

Интересно, пишет просто что нет нужной таблицы в вашей БД. А вы как запрос проводите? Результат положительный? Что пишет после выполнения запроса?


_________________
Подпись:
-_- -_-
На вопросы, связанные с phpBB, по ЛС не отвечаю !!!
          Вернуться наверх  
 


Аватар пользователя

Захожу в базу, выбираю таблицу форума, создаю запрос.
пишет что таблица создана.

Сообщение добавлено... спустя 1 час 23 минуты 2 секунды:
AAA писал(а):

Захожу в базу, выбираю таблицу форума, создаю запрос.
пишет что таблица создана.



Пожалуйста Зарегистрируйтесь чтобы увидеть ссылку


          Вернуться наверх  
 


Аватар пользователя

Пишут:
Цитата:
Общая ошибка
SQL ERROR [ mysqli ]

Unknown column 'forum_bg' in 'field list' [1054]

SQL

SELECT forum_bg, forum_id, forum_name, parent_id, forum_type, left_id, right_id FROM phpbb_forums ORDER BY left_id ASC

BACKTRACE

FILE: (not given by php)
LINE: (not given by php)
CALL: msg_handler()

FILE: [ROOT]/includes/db/dbal.php
LINE: 757
CALL: trigger_error()

FILE: [ROOT]/includes/db/mysqli.php
LINE: 182
CALL: dbal->sql_error()

FILE: [ROOT]/includes/functions_content.php
LINE: 125
CALL: dbal_mysqli->sql_query()

FILE: [ROOT]/portal.php
LINE: 185
CALL: make_jumpbox()


В первой же правке я перепутала код, но сейчас изменила по инструкции и не изменилось ничё, таже ошибка. Код правильный? Ошибок нету?
<dd><input class="text medium" type="text" id="forum_name" name="forum_name" value="{FORUM_NAME}" maxlength="255" /></dd>
   </dl>
<dl>
      <dt><label for="forum_bg">{L_FORUM_BG}:</label><br /><span>{L_FORUM_BG_EXPLAIN}</span></dt>
      <dd><input class="text medium" type="text" id="forum_bg" name="forum_bg" value="{FORUM_BG}" maxlength="255" /></dd>
   </dl>
   <dl>
      <dt><label for="forum_desc">{L_FORUM_DESC}:</label><br /><span>{L_FORUM_DESC_EXPLAIN}</span></dt>
      <dd><textarea id="forum_desc" name="forum_desc" rows="5" cols="45">{FORUM_DESC}</textarea></dd>
      <dd><label><input type="checkbox" class="radio" name="desc_parse_bbcode"<!-- IF S_DESC_BBCODE_CHECKED --> checked="checked"<!-- ENDIF --> /> {L_PARSE_BBCODE}</label>
         <label><input type="checkbox" class="radio" name="desc_parse_smilies"<!-- IF S_DESC_SMILIES_CHECKED --> checked="checked"<!-- ENDIF --> /> {L_PARSE_SMILIES}</label>
         <label><input type="checkbox" class="radio" name="desc_parse_urls"<!-- IF S_DESC_URLS_CHECKED --> checked="checked"<!-- ENDIF --> /> {L_PARSE_URLS}</label></dd>
   </dl>
   <dl>
      <dt><label for="forum_image">{L_FORUM_IMAGE}:</label><br /><span>{L_FORUM_IMAGE_EXPLAIN}</span></dt>
      <dd><input class="text medium" type="text" id="forum_image" name="forum_image" value="{FORUM_IMAGE}" maxlength="255" /></dd>
      <!-- IF FORUM_IMAGE_SRC -->
         <dd><img src="{FORUM_IMAGE_SRC}" alt="{L_FORUM_IMAGE}" /></dd>
      <!-- ENDIF -->
 

почистила кеш браузера и теперь пишут:
Цитата:
Общая ошибка
SQL ERROR [ mysqli ]

Unknown column 'forum_bg' in 'field list' [1054]

Произошла ошибка SQL при выборке на этой странице.


          Вернуться наверх  
 


Аватар пользователя

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


_________________
Подпись:
три головы - это хорошо. но как же трудно придти к согласию...
* белк может помочь, но ставить за кого-то моды не будет... ни платно, ни бесплатно. *
          Вернуться наверх  
 


Аватар пользователя

ЧЁРТ ВОЗЬМИ, где ж мне её теперь найти-то :zvez_ochki:


          Вернуться наверх  
 


Аватар пользователя

там много мелких правок - сложно сказать. сказать можно только одно - это в php-файлах.


_________________
Подпись:
три головы - это хорошо. но как же трудно придти к согласию...
* белк может помочь, но ставить за кого-то моды не будет... ни платно, ни бесплатно. *
          Вернуться наверх  
 


Аватар пользователя

Нашла вот что. В инструкции:
Find

Tip: This may be a partial find and not the whole line.


Code:Select all

   $active_f_name = $active_f_id


In-line Find

Tip: This is a partial match of a line for in-line operations.


Code:Select all

$active_f_name = $active_f_id

In-line Add after




Code:Select all

 = $active_f_bg
 


А у меня получилось так в итоге, потому что там уже был код:
$active_f_name = $active_f_id = $active_f_bg = $active_f_count = $active_f_pct = '';
 
- это неправильная строка да? = $active_f_count = $active_f_pct = ''; - лишнее? Это уже было.


          Вернуться наверх  
 


Аватар пользователя

да нет, скорее всего так и надо.
ведь написано: найти строку (код может быть неполным) - после найденного *** вставить ***. вы так и сделали.


_________________
Подпись:
три головы - это хорошо. но как же трудно придти к согласию...
* белк может помочь, но ставить за кого-то моды не будет... ни платно, ни бесплатно. *
          Вернуться наверх  
 


Аватар пользователя

Милена писал(а):

Нашла вот что. В инструкции:

попробуйте залить все изменения кроме файла functions_content.php (его оставьте без изменений)
Ошибка ушла??


          Вернуться наверх  
 


Аватар пользователя

Цитата:
Ошибка ушла??


Спасибо! Ошибка ушла. Что это значит?


          Вернуться наверх  
 


Аватар пользователя

Милена писал(а):

Спасибо! Ошибка ушла. Что это значит?

не за что((((
все равно ничего не получится (установить фон не получится((((
Просто у меня такая же ф...я(((
тут либо БД, либо какой то косяк в файлах. Не знаю
Попробуйте установить фон!
Ничего????

Почитайте выше, у меня такое же((


          Вернуться наверх  
 


Аватар пользователя

тут уже общественная ошибка?.. прикрепите, ради интереса, ваш файл functions_content.php... или, лучше, скиньте мне его на мыло el1507@rambler.ru...


_________________
Подпись:
три головы - это хорошо. но как же трудно придти к согласию...
* белк может помочь, но ставить за кого-то моды не будет... ни платно, ни бесплатно. *
          Вернуться наверх  
 


Аватар пользователя

Окно "фоновая" картинка появилось в админке, но когда я указываю там ссыль на картинку, опять ошибка возникает.

includes/functions_content.php
<?php
/**
*
* @package phpBB3
* @version $Id$
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
   exit;
}

/**
* gen_sort_selects()
* make_jumpbox()
* bump_topic_allowed()
* get_context()
* decode_message()
* strip_bbcode()
* generate_text_for_display()
* generate_text_for_storage()
* generate_text_for_edit()
* make_clickable_callback()
* make_clickable()
* censor_text()
* bbcode_nl2br()
* smiley_text()
* parse_attachments()
* extension_allowed()
* truncate_string()
* get_username_string()
* class bitfield
*/

/**
* Generate sort selection fields
*/
function gen_sort_selects(&$limit_days, &$sort_by_text, &$sort_days, &$sort_key, &$sort_dir, &$s_limit_days, &$s_sort_key, &$s_sort_dir, &$u_sort_param, $def_st = false, $def_sk = false, $def_sd = false)
{
   global $user;

   $sort_dir_text = array('a' => $user->lang['ASCENDING'], 'd' => $user->lang['DESCENDING']);

   $sorts = array(
      'st'   => array(
         'key'      => 'sort_days',
         'default'   => $def_st,
         'options'   => $limit_days,
         'output'   => &$s_limit_days,
      ),

      'sk'   => array(
         'key'      => 'sort_key',
         'default'   => $def_sk,
         'options'   => $sort_by_text,
         'output'   => &$s_sort_key,
      ),

      'sd'   => array(
         'key'      => 'sort_dir',
         'default'   => $def_sd,
         'options'   => $sort_dir_text,
         'output'   => &$s_sort_dir,
      ),
   );
   $u_sort_param  = '';

   foreach ($sorts as $name => $sort_ary)
   {
      $key = $sort_ary['key'];
      $selected = $$sort_ary['key'];

      // Check if the key is selectable. If not, we reset to the default or first key found.
      // This ensures the values are always valid. We also set $sort_dir/sort_key/etc. to the
      // correct value, else the protection is void. ;)
      if (!isset($sort_ary['options'][$selected]))
      {
         if ($sort_ary['default'] !== false)
         {
            $selected = $$key = $sort_ary['default'];
         }
         else
         {
            @reset($sort_ary['options']);
            $selected = $$key = key($sort_ary['options']);
         }
      }

      $sort_ary['output'] = '<select name="' . $name . '" id="' . $name . '">';
      foreach ($sort_ary['options'] as $option => $text)
      {
         $sort_ary['output'] .= '<option value="' . $option . '"' . (($selected == $option) ? ' selected="selected"' : '') . '>' . $text . '</option>';
      }
      $sort_ary['output'] .= '</select>';

      $u_sort_param .= ($selected !== $sort_ary['default']) ? ((strlen($u_sort_param)) ? '&amp;' : '') . "{$name}={$selected}" : '';
   }

   return;
}

/**
* Generate Jumpbox
*/
function make_jumpbox($action, $forum_id = false, $select_all = false, $acl_list = false, $force_display = false)
{
   global $config, $auth, $template, $user, $db;

   // We only return if the jumpbox is not forced to be displayed (in case it is needed for functionality)
   if (!$config['load_jumpbox'] && $force_display === false)
   {
      return;
   }

   $sql = 'SELECT forum_id, forum_name, parent_id, forum_type, left_id, right_id
      FROM ' . FORUMS_TABLE . '
      ORDER BY left_id ASC';
   $sql = str_replace('SELECT ', 'SELECT forum_bg, ', $sql);
   $result = $db->sql_query($sql, 600);

   $right = $padding = 0;
   $padding_store = array('0' => 0);
   $display_jumpbox = false;
   $iteration = 0;

   // Sometimes it could happen that forums will be displayed here not be displayed within the index page
   // This is the result of forums not displayed at index, having list permissions and a parent of a forum with no permissions.
   // If this happens, the padding could be "broken"

   while ($row = $db->sql_fetchrow($result))
   {
      if ($row['left_id'] < $right)
      {
         $padding++;
         $padding_store[$row['parent_id']] = $padding;
      }
      else if ($row['left_id'] > $right + 1)
      {
         // Ok, if the $padding_store for this parent is empty there is something wrong. For now we will skip over it.
         // @todo digging deep to find out "how" this can happen.
         $padding = (isset($padding_store[$row['parent_id']])) ? $padding_store[$row['parent_id']] : $padding;
      }

      $right = $row['right_id'];

      if ($row['forum_type'] == FORUM_CAT && ($row['left_id'] + 1 == $row['right_id']))
      {
         // Non-postable forum with no subforums, don't display
         continue;
      }

      if (!$auth->acl_get('f_list', $row['forum_id']))
      {
         // if the user does not have permissions to list this forum skip
         continue;
      }

      if ($acl_list && !$auth->acl_gets($acl_list, $row['forum_id']))
      {
         continue;
      }

      if (!$display_jumpbox)
      {
         $template->assign_block_vars('jumpbox_forums', array(
            'FORUM_ID'      => ($select_all) ? 0 : -1,
            'FORUM_NAME'   => ($select_all) ? $user->lang['ALL_FORUMS'] : $user->lang['SELECT_FORUM'],
            'S_FORUM_COUNT'   => $iteration)
         );

         $iteration++;
         $display_jumpbox = true;
      }

      $template->assign_block_vars('jumpbox_forums', array(
         'FORUM_ID'      => $row['forum_id'],
         'FORUM_NAME'   => $row['forum_name'],
         'SELECTED'      => ($row['forum_id'] == $forum_id) ? ' selected="selected"' : '',
         'FORUM_BG'   => $row['forum_bg'],
         'S_FORUM_BG'   => !empty($row['forum_bg']) ? true : false,
         'S_FORUM_COUNT'   => $iteration,
         'S_IS_CAT'      => ($row['forum_type'] == FORUM_CAT) ? true : false,
         'S_IS_LINK'      => ($row['forum_type'] == FORUM_LINK) ? true : false,
         'S_IS_POST'      => ($row['forum_type'] == FORUM_POST) ? true : false)
      );

      for ($i = 0; $i < $padding; $i++)
      {
         $template->assign_block_vars('jumpbox_forums.level', array());
      }
      $iteration++;
   }
   $db->sql_freeresult($result);
   unset($padding_store);

   $template->assign_vars(array(
      'S_DISPLAY_JUMPBOX'   => $display_jumpbox,
      'S_JUMPBOX_ACTION'   => $action)
   );

   return;
}

/**
* Bump Topic Check - used by posting and viewtopic
*/
function bump_topic_allowed($forum_id, $topic_bumped, $last_post_time, $topic_poster, $last_topic_poster)
{
   global $config, $auth, $user;

   // Check permission and make sure the last post was not already bumped
   if (!$auth->acl_get('f_bump', $forum_id) || $topic_bumped)
   {
      return false;
   }

   // Check bump time range, is the user really allowed to bump the topic at this time?
   $bump_time = ($config['bump_type'] == 'm') ? $config['bump_interval'] * 60 : (($config['bump_type'] == 'h') ? $config['bump_interval'] * 3600 : $config['bump_interval'] * 86400);

   // Check bump time
   if ($last_post_time + $bump_time > time())
   {
      return false;
   }

   // Check bumper, only topic poster and last poster are allowed to bump
   if ($topic_poster != $user->data['user_id'] && $last_topic_poster != $user->data['user_id'])
   {
      return false;
   }

   // A bump time of 0 will completely disable the bump feature... not intended but might be useful.
   return $bump_time;
}

/**
* Generates a text with approx. the specified length which contains the specified words and their context
*
* @param   string   $text   The full text from which context shall be extracted
* @param   string   $words   An array of words which should be contained in the result, has to be a valid part of a PCRE pattern (escape with preg_quote!)
* @param   int      $length   The desired length of the resulting text, however the result might be shorter or longer than this value
*
* @return   string         Context of the specified words separated by "..."
*/
function get_context($text, $words, $length = 400)
{
   // first replace all whitespaces with single spaces
   $text = preg_replace('/ +/', ' ', strtr($text, "\t\n\r\x0C ", '     '));

   // we need to turn the entities back into their original form, to not cut the message in between them
   $entities = array('&lt;', '&gt;', '&#91;', '&#93;', '&#46;', '&#58;', '&#058;');
   $characters = array('<', '>', '[', ']', '.', ':', ':');
   $text = str_replace($entities, $characters, $text);

   $word_indizes = array();
   if (sizeof($words))
   {
      $match = '';
      // find the starting indizes of all words
      foreach ($words as $word)
      {
         if ($word)
         {
            if (preg_match('#(?:[^\w]|^)(' . $word . ')(?:[^\w]|$)#i', $text, $match))
            {
               if (empty($match[1]))
               {
                  continue;
               }

               $pos = utf8_strpos($text, $match[1]);
               if ($pos !== false)
               {
                  $word_indizes[] = $pos;
               }
            }
         }
      }
      unset($match);

      if (sizeof($word_indizes))
      {
         $word_indizes = array_unique($word_indizes);
         sort($word_indizes);

         $wordnum = sizeof($word_indizes);
         // number of characters on the right and left side of each word
         $sequence_length = (int) ($length / (2 * $wordnum)) - 2;
         $final_text = '';
         $word = $j = 0;
         $final_text_index = -1;

         // cycle through every character in the original text
         for ($i = $word_indizes[$word], $n = utf8_strlen($text); $i < $n; $i++)
         {
            // if the current position is the start of one of the words then append $sequence_length characters to the final text
            if (isset($word_indizes[$word]) && ($i == $word_indizes[$word]))
            {
               if ($final_text_index < $i - $sequence_length - 1)
               {
                  $final_text .= '... ' . preg_replace('#^([^ ]*)#', '', utf8_substr($text, $i - $sequence_length, $sequence_length));
               }
               else
               {
                  // if the final text is already nearer to the current word than $sequence_length we only append the text
                  // from its current index on and distribute the unused length to all other sequenes
                  $sequence_length += (int) (($final_text_index - $i + $sequence_length + 1) / (2 * $wordnum));
                  $final_text .= utf8_substr($text, $final_text_index + 1, $i - $final_text_index - 1);
               }
               $final_text_index = $i - 1;

               // add the following characters to the final text (see below)
               $word++;
               $j = 1;
            }

            if ($j > 0)
            {
               // add the character to the final text and increment the sequence counter
               $final_text .= utf8_substr($text, $i, 1);
               $final_text_index++;
               $j++;

               // if this is a whitespace then check whether we are done with this sequence
               if (utf8_substr($text, $i, 1) == ' ')
               {
                  // only check whether we have to exit the context generation completely if we haven't already reached the end anyway
                  if ($i + 4 < $n)
                  {
                     if (($j > $sequence_length && $word >= $wordnum) || utf8_strlen($final_text) > $length)
                     {
                        $final_text .= ' ...';
                        break;
                     }
                  }
                  else
                  {
                     // make sure the text really reaches the end
                     $j -= 4;
                  }

                  // stop context generation and wait for the next word
                  if ($j > $sequence_length)
                  {
                     $j = 0;
                  }
               }
            }
         }
         return str_replace($characters, $entities, $final_text);
      }
   }

   if (!sizeof($words) || !sizeof($word_indizes))
   {
      return str_replace($characters, $entities, ((utf8_strlen($text) >= $length + 3) ? utf8_substr($text, 0, $length) . '...' : $text));
   }
}

/**
* Decode text whereby text is coming from the db and expected to be pre-parsed content
* We are placing this outside of the message parser because we are often in need of it...
*/
function decode_message(&$message, $bbcode_uid = '')
{
   global $config;

   if ($bbcode_uid)
   {
      $match = array('<br />', "[/*:m:$bbcode_uid]", ":u:$bbcode_uid", ":o:$bbcode_uid", ":$bbcode_uid");
      $replace = array("\n", '', '', '', '');
   }
   else
   {
      $match = array('<br />');
      $replace = array("\n");
   }

   $message = str_replace($match, $replace, $message);

   $match = get_preg_expression('bbcode_htm');
   $replace = array('\1', '\1', '\2', '\1', '', '');

   $message = preg_replace($match, $replace, $message);
}

/**
* Strips all bbcode from a text and returns the plain content
*/
function strip_bbcode(&$text, $uid = '')
{
   if (!$uid)
   {
      $uid = '[0-9a-z]{5,}';
   }

   $text = preg_replace("#\[\/?[a-z0-9\*\+\-]+(?:=(?:&quot;.*&quot;|[^\]]*))?(?::[a-z])?(\:$uid)\]#", ' ', $text);

   $match = get_preg_expression('bbcode_htm');
   $replace = array('\1', '\1', '\2', '\1', '', '');

   $text = preg_replace($match, $replace, $text);
}

/**
* For display of custom parsed text on user-facing pages
* Expects $text to be the value directly from the database (stored value)
*/
function generate_text_for_display($text, $uid, $bitfield, $flags)
{
   static $bbcode;

   if (!$text)
   {
      return '';
   }

   $text = censor_text($text);

   // Parse bbcode if bbcode uid stored and bbcode enabled
   if ($uid && ($flags & OPTION_FLAG_BBCODE))
   {
      if (!class_exists('bbcode'))
      {
         global $phpbb_root_path, $phpEx;
         include($phpbb_root_path . 'includes/bbcode.' . $phpEx);
      }

      if (empty($bbcode))
      {
         $bbcode = new bbcode($bitfield);
      }
      else
      {
         $bbcode->bbcode($bitfield);
      }

      $bbcode->bbcode_second_pass($text, $uid);
   }

   $text = bbcode_nl2br($text);
   $text = smiley_text($text, !($flags & OPTION_FLAG_SMILIES));

   return $text;
}

/**
* For parsing custom parsed text to be stored within the database.
* This function additionally returns the uid and bitfield that needs to be stored.
* Expects $text to be the value directly from request_var() and in it's non-parsed form
*/
function generate_text_for_storage(&$text, &$uid, &$bitfield, &$flags, $allow_bbcode = false, $allow_urls = false, $allow_smilies = false)
{
   global $phpbb_root_path, $phpEx;

   $uid = $bitfield = '';
   $flags = (($allow_bbcode) ? OPTION_FLAG_BBCODE : 0) + (($allow_smilies) ? OPTION_FLAG_SMILIES : 0) + (($allow_urls) ? OPTION_FLAG_LINKS : 0);

   if (!$text)
   {
      return;
   }

   if (!class_exists('parse_message'))
   {
      include($phpbb_root_path . 'includes/message_parser.' . $phpEx);
   }

   $message_parser = new parse_message($text);
   $message_parser->parse($allow_bbcode, $allow_urls, $allow_smilies);

   $text = $message_parser->message;
   $uid = $message_parser->bbcode_uid;

   // If the bbcode_bitfield is empty, there is no need for the uid to be stored.
   if (!$message_parser->bbcode_bitfield)
   {
      $uid = '';
   }

   $bitfield = $message_parser->bbcode_bitfield;

   return;
}

/**
* For decoding custom parsed text for edits as well as extracting the flags
* Expects $text to be the value directly from the database (pre-parsed content)
*/
function generate_text_for_edit($text, $uid, $flags)
{
   global $phpbb_root_path, $phpEx;

   decode_message($text, $uid);

   return array(
      'allow_bbcode'   => ($flags & OPTION_FLAG_BBCODE) ? 1 : 0,
      'allow_smilies'   => ($flags & OPTION_FLAG_SMILIES) ? 1 : 0,
      'allow_urls'   => ($flags & OPTION_FLAG_LINKS) ? 1 : 0,
      'text'         => $text
   );
}

/**
* A subroutine of make_clickable used with preg_replace
* It places correct HTML around an url, shortens the displayed text
* and makes sure no entities are inside URLs
*/
function make_clickable_callback($type, $whitespace, $url, $relative_url, $class)
{
   $orig_url      = $url;
   $orig_relative   = $relative_url;
   $append         = '';
   $url         = htmlspecialchars_decode($url);
   $relative_url   = htmlspecialchars_decode($relative_url);

   // make sure no HTML entities were matched
   $chars = array('<', '>', '"');
   $split = false;

   foreach ($chars as $char)
   {
      $next_split = strpos($url, $char);
      if ($next_split !== false)
      {
         $split = ($split !== false) ? min($split, $next_split) : $next_split;
      }
   }

   if ($split !== false)
   {
      // an HTML entity was found, so the URL has to end before it
      $append         = substr($url, $split) . $relative_url;
      $url         = substr($url, 0, $split);
      $relative_url   = '';
   }
   else if ($relative_url)
   {
      // same for $relative_url
      $split = false;
      foreach ($chars as $char)
      {
         $next_split = strpos($relative_url, $char);
         if ($next_split !== false)
         {
            $split = ($split !== false) ? min($split, $next_split) : $next_split;
         }
      }

      if ($split !== false)
      {
         $append         = substr($relative_url, $split);
         $relative_url   = substr($relative_url, 0, $split);
      }
   }

   // if the last character of the url is a punctuation mark, exclude it from the url
   $last_char = ($relative_url) ? $relative_url[strlen($relative_url) - 1] : $url[strlen($url) - 1];

   switch ($last_char)
   {
      case '.':
      case '?':
      case '!':
      case ':':
      case ',':
         $append = $last_char;
         if ($relative_url)
         {
            $relative_url = substr($relative_url, 0, -1);
         }
         else
         {
            $url = substr($url, 0, -1);
         }
      break;

      // set last_char to empty here, so the variable can be used later to
      // check whether a character was removed
      default:
         $last_char = '';
      break;
   }

   $short_url = (strlen($url) > 55) ? substr($url, 0, 39) . ' ... ' . substr($url, -10) : $url;

   switch ($type)
   {
      case MAGIC_URL_LOCAL:
         $tag         = 'l';
         $relative_url   = preg_replace('/[&?]sid=[0-9a-f]{32}$/', '', preg_replace('/([&?])sid=[0-9a-f]{32}&/', '$1', $relative_url));
         $url         = $url . '/' . $relative_url;
         $text         = $relative_url;

         // this url goes to http://domain.tld/path/to/board/ which
         // would result in an empty link if treated as local so
         // don't touch it and let MAGIC_URL_FULL take care of it.
         if (!$relative_url)
         {
            return $whitespace . $orig_url . '/' . $orig_relative; // slash is taken away by relative url pattern
         }
      break;

      case MAGIC_URL_FULL:
         $tag   = 'm';
         $text   = $short_url;
      break;

      case MAGIC_URL_WWW:
         $tag   = 'w';
         $url   = 'http://' . $url;
         $text   = $short_url;
      break;

      case MAGIC_URL_EMAIL:
         $tag   = 'e';
         $text   = $short_url;
         $url   = 'mailto:' . $url;
      break;
   }

   $url   = htmlspecialchars($url);
   $text   = htmlspecialchars($text);
   $append   = htmlspecialchars($append);

   $html   = "$whitespace<!-- $tag --><a$class href=\"$url\">$text</a><!-- $tag -->$append";

   return $html;
}

/**
* make_clickable function
*
* Replace magic urls of form http://xxx.xxx., www.xxx. and xxx@xxx.xxx.
* Cuts down displayed size of link if over 50 chars, turns absolute links
* into relative versions when the server/script path matches the link
*/
function make_clickable($text, $server_url = false, $class = 'postlink')
{
   if ($server_url === false)
   {
      $server_url = generate_board_url();
   }

   static $magic_url_match;
   static $magic_url_replace;
   static $static_class;

   if (!is_array($magic_url_match) || $static_class != $class)
   {
      $static_class = $class;
      $class = ($static_class) ? ' class="' . $static_class . '"' : '';
      $local_class = ($static_class) ? ' class="' . $static_class . '-local"' : '';

      $magic_url_match = $magic_url_replace = array();
      // Be sure to not let the matches cross over. ;)

      // relative urls for this board
      $magic_url_match[] = '#(^|[\n\t (>.])(' . preg_quote($server_url, '#') . ')/(' . get_preg_expression('relative_url_inline') . ')#ie';
      $magic_url_replace[] = "make_clickable_callback(MAGIC_URL_LOCAL, '\$1', '\$2', '\$3', '$local_class')";

      // matches a xxxx://aaaaa.bbb.cccc. ...
      $magic_url_match[] = '#(^|[\n\t (>.])(' . get_preg_expression('url_inline') . ')#ie';
      $magic_url_replace[] = "make_clickable_callback(MAGIC_URL_FULL, '\$1', '\$2', '', '$class')";

      // matches a "www.xxxx.yyyy[/zzzz]" kinda lazy URL thing
      $magic_url_match[] = '#(^|[\n\t (>])(' . get_preg_expression('www_url_inline') . ')#ie';
      $magic_url_replace[] = "make_clickable_callback(MAGIC_URL_WWW, '\$1', '\$2', '', '$class')";

      // matches an email@domain type address at the start of a line, or after a space or after what might be a BBCode.
      $magic_url_match[] = '/(^|[\n\t (>])(' . get_preg_expression('email') . ')/ie';
      $magic_url_replace[] = "make_clickable_callback(MAGIC_URL_EMAIL, '\$1', '\$2', '', '')";
   }

   return preg_replace($magic_url_match, $magic_url_replace, $text);
}

/**
* Censoring
*/
function censor_text($text)
{
   static $censors;

   // Nothing to do?
   if ($text === '')
   {
      return '';
   }

   // We moved the word censor checks in here because we call this function quite often - and then only need to do the check once
   if (!isset($censors) || !is_array($censors))
   {
      global $config, $user, $auth, $cache;

      // We check here if the user is having viewing censors disabled (and also allowed to do so).
      if (!$user->optionget('viewcensors') && $config['allow_nocensors'] && $auth->acl_get('u_chgcensors'))
      {
         $censors = array();
      }
      else
      {
         $censors = $cache->obtain_word_list();
      }
   }

   if (sizeof($censors))
   {
      return preg_replace($censors['match'], $censors['replace'], $text);
   }

   return $text;
}

/**
* custom version of nl2br which takes custom BBCodes into account
*/
function bbcode_nl2br($text)
{
   // custom BBCodes might contain carriage returns so they
   // are not converted into <br /> so now revert that
   $text = str_replace(array("\n", "\r"), array('<br />', "\n"), $text);
   return $text;
}

/**
* Smiley processing
*/
function smiley_text($text, $force_option = false)
{
   global $config, $user, $phpbb_root_path;
//-- mod: Prime Links -------------------------------------------------------//
   if (!function_exists('prime_links'))
   {
      global $phpEx;
      include($phpbb_root_path . 'includes/prime_links.' . $phpEx);
   }
   $text = prime_links($text);
//-- end: Prime Links -------------------------------------------------------//

   if ($force_option || !$config['allow_smilies'] || !$user->optionget('viewsmilies'))
   {
      return preg_replace('#<!\-\- s(.*?) \-\-><img src="\{SMILIES_PATH\}\/.*? \/><!\-\- s\1 \-\->#', '\1', $text);
   }
   else
   {
      $root_path = (defined('PHPBB_USE_BOARD_URL_PATH') && PHPBB_USE_BOARD_URL_PATH) ? generate_board_url() . '/' : $phpbb_root_path;
      return preg_replace('#<!\-\- s(.*?) \-\-><img src="\{SMILIES_PATH\}\/(.*?) \/><!\-\- s\1 \-\->#', '<img src="' . $root_path . $config['smilies_path'] . '/\2 />', $text);
   }
}

/**
* General attachment parsing
*
* @param mixed $forum_id The forum id the attachments are displayed in (false if in private message)
* @param string &$message The post/private message
* @param array &$attachments The attachments to parse for (inline) display. The attachments array will hold templated data after parsing.
* @param array &$update_count The attachment counts to be updated - will be filled
* @param bool $preview If set to true the attachments are parsed for preview. Within preview mode the comments are fetched from the given $attachments array and not fetched from the database.
*/
function parse_attachments($forum_id, &$message, &$attachments, &$update_count, $preview = false)
{
   if (!sizeof($attachments))
   {
      return;
   }

   global $template, $cache, $user;
   global $extensions, $config, $phpbb_root_path, $phpEx;

   //
   $compiled_attachments = array();

   if (!isset($template->filename['attachment_tpl']))
   {
      $template->set_filenames(array(
         'attachment_tpl'   => 'attachment.html')
      );
   }

   if (empty($extensions) || !is_array($extensions))
   {
      $extensions = $cache->obtain_attach_extensions($forum_id);
   }

   // Look for missing attachment information...
   $attach_ids = array();
   foreach ($attachments as $pos => $attachment)
   {
      // If is_orphan is set, we need to retrieve the attachments again...
      if (!isset($attachment['extension']) && !isset($attachment['physical_filename']))
      {
         $attach_ids[(int) $attachment['attach_id']] = $pos;
      }
   }

   // Grab attachments (security precaution)
   if (sizeof($attach_ids))
   {
      global $db;

      $new_attachment_data = array();

      $sql = 'SELECT *
         FROM ' . ATTACHMENTS_TABLE . '
         WHERE ' . $db->sql_in_set('attach_id', array_keys($attach_ids));
      $result = $db->sql_query($sql);

      while ($row = $db->sql_fetchrow($result))
      {
         if (!isset($attach_ids[$row['attach_id']]))
         {
            continue;
         }

         // If we preview attachments we will set some retrieved values here
         if ($preview)
         {
            $row['attach_comment'] = $attachments[$attach_ids[$row['attach_id']]]['attach_comment'];
         }

         $new_attachment_data[$attach_ids[$row['attach_id']]] = $row;
      }
      $db->sql_freeresult($result);

      $attachments = $new_attachment_data;
      unset($new_attachment_data);
   }

   // Sort correctly
   if ($config['display_order'])
   {
      // Ascending sort
      krsort($attachments);
   }
   else
   {
      // Descending sort
      ksort($attachments);
   }

   foreach ($attachments as $attachment)
   {
      if (!sizeof($attachment))
      {
         continue;
      }

      // We need to reset/empty the _file block var, because this function might be called more than once
      $template->destroy_block_vars('_file');

      $block_array = array();

      // Some basics...
      $attachment['extension'] = strtolower(trim($attachment['extension']));
      $filename = $phpbb_root_path . $config['upload_path'] . '/' . utf8_basename($attachment['physical_filename']);
      $thumbnail_filename = $phpbb_root_path . $config['upload_path'] . '/thumb_' . utf8_basename($attachment['physical_filename']);

      $upload_icon = '';

      if (isset($extensions[$attachment['extension']]))
      {
         if ($user->img('icon_topic_attach', '') && !$extensions[$attachment['extension']]['upload_icon'])
         {
            $upload_icon = $user->img('icon_topic_attach', '');
         }
         else if ($extensions[$attachment['extension']]['upload_icon'])
         {
            $upload_icon = '<img src="' . $phpbb_root_path . $config['upload_icons_path'] . '/' . trim($extensions[$attachment['extension']]['upload_icon']) . '" alt="" />';
         }
      }

      $filesize = get_formatted_filesize($attachment['filesize'], false);

      $comment = bbcode_nl2br(censor_text($attachment['attach_comment']));

      $block_array += array(
         'UPLOAD_ICON'      => $upload_icon,
         'FILESIZE'         => $filesize['value'],
         'SIZE_LANG'         => $filesize['unit'],
         'DOWNLOAD_NAME'      => utf8_basename($attachment['real_filename']),
         'COMMENT'         => $comment,
      );

      $denied = false;

      if (!extension_allowed($forum_id, $attachment['extension'], $extensions))
      {
         $denied = true;

         $block_array += array(
            'S_DENIED'         => true,
            'DENIED_MESSAGE'   => sprintf($user->lang['EXTENSION_DISABLED_AFTER_POSTING'], $attachment['extension'])
         );
      }

      if (!$denied)
      {
         $l_downloaded_viewed = $download_link = '';
         $display_cat = $extensions[$attachment['extension']]['display_cat'];

         if ($display_cat == ATTACHMENT_CATEGORY_IMAGE)
         {
            if ($attachment['thumbnail'])
            {
               $display_cat = ATTACHMENT_CATEGORY_THUMB;
            }
            else
            {
               if ($config['img_display_inlined'])
               {
                  if ($config['img_link_width'] || $config['img_link_height'])
                  {
                     $dimension = @getimagesize($filename);

                     // If the dimensions could not be determined or the image being 0x0 we display it as a link for safety purposes
                     if ($dimension === false || empty($dimension[0]) || empty($dimension[1]))
                     {
                        $display_cat = ATTACHMENT_CATEGORY_NONE;
                     }
                     else
                     {
                        $display_cat = ($dimension[0] <= $config['img_link_width'] && $dimension[1] <= $config['img_link_height']) ? ATTACHMENT_CATEGORY_IMAGE : ATTACHMENT_CATEGORY_NONE;
                     }
                  }
               }
               else
               {
                  $display_cat = ATTACHMENT_CATEGORY_NONE;
               }
            }
         }

         // Make some descisions based on user options being set.
         if (($display_cat == ATTACHMENT_CATEGORY_IMAGE || $display_cat == ATTACHMENT_CATEGORY_THUMB) && !$user->optionget('viewimg'))
         {
            $display_cat = ATTACHMENT_CATEGORY_NONE;
         }

         if ($display_cat == ATTACHMENT_CATEGORY_FLASH && !$user->optionget('viewflash'))
         {
            $display_cat = ATTACHMENT_CATEGORY_NONE;
         }

         $download_link = append_sid("{$phpbb_root_path}download/file.$phpEx", 'id=' . $attachment['attach_id']);

         switch ($display_cat)
         {
            // Images
            case ATTACHMENT_CATEGORY_IMAGE:
               $l_downloaded_viewed = 'VIEWED_COUNT';
               $inline_link = append_sid("{$phpbb_root_path}download/file.$phpEx", 'id=' . $attachment['attach_id']);
               $download_link .= '&amp;mode=view';

               $block_array += array(
                  'S_IMAGE'      => true,
                  'U_INLINE_LINK'      => $inline_link,
               );

               $update_count[] = $attachment['attach_id'];
            break;

            // Images, but display Thumbnail
            case ATTACHMENT_CATEGORY_THUMB:
               $l_downloaded_viewed = 'VIEWED_COUNT';
               $thumbnail_link = append_sid("{$phpbb_root_path}download/file.$phpEx", 'id=' . $attachment['attach_id'] . '&amp;t=1');
               $download_link .= '&amp;mode=view';

               $block_array += array(
                  'S_THUMBNAIL'      => true,
                  'THUMB_IMAGE'      => $thumbnail_link,
               );

               $update_count[] = $attachment['attach_id'];
            break;

            // Windows Media Streams
            case ATTACHMENT_CATEGORY_WM:
               $l_downloaded_viewed = 'VIEWED_COUNT';

               // Giving the filename directly because within the wm object all variables are in local context making it impossible
               // to validate against a valid session (all params can differ)
               // $download_link = $filename;

               $block_array += array(
                  'U_FORUM'      => generate_board_url(),
                  'ATTACH_ID'      => $attachment['attach_id'],
                  'S_WM_FILE'      => true,
               );

               // Viewed/Heared File ... update the download count
               $update_count[] = $attachment['attach_id'];
            break;

            // Real Media Streams
            case ATTACHMENT_CATEGORY_RM:
            case ATTACHMENT_CATEGORY_QUICKTIME:
               $l_downloaded_viewed = 'VIEWED_COUNT';

               $block_array += array(
                  'S_RM_FILE'         => ($display_cat == ATTACHMENT_CATEGORY_RM) ? true : false,
                  'S_QUICKTIME_FILE'   => ($display_cat == ATTACHMENT_CATEGORY_QUICKTIME) ? true : false,
                  'U_FORUM'         => generate_board_url(),
                  'ATTACH_ID'         => $attachment['attach_id'],
               );

               // Viewed/Heared File ... update the download count
               $update_count[] = $attachment['attach_id'];
            break;

            // Macromedia Flash Files
            case ATTACHMENT_CATEGORY_FLASH:
               list($width, $height) = @getimagesize($filename);

               $l_downloaded_viewed = 'VIEWED_COUNT';

               $block_array += array(
                  'S_FLASH_FILE'   => true,
                  'WIDTH'         => $width,
                  'HEIGHT'      => $height,
                  'U_VIEW_LINK'   => $download_link . '&amp;view=1',
               );

               // Viewed/Heared File ... update the download count
               $update_count[] = $attachment['attach_id'];
            break;

            default:
               $l_downloaded_viewed = 'DOWNLOAD_COUN
 


          Вернуться наверх  
 


Аватар пользователя

... :du_ma_et:
сейчас за полчаса поставил этот мод на чистый 3.0.12 форум. всё встало. на просилвер.

вот так получилось:

Пожалуйста Зарегистрируйтесь чтобы увидеть ссылку


искать где у вас может быть ошибка очень долго. там много мелочи. я сейчас соберу все отредактированные файлы в папку и вы сможете проверить правки сравнением.
запрос SQL я делал через скрипт-установщик здесь http://hello-vitebsk.ru/db_update_gen.php

немного попозже ссылку на скачивание выложу...

так, собрал добро в папку. положил туда же и скрипт-установщик, созданный здесь и стилевой файл просилвера.
скачать:
Пожалуйста Зарегистрируйтесь чтобы увидеть ссылку


успехов вам обоим.

Александр, посмотрел ваш файл - там всё нормально. проблема, похоже, окопалась не там.
//не забывайте сохранять файлы в кодировке UTF-8 без BOM....


_________________
Подпись:
три головы - это хорошо. но как же трудно придти к согласию...
* белк может помочь, но ставить за кого-то моды не будет... ни платно, ни бесплатно. *

Информация о редактировании
Последний раз редактировалось белк 05 янв 2015, 20:23, всего редактировалось 1 раз.
          Вернуться наверх  
 


Аватар пользователя

Стоооп :-(-- Какие ещё запросы и установщики? :-(-- Не помню чтобы об этом в инструкции говорилось. Кстати, да, я об этом ещё подумала - почему нет установочного файла? То есть я просто перешла по ссылке своего домена и ошибка вылезла. А может оно так и должно быть? Может надо сначала запрос какой-то специальный сделать :du_ma_et: Файлы вроде все правильно отредактированы :-(-- В общем, я совсем уже потерялась с этим модом :-(-- Хорошо хоть Белк рядом :smu:sche_nie:


          Вернуться наверх  
 


Аватар пользователя

сделал запрос через установщик и все пошло!
правки были в порядке)
сп. :co_ol:


          Вернуться наверх  
 
 
Начать новую тему Ответить на тему


Дополнительные возможности

  Похожие темы  Автор  Ответов  Просмотров  Последнее сообщение 
Аватар пользователя Forum SEO phpbb3
Forum SEO phpbb3 - прекрасный мод в плане СЕО оптимизации для форумов phpbb3, позволит вам задать описание и список ключевых слов для каждого раздела и подфорума.

DeaDRoMeO

253

16959

Аватар пользователя

27 ноя 2017, 20:18

DeaDRoMeO

Аватар пользователя Forum Sponsor phpBB3
Forum Sponsor phpBB3 - модификация для phpbb3, добавляющая возможность назначения любому подфоруму или разделу своего спонсора

DeaDRoMeO

139

5343

Аватар пользователя

29 июн 2014, 16:41

Дим

Аватар пользователя Правила оформления анонса
Простые правила оформления анонсов модификаций

DeaDRoMeO

3

1578

Аватар пользователя

29 янв 2013, 23:07

DeaDRoMeO

Аватар пользователя Forum Title Colour мод выбора цвета для заголовка форумов
Forum Title Colour мод который дает возможность выбрать цвет для заголовка вашего форума

akella1900

57

3758

Аватар пользователя

04 мар 2016, 13:39

Чародейка

Аватар пользователя Board Rules phpbb3 (Правила форума)
Board Rules - модификация для phpbb3, добавляющая весьма функциональную страницу с правилами поведения на форуме

DeaDRoMeO

74

8007

Аватар пользователя

19 фев 2016, 20:15

mela

Оставить свой комментарий

Поделиться темой с помощью

Ссылки на тему

Прямая ссылка:
BB-код для форумов, сайтов, блогов:
HTML ссылка:
 


cron

Самая неформальная поддержка phpBB :P