Combine los puertos php jQuery y Zen-Coding para emular el estilo de progtwigción del lado del cliente en los scripts del lado del server.

Cuando escribo el código del lado del cliente, uso HTML / CSS / JavaScript y, últimamente, jQuery para acelerar la encoding y utilizar methods mejorados para lograr el mismo objective.

En mi editor de text utilizo zen-coding para acelerar la escritura de código y también para evitar errores. Estuve viendo zen-coding como un plugin de jQuery por un time, pero tiene un defecto fatal, que quiere que el HTML se escriba y se envíe al cliente sin problemas antes de que inicie javascript.

Aunque podemos usar serveres JavaScript (env.js o node.js) y, por lo tanto, hacer un montón de aplicaciones de desarrollo usando JavaScript y jQuery, todavía no me siento cómodo moviéndome ya que es una tecnología emergente, y tiene muchas diferencias e inconvenientes ( y también algunas ventajas importantes).

Quiero continuar usando el lado del server de PHP, pero desarrollarme de la forma en que me siento más cómodo y familiarizado con el JavaScript del lado del cliente.

Por lo tanto, he estado buscando en QueryPath, que es un puerto PHP de jQuery que tiene como objective tomar las mejores y más relevantes partes de jQuery y volver a trabajar para adaptarlas al entorno del server.

Eso es todo genial, y ahora he estado buscando en dos classs de PHP capaces de analizar zen-coding que, cuando se combina, actúa como un gran motor de templates y también evita errores en mi código.

El problema que estoy teniendo es que ninguno de los analizadores de encoding zen admiten un set completo de características de encoding zen.

Así que finalmente mis preguntas (lo siento por la introducción bastante larga)

  1. ¿Existe un analizador de encoding zen del lado del server que pueda usar en mi código PHP?
  2. ¿Existe un sistema de templates alternativas bueno (muy conciso y completo) para usar encoding zen? (que sé que no está diseñado originalmente para esta tarea)
  3. ¿Hay un mejor enfoque que deba tomar para lograr mi objective final de networkingucir la brecha entre la forma en que codigo el lado del cliente y el lado del server?
  4. ¿Existe una biblioteca PHP que implemente una carga de funciones de utilidad que mediante el uso mejorará la security / el performance de mi código sin que yo aprenda todo el funcionamiento interno? (como jQuery hace por javascript)

NB: Estoy buscando más equivalencia funcional que similitud sintáctica, aunque ambas son una ventaja para mí.

Aquí hay algunos códigos de testing comentados que deberían iluminar lo que estoy tratando de lograr:

<?php // first php based zen-coding parser // http://code.google.com/p/zen-php require_once 'ZenPHP/ZenPHP.php'; // my own wrapper function function zp($abbr){ return ZenPHP::expand($abbr); } // second php based zen-coding parser // https://github.com/philipwalton/PW_Zen_Coder require_once 'PW_Zen_Coder/PW_Zen_Coder.php'; $zc = new PW_Zen_Coder; // my own wrapper function function pwzc($abbr){ global $zc; return $zc->expand($abbr); } // php port of jQuery with a new server-side flavor // http://querypath.org/ require_once 'QueryPath/QueryPath.php'; // initialize query path with simple html document structure qp(zp('html>head+body')) // add a heading and paragraph to the body ->find('body') ->html(zp('h1{Zen Coding and jQuery - Server Side}+p{This has all been implemented as a php port of JavaScript libraries}')) // add a comments link to the paragraph ->find('p') ->append(pwzc('span.comments>a[href=mailto:this@comment.com]{send a comment}')) // decide to use some jquery - so add it to the head ->find(':root head') ->append(zp('script[type=text/javascript][src=/jquery.js]')) // add an alert script to announce use of jQuery ->find(':root body') ->append(zp('script[type=text/javascript]{$(function(){ alert("just decided to use some jQuery") })}')) // send it to the browser! ->writeHTML(); /* This will output the following html <html> <head> <script type="text/javascript" src="/jquery.js"></script> </head> <body> <h1> Zen Coding and jQuery - Server Side </h1> <p> This has all been implemented as a php port of JavaScript libraries <span class="comments"> <a href="mailto:this@comment.com"> send a comment </a> </span> </p> <script type="text/javascript"> $(function(){ alert("just decided to use some jQuery") }) </script> </body> </html> */ ?> 

Cualquier ayuda es muy apreciada

