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

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

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

Войти через TM ID
Похожие вопросы
Ticketland.ru Москва
от 120 000 руб.
Интерно Ростов-на-Дону
от 35 000 до 50 000 руб.
СиСорт Барнаул
от 40 000 до 115 000 руб.