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

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


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

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

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

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

 

../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]

все!

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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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

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

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