jPOP es un framework para realizar aplicaciones web sin necesidad de saber Javascript o Ajax, incluso teniendo poco conocimiento de PHP.
La diferencia entre este framework y los otros es que no toma control sobre toda tu aplicación web, sino solamente de la parte donde se necesita. Además, su core ocupa tan solo 12Kb, pudiendo admitir plugins para ampliar su funcionalidad. jPOP
VÃa / dzone
Aunque parezca mentira cada vez es más frecuente la necesidad de usar geoposicionamiento en nuestras aplicaciones web, sobre todo si queremos darle este toque web2.0 tan de moda.
En el tutorial que hacemos referencia nos guía paso a paso por todo lo que necesitamos saber para usar Google Maps en nuestras aplicaciones.
Desde una pequeña introducción a lo que es el geocoding, pasando por el uso de Google Maps: obtener key, realizar llamadas al API de Google, explicación de la respuesta devuelta por el API; hasta la obtención de datos mediante PHP y la creación de una clase para tratar con el API. Geocoding with PHP and the Google Maps API
Vía / PHPDeveloper.org
Social Web CMS es un sistema de noticias social al estilo de Digg o Menéame que está desarrollado en PHP y MySQL y que nos permite crear nuestro clon de forma sencilla.
Permite la inserción de artículos por parte de los usuarios, votar los artículos, realizar comentarios, valorar los comentarios, buscar contenidos, obtener feeds para secciones, categorías y usuarios, disponer de perfiles, mensajes privados … Además dispone de una administración que permite gestionar el anti-spam, bloquear URLs, importar RSS, … Social Web CMS
Realizar algunas tareas puede ser algo lento, por lo que a veces es necesario ejecutar procesos en paralelo para agilizar la ejecución de un script. PHP no permite programación concurrente, por lo cual hay que simularlo, y para ello es necesario la utilización de sockets.
El método es sencillo, se crean dos sockets y se comprueba que hayan acabado de ejecutarse:
// Ejecuta un proceso en un socket
function JobStartAsync($server, $url, $port=80,$conn_timeout=30, $rw_timeout=86400) {
$errno = '';
$errstr = '';
set_time_limit(0);
$fp = fsockopen($server, $port, $errno, $errstr, $conn_timeout);
if (!$fp) {
echo "$errstr ($errno) \n";
return false;
}
$out = "GET $url HTTP/1.1\r\n";
$out .= "Host: $server\r\n";
$out .= "Connection: Close\r\n\r\n";
stream_set_blocking($fp, false);
stream_set_timeout($fp, $rw_timeout);
fwrite($fp, $out);
return $fp;
}
// Devuelve falso si el socket está desconectado o un string (que puede ser vacio) si está conectado
function JobPollAsync(&$fp) {
if ($fp === false) return false;
if (feof($fp)) {
fclose($fp);
$fp = false;
return false;
}
return fread($fp, 10000);
}
// Ejecución inicial
// Se ejecutan dos procesos cualquiera j1 y j2
$fp1 = JobStartAsync('localhost','/jobs/j1.php');
$fp2 = JobStartAsync('localhost','/jobs/j2.php');
while (true) {
sleep(1);
$r1 = JobPollAsync($fp1);
$r2 = JobPollAsync($fp2);
if ($r1 === false && $r2 === false) break;
echo "r1 = $r1 ";
echo "r2 = $r2";
flush(); @ob_flush();
}
echo "
Jobs Complete
";
El autor profundiza algo más y comenta también cómo se resolvería el método divide y vencerás.
Siempre hay que tener cuidado cuando se programa en paralelo ya que podemos tener problemas al acceder simultáneamente a un recurso compartido.
PHP_Depend es una adaptación de JDepend que permite hacer un estudio de la calidad de tu diseño en términos de reusabilidad, extensibilidad y mantenibilidad.
Todos es hechos están influidos por las dependencias entre los paquetes y PHP_Depend visualiza en un gráfico y con un XML todas las dependencias.
Algo que debemos tener muy en cuenta cuando realizamos nuestra aplicación web es limpiar la entrada de datos de contenido malicioso, ya sea para SQL injection o cross-site scripting (XSS). Los frameworks suelen tener su propia librería que se encarga de ello, pero para aquellos que no usen framework o hagan una aplicación muy sencilla, esta librería les vendrá muy bien.
// Output an unsafe string, presumably user input
$xss = '';
echo 'If your entered your name as ' . $xss . ', we\'d be in trouble. ' . "\n";
// Sanitize that string, and output it safely
$htmlContentContext = sgSanitizer::sanitizeForHTMLContent($xss);
echo "But if we sanitize your name, " . $htmlContentContext . ", then all is well. \n";
Ahora viene la parte más complicada, y digo complicada porque sinceramente he tenido que mirar el código porque algo me fallaba cuando seguía lo que decía la documentación.
El nombre del fichero JSON tiene el siguiente formato [dominio de traducción]-[idioma]-[handler del fichero].json, total nada.
Dominio será el que usemos para traducir, en el ejemplo sería mi-plugin:
__( 'Hola que tal', 'mi-plugin' );
Idioma es el código del idioma, en este caso es_ES
Y por último el handler del fichero es el primer parámetro que usamos en wp_enqueue_script
Lo podemos ver todo en un ejemplo final:
wp_enqueue_script(
'mi-plugin-handler', // El handler mencionado anteriormente
$blocks_script, // Nuestro path
[
'wp-i18n', // De referenciar al menos a wp-i18n
],
);
wp_set_script_translations( 'mi-plugin-handler, 'mi-plugin', plugin_dir_path( __FILE__ ) . 'languages' );