5 Solutions collect form web for “Combine los puertos php jQuery y Zen-Coding para emular el estilo de progtwigción del lado del cliente en los scripts del lado del server.”

en primer lugar, quiero decir que he votado su respuesta porque está bien explicada y tengo un buen punto a considerar; entonces quiero dejarte pensar sobre este otro punto:

GOTCHAS

  1. En mi humilde opinión, usted está complicando todo el asunto;)

  2. entre todo el código de PHP necesario para generar el HTML y el propio HTML de salida hay muy poca diferencia en el término de longitud de código escrito.

  3. el código es completamente irnetworkingeable para todos los que no conocen las 3 libs o lo que sea.

  4. la velocidad de la carga del sitio disminuirá enormemente en comparación con la semplicidad del HTML vainilla.

  5. cuál es la verdadera diferencia entre:


 h1{Zen Coding and jQuery - Server Side}+p{This has all been implemented as a php port of JavaScript libraries} 

y

 <h1>Zen Coding and jQuery - Server Side</h1><p>This has all been implemented as a php port of JavaScript libraries</p> 

6 .. como sabes, zen-coding y queryPath no están destinados a ser utilizados de la manera que lo estás haciendo, al less no en un escenario de producción.

7 .. El hecho de que jQuery tenga una buena documentation y sea útil de usar no significa que nadie pueda utilizarlo con éxito. ( la mera copy / pasado no se considera una habilidad de encoding de la OMI )

SOLUCIÓN

es probablemente la mejor solución para ti que está buscando algún tipo de PHP Templating Engine como smarty , esto se adaptará a tus necesidades de varias maneras:

  1. security / performance
  2. estrechando la brecha entre la forma en que codigo el lado del cliente y el lado del server

un ejemplo sería: ( para ser considerado un ejemplo muy primitivo, Smarty tiene funcionalidades más potentes )

 <!-- index.tpl --> <html> <head> {$scriptLink} </head> <body> <h1> {$h1Text} </h1> <p> {$pText} <span class="comments"> <a href="{$aLink}"> {$aText} </a> </span> </p> {$scriptFunc} </body> </html> 

  // index.php require('Smarty.class.php'); $smarty = new Smarty; $smarty->assign("scriptLink", "<script type=\"text/javascript\" src=\"/jquery.js\"></script>"); $smarty->assign("scriptFunc", "<script type=\"text/javascript\">$(function(){ alert(\"hello world\") });</script>"); $smarty->assign("h1Text", "Zen Coding and jQuery - Server Side"); $smarty->assign("pText", "This has all been implemented as a php port of JavaScript libraries"); $smarty->assign("aText", "send a comment"); $smarty->assign("aLink", "mailto:this@comment.com|mailCheck"); $smarty->display('index.tpl'); 

NOTA: el uso de mailCheck , sí, también debe considerar eventualidad algún tipo de verificación variable. Smarty puede hacerlo …

espero que esto ayude. 😉

Preguntas 1 y 2

Un motor de plantilla similar al ejemplo de ZenCoding sería Haml . La syntax es diferente, pero es similarmente breve y bastante concisa en general.

Si le gusta usar ZenCoding, podría considerar simplemente usar un editor con soporte para ello. PhpStorm por ejemplo incluye un plugin de ZenCoding por defecto. Estoy seguro de que otros (como Vim) también tienen complementos para este propósito. Sin embargo, este enfoque solo le permitirá escribirlo: una vez que lo haya escrito, el editor lo ampliará al marcado HTML real.

Pregunta 3

Creo que una parte de este problema es que son cosas inherentemente completamente diferentes. El lado del scripting del lado del cliente es, por lo general, solo una interfaz de usuario. Ciertos styles de progtwigción y enfoques se utilizan con la interfaz de usuario del browser. Sin embargo, en el lado del server, generalmente tiene procesamiento de datos, y para el procesamiento de datos, otros types de patrones funcionan mejor.

Tengo dudas sobre si el thinger QueryPath que está usando es una elección especialmente buena … Parece oscurecer el marcado HTML, lo que dificulta el resultado exacto de las operaciones.

Para la generación de tags HTML en el lado del server, recomendaría usar un motor de templates o simplemente usar templates PHP.

Un enfoque que podría utilizar es descartar completamente la generación de marcado del lado del server. Por supuesto, esta no es una buena idea para todo, pero para aplicaciones web complejas (en el estilo de Gmail o similar), puede generar el marcado completo utilizando solo JavaScript. En el server, solo usaría JSON para devolver datos. De esta forma, no tiene que lidiar con el marcado en el server y puede seguir usando jQuery o lo que sea en el cliente para todo el asunto.

