Seleccionar página

Quizá este problema sea muy específico, pero imagino que no seré el único.

En nuestro Prestashop tenemos el módulo doofinder para la búsqueda avanzada dentro de nuestra web. Todo iba bien hasta la actualización a PHP 5.4 tras la cual nos dio el siguiente error:

Deprecated: The /e modifier is deprecated, use preg_replace_callback instead

Con este error, dentro de la app de doofinder nos informaban del error de esta forma:

Can't parse the feed: Too many warnings. Last one: An error has been found in some feed Item: Values do not match keys at line number: 12

 

Pues bien, después de indagar un poco he visto que la solución es cambiar la función preg_replace por preg_replace_callback, como menciona en el error. Sin embargo, no es tan sencillo, hay que saber cómo cambia la nueva función. Pongámonos en marcha.

Vamos al archivo /modules/doofinder/dfTools.class.php en las líneas 448 y 449 y cambiamos esto:

$text = preg_replace('/&#(\d+);/me',"chr(\\1)",$text);  // decimal notation
$text = preg_replace('/&#x([a-f0-9]+);/mei',"chr(0x\\1)",$text);  // hex notation

por esto:

	$text = preg_replace_callback (
		'/&#(\d+);/m',
		function ($m) {
			return chr($m[1]);
        	},
		$text
	);  // decimal notation
	$text = preg_replace_callback (
		'/&#x([a-f0-9]+);/mi',
		function ($mi) {
			return chr('0x', $mi[1]);
		},
		$text
	);  // hex notation

Es básicamente lo mismo, pero quitando el modificador /e y el segundo argumento de la función es otra función que retorna lo que queremos.

 

Sencillo, pero que puede dar quebraderos de cabeza.

Espero os sirva. Un saludo,
Iván Ros