@timers

Как устранить проблему с preg_replace_callback?

Версия php 7.1

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

Где только не спрашиваю, все молчат и никто не знает как устранить.

Код:
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();
            }
        }


Ругается на этот кусок: (заменить на preg_replace_callback но я не понимаю, как испробовал массу вариантов.)
$tpl->copy_template = preg_replace( "'\\[prev-link\\](.*?)\\[/prev-link\\]'ies", "faq_get_cstart({$arr_pages['previous']}, '\\1')", $tpl->copy_template );
  • Вопрос задан
  • 158 просмотров
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
первая ссылка в гугле

UPD:
$tpl->copy_template = preg_replace_callback( "'\\[prev-link\\](.*?)\\[/prev-link\\]'is", 
function($matches){
foreach($matches as $match){
return faq_get_cstart({$arr_pages['previous']}, $match)
}
}, 
$tpl->copy_template );

В зависимости от области видимости может понадобиться проброс некоторых переменных, писалось без проверки, возможно надо будет обработать напильником.
Ответ написан
Ваш ответ на вопрос

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

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