@timers

Как поменять preg_replace на preg_replace_callback?

В общем мучаюсь уже 2 неделю, не могу понять как сделать правильно, перепробовал кучу вариантов.

Собственно сам код:
if($allow_navigation AND $count_all['count'] > $post_number){

            include CLASS_DIR.'/pagination.php';

            $pg = new pagination($count_all['count'], $post_number, $cstart);
            $arr_pages = $pg->calculate_pages();

            if(count($arr_pages['pages']) > 1){

                $arr_pages['category_id'] = $category_id;
                $arr_link = Array();
                    
                $tpl_navigation = ($tpl_navigation) ? $tpl_navigation : 'navigation';
                $tpl->load_template(TPL_DIR.'/'.$tpl_navigation.'.tpl');
    
                if($arr_pages['previous'] != $cstart AND $cstart > 1){
                    $tpl->copy_template = preg_replace( "'\\[prev-link\\](.*?)\\[/prev-link\\]'ies", "faq_get_cstart({$arr_pages['previous']}, '\\1')", $tpl->copy_template );
                }else{
                    $tpl->set_block("'\\[prev-link\\](.*?)\\[/prev-link\\]'si", "\\1");
                }

                foreach($arr_pages['pages'] as $key => $value){
                    $pages .= ($arr_pages['current'] == $value) ? '<span>'.$value.'</span> ' : faq_get_cstart($value, $value).' ';
                }
                
                $pg_show = $pg->show;
                $f_p = $pg_show;
                $s_p = ($count_all['count'] / $post_number) - $pg_show;
                $s_p = @ceil($s_p);
                
                if($f_p < $arr_pages['current']){
                    $pages = faq_get_cstart(1, 1).'  '.$pages;
                }
                if($arr_pages['current'] <= $s_p){
                    $pages = $pages.''.faq_get_cstart($arr_pages['last'], $arr_pages['last']);
                }
                
                $tpl->set( '{pages}',  $pages);
    
                if($arr_pages['last'] != $cstart AND $arr_pages['last'] != 1){
					
                    $tpl->copy_template = preg_replace( "'\\[next-link\\](.*?)\\[/next-link\\]'ies", "faq_get_cstart({$arr_pages['next']}, '\\1')", $tpl->copy_template );
                
				}else{
                    $tpl->set_block("'\\[next-link\\](.*?)\\[/next-link\\]'si", "\\1");
                }
                $tpl->compile('faq_content');
                $tpl->clear();
            }
        }


Ругается на 2 строчки т.к. перешел на php 7.

#1
$tpl->copy_template = preg_replace( "'\\[prev-link\\](.*?)\\[/prev-link\\]'ies", "faq_get_cstart({$arr_pages['previous']}, '\\1')", $tpl->copy_template );

#2
$tpl->copy_template = preg_replace( "'\\[next-link\\](.*?)\\[/next-link\\]'ies", "faq_get_cstart({$arr_pages['next']}, '\\1')", $tpl->copy_template );


Вот такая ошибка выдается Ошибка: Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in

Версия php 7.1
  • Вопрос задан
  • 42 просмотра
Пригласить эксперта
Ответы на вопрос 1
Поведение этой функции во многом напоминает preg_replace(), за исключением того, что вместо параметра replacement необходимо указывать callback-функцию.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы