@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 );
  • Вопрос задан
  • 144 просмотра
Пригласить эксперта
Ответы на вопрос 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 );

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

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

Войти через центр авторизации
Похожие вопросы