Pregunta 4

De nuevo, estoy un poco dudoso sobre todo esto. Si no comprende lo que sucede debajo del capó, ¿cómo puede producir un buen código? ¿Cómo puede comprender o depurar las cosas correctamente cuando salen mal o no funcionan como se esperaba?

Ahora no sé si eres un gurú de PHP o no, pero personalmente te sugiero que aprendas cómo funcionan las cosas. No tienes que escribir todo desde cero para hacer eso. Elegir un marco es una buena idea, y hará exactamente lo que usted pida: hará muchas cosas por usted, para que no tenga que preocuparse tanto por la security u otras cosas.

Personalmente, recomendaría utilizar Zend Framework, ya que proporciona una amplia gama de componentes, y solo puede usar las piezas que desee; no tiene que usar todo el framework de una vez. Sin embargo, puede ser un poco complejo al principio, especialmente si no está muy familiarizado con los conceptos PHP y OOP, por lo que puede tener mejor suerte al principio con algún otro marco.

No estoy seguro de entender su pregunta, pero generalmente tengo este enfoque simple:

 <?php ob_start(); $config->js[] = 'js/jquery.js'; ?> <h1> <del>Zen Coding and jQuery - Server Side</del> <ins>HTML and PHP :-)</ins> </h1> <p> This has all been implemented <del>as a php port of JavaScript libraries</del> <ins>in php</ins> <span class="comments"> <a href="mailto:this@comment.com"> send a comment </a> </span> </p> <script type="text/javascript"> $(function(){ alert("just decided to use some jQuery") }) </script> <?php $content = ob_get_clean() ?> <?php require 'layout.php' ?> 

Algunos puntos:

  1. ob_start enciende el búfer de salida (la salida no se envía al cliente sino que se almacena en un búfer interno)
  2. $config->js[] = 'js/jquery.js'; le dirá al layout que agregue una nueva label de secuencia de commands
  3. Luego está el HTML simple que debe ser decorado con el layout
  4. <?php $content = ob_get_clean() ?> obtiene el resultado almacenado en el búfer interno y lo asigna a una variable.
  5. <?php require 'layout.php' ?> includeá el layout con la estructura HTML principal y cierta lógica para imprimir metas, título, tags <link> , tags <script> , etc. … El layout contendrá un <?php echo $content ?> para imprimir el contenido de la página.

Los puntos 1, 4 y 5 se pueden delegar a un controller frontal, por lo que la vista puede ser justa:

 <?php $config->js[] = 'js/jquery.js'; ?> <h1> <del>Zen Coding and jQuery - Server Side</del> <ins>HTML and PHP :-)</ins> </h1> <p> This has all been implemented <del>as a php port of JavaScript libraries</del> <ins>in php</ins> <span class="comments"> <a href="mailto:this@comment.com"> send a comment </a> </span> </p> <script type="text/javascript"> $(function(){ alert("just decided to use some jQuery") }) </script> 

Creo que te falta por completo el punto de ZenCoding. ZenCoding está pensado para integrarse en su editor, no en su aplicación. Es una forma de escribir rápidamente HTML utilizando less teclas y con less errores. Tu código de testing comentado no se ve todo lo que puedo usar para mí. Prefiero la versión HTML simple.

Si la velocidad y la calidad de la escritura de HTML sencillo es un problema para usted, tal vez es hora de cambiar a un mejor editor? Uno con soporte para ZenCoding, balanceo automático de tags HTML, autocompletado, fragments / templates, etcétera. He configurado Vim para que haga todo esto por mí. Me han dicho que StormPHP también es bastante bueno.

Estoy bastante pnetworkingispuesto en mi respuesta, ya que soy el autor de QueryPath, pero me gusta lo que intentas hacer. (Siempre es emocionante ver mi código usado de una manera que nunca anticipé).

QueryPath tiene un mecanismo de extensión. Utilizándolo, puede agregar methods directamente a QueryPath. Así que podría, por ejemplo, escribir un plugin simple que le permita replace qp()->find()->append(zp()) con algo como qp()->zp($selector, $zencode); .

Puede echar un vistazo a las extensiones en QueryPath/Extensions y ver cómo funcionan. ( QPXML.php es fácil de asimilar).

Si terminas construyendo (y lanzando) una solución, por favor avísame.

Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.