Limitar la longitud de un texto a un determinado número de líneas

En ocasiones, nos podemos encontrar que un determinado diseño nos obliga a limitar el número de líneas que puede tener un texto. Esto es imposible de realizar del lado del servidor, con lo que hemos hecho un pequeño javascript que recorta el texto del elemento deseado en las líneas que queramos. El javascript es el siguiente:


$$(".maxlines").each(function(element) {
	var numLines = element.getProperty("rel").substring(element.getProperty("rel").indexOf('[')+1,element.getProperty("rel").indexOf(']'));
	var htmlCode = $(element).get('html');
	// determinamos altura una linea
	$(element).set('html', '-');

	var oneLineHeight = element.getStyle('height').toInt();
	element.set('html', htmlCode);
	// Si tenemos más lineas que las permitidas
	if (element.getStyle('height').toInt() / oneLineHeight > numLines) {

	  point1 = 0;
	  point2 = Math.round(htmlCode.length/2);
	  point3 = htmlCode.length;

	  var i = 0;
	  // Recortamos texto hasta que coja
	  do{
		var newHtml = htmlCode.substring(0, point2) + '...';
		element.set('html', newHtml);
		if((element.getStyle('height').toInt())/oneLineHeight > numLines){
			point3 = point2;
		}else{
			point1 = point2;
		}

		point2 = Math.round((point3-point1)/2)+point1;

	  }while ((point3-point1)>1);

	  if((element.getStyle('height').toInt())/oneLineHeight > numLines){
		  element.set('html', htmlCode.substring(0, point3-1) + '...');
	  }

	}
  });

y en el html lo debemos usar así:

<div class="maxlines" rel="maxlines[3]">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim id est laborum.</div>

la capa del texto debe incluir el class=”maxlines” y la propiedad rel=”maxLines[]” donde la cifra entre corchetes es el número de líneas que se tienen que mostrar.

El funcionamiento básico del script es el siguiente:
- Coloca en la capa un sólo carácter.
- Calcula la altura de esta capa.
- Usando el algoritmo de divide y vencerás vamos reduciendo a mitades la cadena para encontrar rápidamente por donde partir el texto.

y listos… se acaba de maquetar añadiendo puntos suspensivos y listos.

Todo esto funciona conjuntamente con la versión 1.2.2 de Mootools

Comentarios (0)

De Mootools a jQuery: comprobar si un elemento existe

Para los que estamos acostumbrados a mootools, nos es habitual comprobar si un elemento (tag html con id) existe antes de lanzar los scripts, siempre lo hacemos de la misma manera:

if ($("elemento")) { alert("adelaaaaaaaanteee"); }

