New question

Question:

Date: 20-01-2019 17:19:47 (In Spanish)

Como ejecutar condiciones de estring php[Resolved]

Hola amigo, tengo una pregunta a ver si tengo mas suerte. tengo unos archivos HTML con condiciones internas, el problema original es que son demasiados así que nen busca de una solución basado en mi tiempo tengo el siguiente problema
{if("{variable}" == "2")}
<div class="col-12">la variable contiene un 2</div>
{else}
<div class="col-12">No exiten resultados</div>
{endif}


Yo logro obtener toda la información que requiero mi problema es como valido esto.
$cont = file_get_contents("miarchivo.html"); //Obtengo el archivo
$cont = str_replace('{variable}','1',$cont); //remplazo la variable
$if  = preg_match('|if\([^\)]+\)|i',$cont,$c);
// $c contiene if("1" == "2")
$c = str_replace("if","",$c);
//Así queda ("1" == "2")
//AQUÍ TENGO EL PROBLEMA
// Como valido esto ("1" == "2")?????
var_dump($c); //Esto contiene string(12) '("1" == "2")';

Espero me puedan ayudar.
Tags: PHP - PHP Advanced - PHP7 - Question - Template (Theme) - XHTML Votes: 0 - Answers: 8 - Views: 9 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  •  
      0  
     
    Date: 20-01-2019 18:10:18 Hola.
    No entendí lo que necesitas, la aplicación ya esta funcionando y quieres modificar algo o estas desarrollando, estas usando laravel ?
    que contiene tu archivo html ?
      Votes: 0 - Link answer
     
  • Date: 21-01-2019 06:10:21 La aplicación existe esta en php puro. y tenian problema para mostrar las plantillas pero yo ya e resulto eso solo me falta los condicionales que ay en las platillas.   Votes: 0 - Link answer
     
  • Date: 21-01-2019 12:40:55 Y por qué no usar twig?
    Twig
    Twig es seguro, se evalúa sólo cuando hay cambios en la plantilla y luego se compila a una clase PHP. En ningún momento se hacen instrucciones tipo eval u otra que pueda poner en riesgo el servidor
      Votes: 0 - Link answer
     
  • Date: 21-01-2019 13:54:29 Jorge no uso ningún frameword ni nada de eso. por 2 razones 1 no me gustas 2 porque lo que se esta buscado en este sistema es eliminar espacio innecesario. y solo quieren un archivo que se adapte específicamente a las plantillas creadas sin funciones de mas ni de menos. solo las que son. ellos tenían un sistema en wordpress pero al ver lo robusto y de wordpress y que cada kb cuenta dinero. decidieron crearlo de 0 a puro código y lograron la manutención del sistema atravez de la creación de platillas y modificación de base de datos lograron que un sistema de 3mb ahora pesa tan solo 300kb y solo necesito lograr evaluar eso para terminar.   Votes: 0 - Link answer
     
  • Date: 21-01-2019 14:35:40 Ok. Sin frameworks.
    Hace años que trabajo sólo en .NET pero hice cosas parecidas en PHP.
    Te comento como lo encantaría;
    -capturar el contenido del if es el primer paso. Eso más o menos está resuelto
    -Lo siguiente es capturar la operación dentro del if. Asumamos aquí que sólo se permite una condición atómica. Puede ser ==, !=, >, etc.
    - no estás seguro de que operación tendrá cada plantilla así que hay que iterar sobre una lista de expresiones regulares
    -la primera expresión que valide es la correcta. De esa se obtienen los 2 conjuntos capturados y se lo pasas a una función evaluadora asociada
    Pseudocódigo:
    //regex ([a-zA-Z0-9])\=\=([a-zA-Z0-9])
    function equals($a, $b)
    {
       return $a == $b;
    }
    

    Donde a y b son capturados con una regex
    Podrías encapsular todas las operaciones en clases y así mantener todo ordenado
      Votes: 1 - Link answer
     
  • Date: 22-01-2019 14:24:11 Hola Jorge muchas gracias me sirvió mucho los solucione así
    function valconditions($expre){
    		$rgx = [
    			'/([^\s]+)\s([\=\=]+)\s([^\s]+)/i',
    			'/([^\s]+)\s([\!\=]+)\s([^\s]+)/i',
    			'/([^\s]+)\s([\>\=]+)\s([^\s]+)/i',
    			'/([^\s]+)\s([\<\=]+)\s([^\s]+)/i',
    			'/([^\s]+)\s([\<]+)\s([^\s]+)/i',
    			'/([^\s]+)\s([\>]+)\s([^\s]+)/i'
    		];
    		$tipe = "";
    		$a = "";
    		$b = "";
    		$result = false;
    		foreach($rgx as $regx){
    			$i = preg_match($regx,$expre,$r);
    			if($i > 0){
    				$tipe = $r[2];
    				$a = $r[1];
    				$b = $r[3];
    			}
    		}
    		switch($tipe){
    			case '==':
    				$result = $a == $b;
    			break;
    			case '!=':
    				$result = $a != $b;
    			break;
    			case '>=':
    				$result = $a >= $b;
    			break;
    			case '<=':
    				$result = $a <= $b;
    			break;
    			case '<':
    				$result = $a < $b;
    			break;
    			case '>':
    				$result = $a > $b;
    			break;
    		}
    		return $result;
    	}
    
    

    Gracias la voy a mejorar para agregar las condiciones múltiples por ejemplo esto "1 == 2 && 3 == 3"
      Votes: 1 - Link answer
     
  • Date: 22-01-2019 14:27:37 y jorge aclaro no uso frameworks, porque considero mucho peso (mb) para algo sencillo.. e usado frameworks solo y unicamente cuando se que voy a explotarlo al máximo de resto trato de resolver con código puro. por ejemplo un login lo hago con 2 o 3 archivos 100kb máximo. para que usar un framework como laravel que pesa tanto si con 2 o 3 archivos lo logras?.. no se si me explico.   Votes: 0 - Link answer
     
  • Date: 22-01-2019 14:57:49 Entiendo.
    Yo no puedo permitirme no usar frameworks. Ocurre que trabajo en equipo y en proyectos grandes que tienden a crecer más cada ves que se pide algún cambio o personalización. Eso sumado a que no todos tienen el mismo nivel de conocimiento puede ser desastroso si no jalan todos para el mismo lado.
    Saludos
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In