eXed Опубликовано 28 Сентября 2004 Жалоба Поделиться Опубликовано 28 Сентября 2004 Не претиндую на оригинальность, но понадобилась решить следуюющую задачу: заменять пути к некоторым картинкам.на моем сайте в некоторых местах используется , содержимое из этих постов выводится другим скриптом с другим относительным путем, а точней на уровень выше относительно форума. ../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] все! Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.