Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Хаки » Нужна помощь. Как заменить preg_replace на preg_replace_callback?

Нужна помощь. Как заменить preg_replace на preg_replace_callback?


     31.07.2019    preg_replace на preg_replace_callback    Все вопросы » Хаки    662

вопрос
dle 10.6
Делал как-то по инструкции глобальные теги [newsid=1,2] текст [/newsid] и [not-newsid=1,2] текст [/not-newsid]

Сейчас пытаюсь перейти на php 7.2

Выдает ошибки из-за которых белый экран.
Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in

Помогите заменить preg_replace на preg_replace_callback


В /engine/modules/main.php

/* добавил вывод [newsid=1,2] текст [/newsid] и [not-newsid=1,2] текст [/not-newsid] */
if($dle_module == "showfull") {
$news_id = $_GET['newsid'];

		if( strpos( $tpl->copy_template, "[not-newsid=" ) !== false ) {
			$tpl->copy_template = preg_replace( "#\\[not-newsid=(.+?)\\](.*?)\\[/not-newsid\\]#ies", "check_newsid('\\1', '\\2', '{$news_id}', false)", $tpl->copy_template );
		}
		if( strpos( $tpl->copy_template, "[newsid=" ) !== false ) {
			$tpl->copy_template = preg_replace ( "#\\[newsid=(.+?)\\](.*?)\\[/newsid\\]#ies", "check_newsid('\\1', '\\2', '{$news_id}')", $tpl->copy_template );
		}
			$tpl->set_block( "'\\[cattext\\](.*?)\\[/cattext\\]'si", "" );
} else {
			$tpl->set( '[cattext]', "" );
			$tpl->set( '[/cattext]', "" );
			$tpl->copy_template = preg_replace ( "#\\[newsid=(.+?)\\](.*?)\\[/newsid\\]#is", "", $tpl->copy_template );
			$tpl->copy_template = preg_replace ( "#\\[not-newsid=(.+?)\\](.*?)\\[/not-newsid\\]#is", "", $tpl->copy_template );

}
/*END добавил вывод [newsid=1,2] текст [/newsid] и [not-newsid=1,2] текст [/not-newsid] */



В /engine/modules/functions.php

/* добавил вывод [newsid=1,2] текст [/newsid] и [not-newsid=1,2] текст [/not-newsid] */
function check_newsid($cats, $block, $category, $action = true) {

	$cats = str_replace(" ", "", $cats );	
	$cats = explode( ',', $cats );
	$category = explode( ',', $category );
	$found = false;
	
	foreach ( $category as $element ) {
		
		if( $action ) {
			
			if( in_array( $element, $cats ) ) {
				
				$block = str_replace( '\"', '"', $block );
				return $block;
			}
		
		} else {
			
			if( in_array( $element, $cats ) ) {
				$found = true;
			}
		
		}
	
	}

	if ( !$action AND !$found ) {	

		$block = str_replace( '\"', '"', $block  );
		return $block;
	}

	return "";

}
/* END добавил вывод [newsid=1,2] текст [/newsid] и [not-newsid=1,2] текст [/not-newsid] */



Заранее, благодарю!

Ответил: LazyDev


Функция для /engine/modules/functions.php
function checkNewsid($idList, $returnData, $newsID, $action = true)
{
	$returnData = str_replace('\"', '"', $returnData);
	$idList = explode(',', $idList);
	$found = false;
	
	foreach ($idList as $element) {
		if ($action) {
			if ($element == $newsID) {
				return $returnData;
			}
		} else {
			if ($element == $newsID) {
				$found = true;
				break;
			}
		}
	
	}

	if (!$action && !$found) {
		return $returnData;
	}

	return '';
}

Код для /engine/modules/main.php
if ($dle_module == 'showfull') {
	$news_id = intval($_GET['newsid']);
	if (strpos($tpl->copy_template, '[not-newsid=') !== false) {
		$tpl->copy_template = preg_replace_callback("#\\[not-newsid=(.+?)\\](.*?)\\[/not-newsid\\]#is", function($matches) use($news_id) {
			return checkNewsid($matches[1], $matches[2], $news_id, false);
		}, $tpl->copy_template);
	}
	
	if (strpos($tpl->copy_template, '[newsid=') !== false) {
		$tpl->copy_template = preg_replace_callback("#\\[newsid=(.+?)\\](.*?)\\[/newsid\\]#is", function($matches) use($news_id) {
			return checkNewsid($matches[1], $matches[2], $news_id);
		}, $tpl->copy_template);
	}
	
	$tpl->set_block("'\\[cattext\\](.*?)\\[/cattext\\]'si", '');
} else {
	$tpl->set_block("'\\[cattext\\](.*?)\\[/cattext\\]'si", '\\1');
	$tpl->copy_template = preg_replace("#\\[newsid=(.+?)\\](.*?)\\[/newsid\\]#is", '', $tpl->copy_template);
	$tpl->copy_template = preg_replace("#\\[not-newsid=(.+?)\\](.*?)\\[/not-newsid\\]#is", '', $tpl->copy_template);
}

3 комментария

LazyDev
PHP-developer

LazyDev - 31 июля 2019 13:12 -

Версия DataLife Engine 10.6 не совместима с PHP 7.2. Поддержка этой версии PHP появилась в совсем недавних релизах. То что вы пытаетесь сделать... сулит вам много проблем.

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

ds8880
Юзер

ds8880 - 31 июля 2019 13:29 -

***Комментарий удален***

ds8880
Юзер

ds8880 - 31 июля 2019 13:29 -

LazyDev,
Так кроме этих ошибок все остальное работает.
Если закомментировать блок кода в /engine/modules/main.php то все работает, так как я поправил уже некоторые моменты.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

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

наверх