Entradas etiquetadas como ‘Php’

Escrito por Iván Alonso el Viernes 27 de Noviembre de 2009

Esto ha costado por el modo en que se manejan los strings, pero al final se ha conseguido.

Este post de WPRecipes explica cómo conseguirlo, pero el problema viene cuando en tu estado de Twitter se incluye algún enlace. En ese caso el enlace reconstruido no se verá correctamente ya que las comillas dobles aparecerán dos veces (“”), y se añadirá al inicio del enlace el nombre de tu propio dominio para intentar solucionarlo, por lo que tus enlaces siempre serán algo del tipo:

http://www.tudominio.com/"enlace/de/twitter"

Y eso, lógicamente, no funciona. Gracias a un comentario de Nick Heer en este otro post de Smashing Magazine, al respecto de este tema, conseguí llegar a un trozo de código escrito por él… pero que tampoco funciona correctamente.

Al final, la solución ha sido (y por el amor del espagueti volador, con comillas simples, que parece que la gente no sepa cómo funciona PHP):

function nb_parse_feed($feed)
{
    $stepOne = explode('<content type="html">', $feed);
    $stepTwo = explode('</content>', $stepOne[1]);
    $tweet = $stepTwo[0];
 
    $tweet = str_replace('&lt;', '<', $tweet);
    $tweet = str_replace('&gt;', '>', $tweet);
    $tweet = str_replace('&quot;', '"', $tweet);
    $tweet = str_replace('&amp;', '&', $tweet);
    $tweet = str_replace('&lt;a href', '<a href', $tweet);
    $tweet = str_replace('"&gt;', '">', $tweet);
    $tweet = str_replace('&lt;/a&gt;', '</a>', $tweet);
 
    return $tweet;
}
 
function nb_twitter_status()
{
    // Tu usuario de Twitter
    $username = 'neverbot';
    $feed = 'http://search.twitter.com/search.atom?q=from:' . $username . '&rpp=1';
    $twitterFeed = file_get_contents($feed);
    return nb_parse_feed($twitterFeed);
}

Y, donde lo necesites:

<?php echo nb_twitter_status(); ?>

Lógicamente, puedes cambiar los nombres de las funciones, yo he utilizado el prefijo nb porque las he incluido en un archivo de funciones comunes que tengo para los themes de WordPress, que incluyo con:

include_once('nb_funcs.php');
Escrito por Iván Alonso el Lunes 23 de Febrero de 2009

Apunte rápido sobre cómo mostrar las fechas en tu idioma utilizando php:

<?php setlocale(LC_ALL, 'es_ES.ISO-8859-15@euro'); 
echo strftime('%A %d de %B de %Y', strtotime(get_the_time('m/d/Y'))); ?>

Primero establecemos que nuestro idioma será es_ES (sólo con ese identificador ya sería suficiente, aunque aquí lo hemos especificado algo más), y después parseamos la fecha que nos devuelve get_the_time.

Actualizado: Acabo de darme cuenta de que esta forma únicamente es válida cuando estamos dentro de the_loop, y que get_the_time siempre nos devolverá la fecha del post en el que nos encontramos en ese momento. Para obtener la hora del servidor podemos utilizar funciones de php independientes de WordPress:

echo strftime('%A %d de %B de %Y', time());

La razón de ser de que esto funcione es que strftime sí respeta la localización especificada en setlocale.

Actualizado (II): Si con este mecanismo vuestras fechas se muestran traducidas pero en ocasiones muestran símbolos extraños (por ejemplo, la e acentuada de Miércoles), el problema puede estar debido a que estáis intentando escribir un código ISO-8859-15 dentro de una página cuya codificación es otra, por ejemplo UTF8. Solución: utilizad la misma codificación que la página.

<?php setlocale(LC_ALL, 'es_ES.UTF8'); 
echo strftime('%A %d de %B de %Y', strtotime(get_the_time('m/d/Y'))); ?>
Escrito por Iván Alonso el Miércoles 16 de Julio de 2008

Posiblemente habrá otros resaltadores de sintaxis mejores (si los conocéis dejadme un comentario), pero yo he preferido no perder mucho tiempo e instalar en este blog el que ya conocía.