Pero si pasamos a jQuery, vemos que si lo hacemos así, la expresión siempre devolverá cierto. Ya que la función $(”") en jQuery siempre devuelve un array de elementos. Sabiendo esto, lo que tenemos que comprobar para saber si un elemento existe, es comprobar la longitud del array que nos devuelve:

if ($("elemento").length > 0) { alert("adelaaaaaanteee"); }

Ya puestos, en dojo tendríamos que hacer esto:

if (dojo.byId('elemento')) { alert("adelaaaaaanteee"); }

Comentario (1)

Nuevos proyectos: Naulover y Be-Arquitectos

Naulover - BeArquitectes

BeArquitectes - Naulover

Justo con el estreno de nuestra web corporativa (www.iuttu.com). Estrenamos los dos últimos proyectos hechos para el tandem Paraphernalia-PuigdemontRoca: la web de la empresa de ropa Naulover y la web del equipo de arquitectos Be Arquitectos.

Ambas están realizadas con ayuda del framework de PHP de Zend y la mayor parte del contenido es administrable mediante un gestor de contenidos hecho a medida.

http://www.naulover.com
http://www.be-arquitectos.com

Comentarios (0)

Crear tu template en EZPublish

EZ Publish es un CMS muy potente que permite la creación de todo tipos de sites. Después de un par de intentos de jugar con él, de leer cientos de páginas de documentación, hemos conseguido comenzar a trabajar con los templates, creando uno propio para sobreescribir el que viene por defecto. Para conseguirlo hay que seguir los siguientes pasos:

- Crear una carpeta con el nombre del template que quieras dentro de la carpeta /design, en nuestro caso la hemos llamado iuttu (je je), dentro de esta carpeta hay que crear una carpeta templates y dentro poner la plantilla que queramos sobreescribir (lo ideal es empezar con pagelayout.tpl). La estructura de carpetas nos ha quedado así:

- design
  - admin
  - base
  - iuttu
    - templates
      - pagelayout.tpl
    - plain_site

- Ahora sólo nos queda decirle al sistema que al buscar los archivos de templates busque primero en los que haya en la carpeta iuttu, y luego mire en el sistema (EZ trabaja así). Para lo que tendremos que editar el archivo /settings/siteaccess/plain_site/site.ini.append.php, y donde define los “diseños” del site:

[DesignSettings]
SiteDesign=plain_site
AdditionalSiteDesignList[]=base

añadimos el nuestro:

[DesignSettings]
SiteDesign=iuttu
AdditionalSiteDesignList[]=plain_site
AdditionalSiteDesignList[]=base

Y ya tendremos todo preparado para empezar a trabajarnos la parte de diseño de EZpublish.

Comentarios (0)

Generar contraseña de un directorio protegido

Apache utiliza ficheros .htpasswd (formados por pares “usuario”:”clave”) para almacenar contraseñas de usuario. En internet ser pueden encontrar páginas que generan este tipo de ficheros, aunque hacerlo desde consola es realmente sencillo gracias al comando htpasswd.

Para crear un nuevo usuario lanzamos el siguiente comando:

htpasswd -c <nombre_fichero> <nombre_usuario>

El sistema solicitará la contraseña para el usuario (con verificación) y guardará el fichero con la contraseña encriptada.

Y para modificar una contraseña:

htpasswd <nombre_fichero> <nombre_usuario>

El sistema volverá a solicitar la contraseña y actualizará el fichero.

Ahora sólo queda indicar en el fichero .htaccess del directorio en cuestión que queremos protegerlo:

AuthGroupFile /dev/null
AuthName "Acceso privado"
AuthType Basic
AuthUserFile <ruta_del_fichero_htpasswd>
require valid-user

Comentarios (0)

Instalar un servidor svn

Acostumbrarse a utilizar control de versiones puede costar, pero es imprescindible si queremos trabajar en equipo, mantener un histórico o una copia de seguridad de nuestro trabajo.

Para montar un servidor svn en Ubuntu antes debemos desarcargar algunos paquetes (suponemos que ya tienes un servidor apache instalado):


$sudo apt-get install subversion subversion-tools libapache2-svn


Creamos la carpeta para nuestros ficheros (la del ejemplo es la de defecto) e indicamos que Apache será el propietario de los mismos (los accesos los hará Apache):


$sudo mkdir -p /var/lib/svn
$sudo mkdir -p /var/lib/svn/proyecto
$sudo svnadmin create /var/lib/svn/proyecto
$sudo chown -R www-data.www-data /var/lib/svn


Ya está todo montado. Ahora sólo falta configurar las rutas y los accesos. Para ello, editamos el fichero /etc/apache2/mods-available/dav_svn.conf con nuestro editor preferido (en mi caso, joe):


$sudo joe /etc/apache2/mods-available/dav_svn.conf


Hay varias formas de especificar los permisos para acceso al svn. En este caso utilizaremos una autenticación básica:


<Location /svn>
  DAV svn
  SVNParentPath /var/lib/svn
  AuthType Basic
  AuthName "Repositorio svn"
  AuthUserFile /etc/apache2/svn.passwd
  Require valid-user
</Location>


Esta configuración previene el acceso de lectura anónimo y utiliza el fichero /etc/apache2/svn.passwd como repositorio de contraseñas. Sólo falta crear un nuevo usuario:


$sudo htpasswd -c /etc/apache2/svn.passwd nombre_usuario1


El sistema nos pedirá la contraseña y guardará los datos en el fichero. Si queremos añadir más de un usuario, lanzaremos el mismo comando sin la opción “-c” (que crea el fichero la primera vez). Reiniciamos el servidor apache:


$sudo /etc/init.d/apache2 restart


Y listo. Si accedemos a http://localhost/svn/proyecto desde nuestro navegador o cliente svn solicitará la contraseña de acceso y ya podremos empezar a utilizar el control de versiones.

Comentarios (0)

Nuevo proyecto: Blog de Natasja L

Natasja L

Natasja L

Maquetación y adaptación a la estructura de Blogger del diseño desarollado por Better in Pink! del blog de la fotógrafa Natasja L

El contacto y diseño son mérito de Better in Pink!

Comentarios (0)

Uso de contextos en Zend Framework

En un proyecto web, habitualmente hacemos llamadas al mismo código pero necesitamos que los resultados se muestren de forma diferente. Zend Framework ofrece varios mecanismos para facilitar esta tarea.

Uno de ellos son las vistas parciales (PartialView) que permiten separar una parte de la presentación y aislarlas del contexto. Esto nos permite reutilizar una porción de html y definir un contexto concreto para cada llamada.

El contexto es otro mecanismo que también nos permite ejecutar un código discriminando la salida. El siguiente ejemplo utiliza AjaxContext, un helper que hereda de ContextSwitch y que se especializa en llamadas Ajax.

Para empezar, tendremos que inicializar el contexto:


class ControladorController extends Zeb_Controller_Action{

  public function init(){
    $ajaxContext = $this -> _helper -> getHelper('AjaxContext');
    $ajaxContext -> addActionContext('index','html')
                 -> initContext();
    parent::init();
  }

  public function indexAction(){
    ...
  }

}


addActionContext() nos permite añadir un nuevo contexto a un action (en este caso index). El primer parámetro es el nombre del action y el segundo el tipo de contexto. initContext() inicializa el contexto.

Sólo con estas lineas ya habremos definido e inicializado un nuevo contexto. Toda las llamadas al action index se trataran de la forma habitual, excepto aquellas que cambien de contexto. ¿Y cómo cambiamos de contexto? El siguiente ejemplo de código JavaScript utiliza Mootools para realizar una llamada Ajax activando el contexto:



...
var myRequest = new Request.HTML({
  url : requestUrl,
  update : 'content-div'
}).get({'format':'html'});
...


Donde requestUrl será la url de nuestro action (Controlador - index) y content-div la capa que se actualizará con el resultado de la llamada. El parámetro format es el que activará el cambio de contexto en nuestro action.

Al realizar esta llamada nuestro action ejecutará el código e irá a buscar una view con el formato de nombre /[controlador]/[action].ajax.phtml en lugar del habitual /[controlador]/[action].phtml. Además desactivará los layouts por defecto, siendo la situación ideal para una llamada de este tipo.

Ya está todo preparado. A partir de ahora las llamadas a /controlador/index se gestionarán como siempre, pero cuando realicemos una llamada desde Ajax podremos mostrar sólo una vista parcial. Esta solución es perfecta para mostrar una ficha: al realizar la llamada /controlador/index mostramos la ficha con cabecera, menú, pie, etc.. y al llamar por Ajax cambiamos de vista y sólo mostramos el contenido del elemento para incluirlo en otra vista.

Unas consideraciones finales:

  • AjaxContext añade un tercer contexto html a los dos (json y xml) ofrecidos por ContextSwitch, aunque podemos crear nuestros propios contextos.
  • Una llamada con el parámetro format no cambiará al contexto AjaxContext si no se ha realizado mediante XmlHttpRequest (que es lo que nos interesa)
  • Zend proporciona una serie de métodos para afinar nuestro código y que nos permitirán añadir headers, serializar respuestas Json, activar layouts, etc… en función del contexto
Comentarios (0)

Servidor Ubuntu sin monitor

Es posible que hayas decidido instalar Ubuntu en alguno de los servidores del trabajo o reciclando un ordenador de casa. Es bastante habitual utilizar un switch o dejar estas máquinas sin teclado, ratón y monitor.

Yo lo hice la semana pasada y al acceder remotamente me encontré con un escritorio a una resolución de 640×480. Al parecer, si arrancas sin un monitor conectado (o incluso conectado pero no encendido) el sistema no se puede configurar correctamente. Para evitarlo, tendremos que añadir esta línea en el fichero /etc/X11/xorg.conf en la sección Device:

Section "Device"
...
Option "NoDDCValue"
...
EndSection

Con lo que el sistema obviará la señal del monitor. En mi caso también necesité indicar el refresco en la sección Monitor mediante las opciones HorizSync y VertRefresh.

Si no hay ningún problema, en el próximo arranque el sistema se adaptará a la resolución que hayamos indicado en la subsección Display de la sección Screen de nuestro fichero xorg.conf. En mi caso:

Section "Screen"
...
SubSection "Display"
Modes "1024x768"
EndSubSection
...
EndSection

Comentarios (2)

Nuevo proyecto: Blog From dates to diapers

From dates to diapers

From dates to diapers

Nuevo proyecto y si… nuevo blog… Hacemos más cosas, pero no nos dejan explicarlas =P

Maquetación y puesta en marcha del blog From dates to diapers (de citas a pañales sería la traducción =), basado en Wordpress con administrador propio y desarrollo de widgets específicos.

El contacto y diseño son mérito, una vez más, de Better in Pink!, la diseñadora más richarachera.

Comentarios (0)