La idea es tener una aplicación web muy ligera que acumule URLs relacionados con un tema y que se muestre como si fuese una barra de sub-pestañas. La aplicación está incluida en un único archivo PHP que realiza todas las funciones:
- mostrar la página del grupo (
get
). Se muestra como una barra horizontal de enlaces que al ser pulsados cargan la página en la parte inferior, justo como si se tratase del mismo navegador. Además hay botones para limpiar la parte inferior, crear un marcador del grupo o agregar una nueva URL - crear un grupo nuevo (
post
) - agregar una nueva url a un grupo existente (
put
) - eliminar una URL del grupo (
delete
) - listar los grupos disponibles (
list
) - mostrar un favicon personalizado para un grupo mostrando las primeras 6 letras del título
Para almacenar la información sobre los grupos, he decidido usar un archivo ZIP de nombre "urlpacks.zip" alojado junto al archivo "urlpacks.php" que aparece a continuación. El ZIP contiene un archivo comprimido por cada grupo; el nombre coincide con el título del grupo; y el contenido son las URLs separadas por un salto de línea: Más sencillo imposible.
<?php $id= $_GET['id']; $action= $_GET['action']; $url= $_GET['url']; if($action=='') { if (!empty($url)) $action="post"; else $action="list"; } $zip = new ZipArchive(); if ($zip->open('urlpacks.zip')!==TRUE) { exit("cannot open urlpacks.zip\n"); } switch ($action) { case 'favicon': header('Content-type: image/png'); $im= imagecreate(16,16); $color= imagecolorallocate($im, 255,255,255); $string= str_replace(' ','',$id); $font = imageloadfont('./terminal9.gdf'); imagestring($im, $font, 1, -1, $string, imagecolorallocate($im, 0,0,0)); imagestring($im, $font, 1, 6, substr($string,3), imagecolorallocate($im, 90,90,90)); imagecolortransparent($im,$color); imagepng($im); imagedestroy($im); exit; case 'put': $data= explode("\n", $zip->getFromName($id)); array_push($data,$url); $zip->addFromString($id, implode("\n",$data)); header("location:?action=get&id=".$id); exit; case 'post': if (!$zip->getFromName($id)) $zip->addFromString($id, $url); header("location:?action=get&id=".$id); exit; case 'delete': $data= explode("\n", $zip->getFromName($id)); $key= array_search($url, $data); if ($key!==FALSE) array_splice($data,$key,1); $zip->addFromString($id, implode("\n",$data)); header("location:?action=get&id=".$id); exit; case 'list': echo "index
- ";
for ($i=0; $i<$zip->numFiles;$i++) {
$item= $zip->statIndex($i);
echo '
- ',$item['name'],' ';
$data= explode("\n", $zip->getFromName($item['name']));
if (count($data)>0) {
echo '- ';
foreach($data as $link) echo '
- ',$link,' '; echo '
}
echo ' ';
}
echo '
Para crear un nuevo grupo a partir de la página actual, tengo un bookmarklet en el navegador con el siguiente código:
javascript:id=prompt('nom',Math.random().toString().substr(2));location.href='http://servidor/urlpacks.php?id='+id+'&url='+location.href;
En mi servidor de alojamiento funciona perfectamente y he reducido notablemente las pestañas abiertas. Espero que le sea útil a alguien más. Por cierto, he probado varias extensiones de Firefox para conseguir lo mismo, pero ahora mismo estoy usando Chrome y quería mantener yo la información de los grupos (fácilmente descargable mediante http://servidor/urlpacks.zip)
No hay comentarios:
Publicar un comentario