Podéis descargaros la versión 1.5.1 (me da la impresión de que el proyecto ya debe estar parado) de su página de Google Code. Tal y como aparece su tutorial (la sección ‘Usage‘) no os va a funcionar, por lo que explico los pasos:

  • Descargamos y descomprimimos el archivo .rar en nuestro servidor, en la misma carpeta del theme que estamos utilizando.
  • Los scripts sin comprimir no los vamos a necesitar, por lo que podemos deshacernos de la carpeta Uncompressed.
  • Renombramos la carpeta Scripts como js, y Styles como css, para así utilizar los mismos nombres que en la mayor parte de documentación y manuales que podréis encontrar en otros blogs. También sacamos Scripts/clipboard.swf al nuevo directorio flash (flash/clipboard.swf), y renombramos la carpeta general de dp.SyntaxHighlighter a syntaxhighlighter.
  • Por último editamos el header.php de nuestro theme y añadimos las siguientes líneas dentro de la etiqueta <head>:
<!-- Syntax Highlighter -->
<link type="text/css" rel="stylesheet" href="<?php bloginfo('template_directory');?>/syntaxhighlighter/css/SyntaxHighlighter.css"></link>
<script language="javascript" src="<?php bloginfo('template_directory');?>/syntaxhighlighter/js/shCore.js"></script>
<script language="javascript" src="<?php bloginfo('template_directory');?>/syntaxhighlighter/js/shBrushCpp.js"></script>
<script language="javascript" src="<?php bloginfo('template_directory');?>/syntaxhighlighter/js/shBrushCSharp.js"></script>
<script language="javascript" src="<?php bloginfo('template_directory');?>/syntaxhighlighter/js/shBrushCss.js"></script>
<script language="javascript" src="<?php bloginfo('template_directory');?>/syntaxhighlighter/js/shBrushPhp.js"></script>
<script language="javascript" src="<?php bloginfo('template_directory');?>/syntaxhighlighter/js/shBrushXml.js"></script>
<script type="text/javascript" language="javascript">
window.onload = function () {
dp.SyntaxHighlighter.ClipboardSwf = 'flash/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll('code');
}
</script>
<!-- Fin de Syntax Highlighter -->

A partir de aquí, ya podemos utilizar el resaltado de sintaxis en nuestros posts, introduciendo el código dentro de las etiquetas <pre name=”code” class=”lenguaje”> codigo codigo codigo </pre>.

Los lenguajes disponibles son muchos (hay que cambiar ‘lenguaje‘ por el que estéis usando, claro está), y necesitaréis incluir en el header aquellos que vayáis a usar. En el ejemplo que os he puesto yo he añadido C++, C#, Css, Php y Xml, pero hay unos cuantos más disponibles en el directorio js. Dejad únicamente aquellos que sean susceptibles de ser usados, puesto que cada visita tiene que descargárselos y el ahorro de ancho de banda siempre es bueno.

Podéis encontrar otro manual para el gestor de contendos dasBlog en picacodigos.com, donde también podréis encontrar esta lista de alias para los lenguajes que pueden usarse:

Lenguaje: Alias
C++: cpp, c, c++
C#: c#, c-sharp, csharp
CSS: css
Delphi: delphi, pascal
Java: java
JavaScript: js, jscript, javascript
PHP: php
Python: py, python
Ruby: rb, ruby, rails, ror
SQL: sql
VB: vb, vb.net
XML/HTML: xml, html, xhtml, xslt

Escrito por Iván Alonso el Miércoles 25 de Junio de 2008

He perdido un rato rehaciendo ligeramente el código php que genera la página principal (el index.php en los temas de Wordpress) para hacer el código de salida más human-readable. Antes generaba el html de los posts de forma lineal, con todas las etiquetas una detrás de otra, haciendo difícil para alguien que leyera el código html de la página el sacar conclusiones acerca de nada.

Ahora los ‘echo‘ que estaba utilizando maquetan las lineas con retornos de carro y espacios en blanco al comienzo de las líneas, para simular un ‘indent‘ que es mucho más amable de cara al lector humano. Unos pocos bytes más de ancho de banda que quizá puedan ayudar a alguien.

Lo cierto es que a mí me molesta bastante abrir el código de una web y ver que no se han tomado la molestia de hacerlo “amigable” o user-friendly.