Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Aspect en 25 Agosto 2015, 17:37 pm



Título: CSS en PHP, variables, CSS_PRETTY_PRINT..etc
Publicado por: Aspect en 25 Agosto 2015, 17:37 pm
css_encode(bla)

He hecho una pequeña función en PHP que lo que hace es dejaros crear variables para los colores y demás, algo bastante necesario en CSS pero que aún no tienen, aunque deberían, aquí tenéis el código y abajo cómo usarlo, dad ideas por si se puede mejorar, ¡saludos!
Código
  1. <?php
  2. // Declaracion del tipo de contenido.
  3. header('Content-Type: text/css');
  4.  
  5. // Funcion de 'css_encode'.
  6. const CSS_PRETTY_PRINT = JSON_PRETTY_PRINT;
  7. const CSS_OBFUSCATE_PRINT = null;
  8. function css_encode($selector, $css, $option) {
  9. if($option == CSS_PRETTY_PRINT) {
  10.  
  11. // Limpiar espacios vacíos del selector.
  12. $selector = trim($selector);
  13.  
  14. // Similitud a un codigo CSS con 'json_encode'.
  15. $css = json_encode($css, CSS_PRETTY_PRINT);
  16.  
  17. // Reemplaza las comillas por un valor nulo.
  18. $css = str_replace('"', '', $css);
  19.  
  20. // Reemplaza las comas por puntos y comas.
  21. $css = str_replace(',', '', $css);
  22. $css = str_replace('|', ',', $css);
  23.  
  24. // Muestra en pantalla el valor del resultado.
  25. echo "$selector $css\n\n";
  26. }
  27.  
  28. else if($option == CSS_OBFUSCATE_PRINT) {
  29.  
  30. // Limpiar espacios vacios del selector.
  31. $selector = trim($selector);
  32.  
  33. // Similitud a un codigo CSS con 'json_encode'.
  34. $css = json_encode($css);
  35.  
  36. // Reemplaza las comillas por un valor nulo.
  37. $css = str_replace('"', '', $css);
  38.  
  39. // Reemplaza las comas por puntos y comas.
  40. $css = str_replace(',', '', $css);
  41. $css = str_replace('|', ',', $css);
  42.  
  43. // Muestra en pantalla el valor del resultado.
  44. echo $selector.$css;
  45. }
  46.  
  47. else if($option == null) {
  48. $error_descriptions[E_WARNING] = "Debes indicar el formato de salida del codigo.";
  49. echo $error_descriptions[2];
  50. }
  51. }
  52.  
  53. // Funcion variante de comentarios.
  54. function css_encode_apks8($c) {
  55. echo "/* $c */\n";
  56. }
  57. ?>
  58.  

Para poner una línea de estilos para un elemento después de las funciones o llamándolas con require, habría que poner lo siguiente:
Código
  1. $body =
  2. [
  3. 'background-color' => '#fff;',
  4. 'color' => '#000;'
  5. ];
  6.  
  7. css_encode_apks8("Comentario");
  8. css_encode('contenido', $body, CSS_PRETTY_PRINT);
  9.  

Explico:
Creamos una variable que contenga el array que conformará los estilos de todo el elemento al que vayamos a seleccionar, en este caso he llamado a body para que sea más fácil de entender.

Después añadiremos la llamada a la función css_encode que tiene la sintaxis:
css_encode('nombre del elemento a llamar', $variable_de_estilos, CSS_PRETTY_PRINT);
Otra cosa es que queráis que los estilos estén compactados, para que aparte de que pese menos, haya menos probabilidades de que te "roben" código y es cambiando CSS_PRETTY_PRINT por CSS_OBFUSCATE_PRINT.

El talón de aquiles de la función es que al crear la variable con el array de los estilos, en el valor de una propiedad tienes que añadir tú el punto y coma para separar las sentencias, porque sino no te salen, y para poner una coma para crear valores tipo: Arial, verdana, tahoma, tienes que poner en lugar de la coma, un '|'.

Me gustaría saber también si hay forma de hacer que se acabase el bucle de reemplazar, porque esta función css_encode se aprovecha de la sintaxis de json_encode, y bueno, esto es todo, ¡nos vemos!