Перейти к контенту

Макросы - для сообщений


Рекомендуемые сообщения

Не претиндую на оригинальность, но понадобилась решить следуюющую задачу:

заменять пути к некоторым картинкам.

на моем сайте в некоторых местах используется , содержимое из этих постов выводится другим скриптом с другим относительным путем, а точней на уровень выше относительно форума.

 

../images/news/ - путь чтобы картинки отображаись в посте форума.

images/news/ - путь для картинок, когда они выводятся скриптом находящемся на уровень выше.

 

можно конечно ко всем картинкам писать полный путь и забыть об относительных , напр. <img src='http://host.ru/images/news/pic1.jpg'>, но это как-то неспортивно.

----------------------

решить данную задачу, на мой взляд удобней всего при помощи замены некоторых частей сообщения непосредственно при выводе. Я воспользовался следующей кострукцией <%MACROS_NAME%>.

---------------------

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

 

в конец файл source/lib/post_parser.php добавляем функцию:

    function macros_convert($mac) {
     global $ibforums;

         if(isset($ibforums->vars['post_macros']) && (trim($ibforums->vars['post_macros']) != ''))
            $macros = explode('|', $ibforums->vars['post_macros']);
         else
            return '<b>проверьте настройки макросов [post_macros]</b>';

         if(isset($ibforums->vars['post_macros_reg']) && (trim($ibforums->vars['post_macros_reg']) != '') )
            $macros_replace = explode('|', $ibforums->vars['post_macros_reg']);
         else
            return'<b>проверьте настройки макросов [post_macros_reg]</b>';

     $br_point = count($macros_replace);

     if(in_array($mac, $macros)) {
          foreach($macros as $k => $v) {
           if($k >= $br_point)
             return '<b>недостаточно ключей для замены макроса [post_macros_reg]</b>';

            if($v == $mac)
             return $macros_replace[$k];
          }
     }
     else
       return $mac;
    }

 

в файле source/Post.php находим:

 

                        if (!$ibforums->member['view_img'])
                        {
                                // unconvert smilies first, or it looks a bit crap.

 

выше добавляем:

 

                        if($ibforums->vars['post_macro_on']) {

                          $pm_forums = explode(',', $ibforums->vars['post_macro_forums']);

                          if(in_array($row['forum_id'], $pm_forums))
                           $row['post'] = preg_replace( "#<%(.+?)%>#e", "\$this->parser->macros_convert('\\1')", $row['post'] );

                           }

 

в файле source/Topics.php находим:

 

if ( ($row['append_edit'] == 1) and ($row['edit_time'] != "") and ($row['edit_name'] != "") )

 

выше добавляем тотже код что и в предидущей файл:

 

                        if($ibforums->vars['post_macro_on']) {

                          $pm_forums = explode(',', $ibforums->vars['post_macro_forums']);

                          if(in_array($row['forum_id'], $pm_forums))
                           $row['post'] = preg_replace( "#<%(.+?)%>#e", "\$this->parser->macros_convert('\\1')", $row['post'] );

                           }

 

И финальная часть, прикручиваем управление на админскую.

в файлик: admin_pages.php добавляем

 

$PAGES = array(
                          2 => array (..............
                                            22 =>array( 'Макросы сообщений'   , 'act=op&code=tmacro' ),

 

думаю понятно, куда нужно вставить строку : )

 

в файле ad_settings.php находим:

 

case 'bw':
                                $this->badword();

 

выше добавляем новые ключики:

 

//-------------------------
                        case 'tmacro':
                                $this->tmacro();
                                break;
                        case 'dotmacro':
                                $this->save_config( array('post_macro_on', 'post_macro_forums', 'post_macros', 'post_macros_reg'));
                                break;
//-------------------------

 

находим конец функции ad_settings

                        default:
                                $this->cookie();
                                break;
                }

        }

 

ниже вставляем функцию:

 

        function tmacro()
        {
           global $INFO, $SKIN, $ADMIN;

         if(isset($INFO['post_macros']) && (trim($INFO['post_macros']) != ''))
            $macros = explode('|', $INFO['post_macros']);
         else
            $macros = array('нет значения - <b>функция отключена</b>');

         if(isset($INFO['post_macros_reg']) && (trim($INFO['post_macros_reg']) != '') )
            $macros_replace = explode('|', $INFO['post_macros_reg']);
         else
            $macros_replace = array('нет значения - <b>функция отключена</b>');

               $this->common_header('dotmacro', 'Настройка макросов', 'Вы можете отредактировать конфигурацию, ниже.' );

                $ADMIN->html .= $SKIN->add_td_row( array( "<b>Включить замену?</b>" ,
                                                                                  $SKIN->form_yes_no( "post_macro_on", $INFO['post_macro_on']  )
                                                                 )      );

                    $ADMIN->html .= $SKIN->add_td_row( array("<b>ID форумов в которых действуют макросы.</b><br>значения через запятую. (если не введено значение, функция считается выключеной)",
                                                                                 $SKIN->form_input( 'post_macro_forums' , $INFO['post_macro_forums']  == "" ? ''   : $INFO['post_macro_forums'] )
                                                                                )  );


                    $ADMIN->html .= $SKIN->add_td_row( array("<b>Ключи</b><br>значения через вертикальную черту <b>'|'</b>. <i>В собщении ключи указываются в скобках, прим. <b><%IMG_DIR%></b> </i>",
                                                                                 $SKIN->form_input( 'post_macros' , $INFO['post_macros']  == "" ? ''   : $INFO['post_macros'] )
                                                                                )  );

                    $ADMIN->html .= $SKIN->add_td_row( array("<b>Замены</b><br>значения через вертикальную черту <b>'|'</b>",
                                                                                 $SKIN->form_input( 'post_macros_reg' , $INFO['post_macros_reg']  == "" ? ''   : $INFO['post_macros_reg'] )
                                                                                )  );
      $ADMIN->html .= $SKIN->add_td_row( array(
                   "<center><b>Ключ</b></center>",
                   "<center>Замена</center>",
               )  );

         foreach($macros as $k => $v) {

           if(count($macros_replace) <= $k)
            $macros_replace[$k] = '<b>установите значение</b>';

      $ADMIN->html .= $SKIN->add_td_row( array(
                   "<center><b>".$v."</b></center>",
                   "<center>". $macros_replace[$k] ."</center>",
               )  );
         }

             $this->common_footer();
        }

Добавлено в [mergetime]1096350580[/mergetime]

все!

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.