jueves, 14 de junio de 2012

Convertir uri de Drupal 7

Cuando estamos trabajando con ficheros en Drupal 7 (Imágenes, vídeos, documentos, etc) y queremos hacer algo "a mano", es decir, desde el template del nodo queremos hacerlo a nuestra manera, vemos que al pintar el array de cualquier archivo adjunto a un nodo obtenemos algo así:

stdClass Object
(
    [uid] => 1
    [status] => 0
    [filename] => image_1.jpg
    [uri] => public://subcarpeta/image_1.jpg
    [filemime] => image/jpeg
    [filesize] => 121406
    [source] => field_imagen_und_4
    [destination] => public://subcarpeta/image_1.jpg
    [timestamp] => 1339667493
    [fid] => 24
)


Si queremos hacer algo así:
< img src="$imagen['uri']" />
No podremos, ya que esa "uri" es interna de Drupal y sólo él sabe cómo interpretarla.

Para obtener la ruta real al archivo debemos hacer lo siguiente:
$url = file_create_url('public://subcarpeta/image_1.jpg');
Esto nos devuelve una ruta absoluta al fichero tal de la forma http://www.example.com/sites/default/files/subcarpeta/imagen_1.jpg

Para tener la ruta referente a la raíz de Drupal podemos parsear la url con php:
$url = parse_url($url);
La ruta referente a Drupal es el parámetro path:
$path = $url['path'];

jueves, 16 de febrero de 2012

Cómo utilizar estilos de imágenes en Drupal 7

Para pintar las imágenes en Drupal 7 como lo hacíamos en Drupal 6 con nuestro querido imagecache desde el tema, recordemos:

 theme('imagecache', 'nombre_del_estilo', 'path_a_la_imagen);


En Drupal 7, como esto está implementado directamente en el núcleo de Drupal, hay que hacerlo a su manera. Esta es una de ellas:

 $image_path = image_style_url('nombre_del_estilo', uri_de_la_imagen);


Por ejemplo, mi estilo se llama Imagen_grande y la uri a mi imagen es public://imagen_test.jpg. Pues para pintarla en el tema sería:

 $image_path = image_style_url('Imagen_grande', 'public://imagen_test.jpg');
echo '< img src="' . $image_path .'" />';



Esto es todo por hoy :D

lunes, 30 de enero de 2012

Obtener resultados de una consulta en utf-8

Importando contenidos de otra base de datos, me ha surgido un problema que nunca había tenido, y es que al hacer la consulta, me devolvía algunos resultados como "???? ????????? ??". Al hacer un utf8_encode / utf8_decode al texto en cuestión, no lo codificaba bien, puesto que mysql me devolvía directamente esos caracteres, imposibilitando su conversión posterior.

Para obtener estos caracteres, que por cierto son textos en griego, ruso, japonés, etc. hay que añadir una simple función extra al crear la conexión con la base de datos: mysql_set_charset, de tal manera que la conexión quedaría:

$c = mysql_connect('localhost', 'user', 'pass');
mysql_set_charset('utf8', $c);
mysql_select_db("batabase", $c);



¡Saludos y hasta la próxima!