No existe ninguna imagen

Archive for the ‘Programación’ Category

Como crear un botón costumizado para TinyMCE

Jueves, junio 30th, 2011
Este artículo es parte de una serie la cual trata temas sacados de las “palabras claves” (keywords) usadas por personas que llegan a mi website mediante motores de búsqueda (google, bing, etc). He decidido hacer esto ya que veo que muchas personas  llegan al blog buscando algunos temas los cuales todavía no he tratado.

Crear un botón costumizado para TinyMCE para hacer cosas simples, como agregar elementos o HTML al editor, es bastante sencillo.  Se necesitan 4 cosas:

  1. La imagen del botón. Esta debe ser una imagen 20px por 20px. Si es de otro tamaño el editor alterará el alto y el ancho de la imagen para que se de ese tamaño.
  2. El código HTML o elemento que quieres que se inserte en el editor.
  3. El código javascript. Este se debe añadir al objeto de configuración del tinyMCE.init().
  4. Agregar el nuevo botón a la lista de botones.

Imagen

Como he mencionado antes la imagen debe ser 20px por 20px. Si la imagen es un gif o un png con transparencia se podrá apreciar el efecto “hover”, osea, el cambio que ocurre cuando se pone el pointer del mouse encima del botón. En este caso he usado esta  imagen sacada de IconFinder.  La imagen es originalmente 16px por 16px. Yo la he llevado al tamaño adecuado:

Código html que se va a insertar

Para este ejemplo yo usaré la frase “Hola Mundo!“, pero pueden sustituir este código por lo que quieran:

Hola Mundo!

Código javascript que creará la funcionalidad

La última parte, pero a la vez la más importante, es el código el cual debe insertarse en el objeto de la configuración de tu tinyMCE.init(). Este es el código:

setup : function(editor) {
	// Boton 1
	editor.addButton('mi_boton', {
		//nombre del boton
		title : 'Mi boton',
		//imagen del boton (20 x 20 px)
		image : 'mi_imagen.png',
		//funcion a ejecutarse cuando se le de clic al boton.
		onclick : function() {
			editor.focus();
			editor.selection.setContent('Contenido a insertar');
		}
	});
}

A continuación hago un desglose del código:

setup

El método “setup” añade eventos al editor. Como parámetro pasamos el objeto del editor:

setup : function(editor) {
	editor.evento(parametro)
}

addButton

Es un método del objeto del editor el cual añade el botón a la barra de botones.

ed.addButton('example', {
	title : 'example.desc',
	image : '../jscripts/tiny_mce/plugins/example/img/example.gif',
	onclick : function() {
	ed.windowManager.alert('Hello world!! Selection: ' + ed.selection.getContent({format : 'text'}));
}

Este método acepta dos parámetros:

  1. el nombre del botón
  2. un objeto con las opciones del botón.

Las opciones del objeto son las siguientes:

  • title: titulo del botón
  • image: ruta de la imagen que se va a utilizar para el botón
  • onclick: función  con el evento click del botón

En el caso de mi ejemplo este es el resultado:

setup : function(editor) {
	// Boton 1
	editor.addButton('mi_boton', {
		//nombre del boton
		title : 'Hola Mundo',
		//imagen del boton (20 x 20 px)
		image : 'page_add.png',
		//funcion a ejecutarse cuando se le de clic al boton.
		onclick : function() {
			editor.focus();
			editor.selection.setContent('Hola Mundo!');
		}
	});
}

Puedes ver mi tinyMCE.init aquí

Añadir botón a la lista de botones

Una vez incluido el código al tinyMCE.init se agrega a la lista de botones, sea, a una de las propiedades:

  • theme_advanced_buttons1
  • theme_advanced_buttons2
  • theme_advanced_buttons3

ejemplo:

theme_advanced_buttons2 : "mi_boton, styleselect, formatselect,fontselect,fontsizeselect,separator,image,media,vfilebrowser,preview",

jTinyAjax: Plugin de jQuery para convertir a TinyMCE en un editor AJAX

Martes, mayo 17th, 2011

jTinyAjax

jTinyAjax es un plugin de jQuery el cual permite utilizar el editor TinyMCE como un editor AJAX, ideal para hacer cualquier tipo de contenido editable . Aunque TinyMCE ya posee un muy buen API para hacer llamadas AJAX yo he tratado de simplificar el proceso lo más posible usando jQuery y agregar algo de funcionalidad extra. El plugin pesa 5kb minificado, sin contar TinyMCE, y puede ser integrado con jQuery UI y BlockUI para efectos adicionales.

Versión actual

jTinyAjax 1.2

Pruebas hechas en:

IE 7 en adelante, Firefox 3 en adelante, Chrome 10 en adelante, Opera 11 en adelante y Safari 4 en adelante.

Dependencias

  • El plugin depende de jQuery versión 1.4.2 o mayor debido al uso de funciones como delegate().
  • También depende del paquete normal de TinyMCE versión 3 o superior. Favor de no usar la versión de jQuery.

Opcional

  • jQuery UI
  • BlockUI

Uso

Primero, debemos incluir los archivos necesarios:

<!-- css jTinyMCE -->
<link href="css/jtinyajax.css" rel="stylesheet" type="text/css" />
<!-- Scripts -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js" type="text/javascript"></script>
<script src="js/tiny_mce/tiny_mce.js" type="text/javascript"></script>
<script src="js/jTinyAjax.jquery.min.js" type="text/javascript"></script>

Si se van a usar jQuery UI y/o BlockUI se incluyen también:

<!-- css jquery UI -->
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/base/jquery-ui.css" type="text/css" />
<!-- Scripts -->
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js" type="text/javascript"></script>
<script src="js/jquery.blockUI/jquery.blockUI.min.js" type="text/javascript"></script>

La forma más básica de usar jTinyAjax es pasando el URL de la página encargada de interactuar con el servidor, de esta forma:

//con opciones defecto
$('.jtinymceajax').jTinyAjax({
     url: "pagina.php"
});

Opciones

  • url: defecto – Empty String
    • URL donde se enviará el contenido. La misma se encargará de las operaciones del lado del servidor
  • typeRequest: defecto - ”post”
    • Tipo de request AJAX , “post” o “get”
  • tinymceinit: defecto - Objeto de opciones de TinyMCE
  • extraParam: defecto - Empty String
    • Parametros extras para enviar en la consulta AJAX el formato url string:
      variable1=valor1&variable2=valor2
  • buttonTextEdit: defecto - ”save”
    • Texto del boton de enviar el contenido
  • buttonTextCancel: defecto - ”cancel”
    • Texto del boton de cancelar el contenido
  • UIfy: defecto - false
    • Opcion para convertir botones en botones de jQuery UI
  • blockUI: false
    • Opcion para usar blockUI. Valores: true, false
  • blockOptions: defecto - Objeto de opciones de blockUI
    • Opciones de blockUI que se utilizarán si la opción blockUI tiene el valor de true. Para más opciones pueden visitar la página oficial del plugin.
  • ajaxTypeData: defecto - ”html”
    • Tipo de data a recibirse. HTML para el comportamiento defecto. Esto equivale al opci&oacute;n dataType de la funci&oacute;n ajax() de jQuery. Si se usa json se espera un campo llamado “editor” el cual debe poseer la informaci&oacute;n que se quiere colocar en el editor web. El json puede contener cualquier campo adicional, ejemplo:
      {"editor":"esto se pone en el editor","mensaje":"este es un mensaje adicional"}
      

      El json será “parseado” antes de pasarse a los eventos usando el método “$.parseJSON()” de jQuery.

Eventos

  • onClick: function
    • Callback que se ejecuta cuando se le da click al elemetno para editarlo
  • onCancel: function
    • Callback que se ejecuta cuando se le da click al boton de cancelar
  • onSend: function
    • Callback que se ejecuta cuando se le da click al boton de enviar
  • onError: function
    • Callback que se ejecuta cuando hay un error en la consulta
  • onSuccess: function
    • Callback que se ejecuta cuando termine de realizarse la consulta

Demo

Descarcar

  • Descarga el plugin en GitHub

Buenas prácticas al escribir código usando Dreamweaver (primera parte)

Martes, noviembre 30th, 2010

Ya sé que existe mucha información en la web acerca de este tema, pero no creo que hayan muchos enfocados a Dreamweaver. Este artículo forma parte de una serie dedicada a promover el uso de estándares al escribir código para tecnología web usando Dreamweaver. Escribo específicamente acerca de DW por varias razones:

  1. Primero que nada, aunque es la razón menos importante, es el editor que más uso. Digo que es la menos importante ya que el escribir siguiendo los estandares no es algo que tenga que ver con tal o cual editor, lo menciono ya que estaré demostrando como utilizar funciones específicas de DW para lograr estos resultados.
  2. Como ya he dicho antes, debido a sus capacidades WYSIWYG DW es uno de los editores web mas utilizados por personas sin mucha experiencia escribiendo código. Debido a esto muchos de los usuarios de DW no están familiarizados con estos conceptos. Este es el grupo al cual va dirigido este artículo.
  3. También debo agregar que, aunque la manera de lograr los resultados que queremos se relacionan con DW, los conceptos generales no se relacionan con ningún editor web.

Voy a empezar con los siguientes consejos:

Valida tu código HTML/CSS

Creo que lo más importante es tener el mayor control posible del código que escribes. Las posibilidades de perder ese control aumenta mientras aumenta el tamaño de la página. Es por eso que verificar que el código es valido en todas las etapas del proyecto es importante. Un código válido ayuda a no tener disminuir los problemas de visualización de las páginas. También ayuda a que las páginas se vean de forma más homogénea en todos los navegadores.

DW posee herramientas para hacer validaciones HTML pero siempre he considerado que no son muy buenos. Se puede validar el XHTML usando el comando: File -> Validate -> As XML, pero muchas veces no funciona de forma deseada. Mi recomendación es usar el Validador de la W3C para realizar validaciones (X)HTML y el Validador de CSS para las hojas de estilo. Recomiendo el uso del Webmaster Toolbar para hacer validaciones sin la necesidad de ir a la página de la W3C. También te da la posibilidad de validar documentos en tu servidor local:

El uso del validador también ayuda a fortalecer el conocimiento del HTML y CSS. El validador provee siempre una explicación detallada del problema, por ejemplo:

Si usamos Google Translate para traducir la página podemos ver el problema claramente:

Por último, es bueno tener en cuenta que el validaror es una herramienta. Te ayuda a tener un control de código. Para ser sincero, yo repudio el uso de “hacks” CSS (mayormente aplicados a Internet Explorer 6), pero también pienso que cada programador tiene el derecho a utilizar los recursos necesarios mientras entienda las consecuencias y mientras (de nuevo) tenga control de su código.

Como nombrar los archivos

Esto es algo que tampoco tiene que ver con DW y que también que se ha discutido bastante pero me parece que no está de más mencionarlo aquí debido a las veces que he visto a usuarios de DW tener problemas por a la mala forma de nombrar archivos dentro de un servidor.

Al momento de nombrar cualquier tipo de archivo que será incluido en el servidor (.html, .jpg, .php. .js, etc) es importante tener en cuenta las siguientes consideraciones:

  1. El nombre del archivo sólo debe poseer caracteres de la a a la z (sin incluir la ñ ni letras con acento), números del 1 al 9, underscore (_) y guiones (-).
  2. Los nombres deben ser únicos en cada directorio. Esto debería ser algo obvio ya que ningún sistema operativo permite tener dos archivos que se llamen iguales en un directorio, pero también tenemos que tener en cuenta que Windows no puedes usar nombres iguales sin importar mayúsculas mientras que en sistemas operativos tipo UNIX (Linux por ejemplo) sí se permite.
  3. También es bueno escoger una manera de remplazar los espacios en blancos y usar esta “convensión” siempre. Ejemplos para eso: usar underscore (nombre_archivo.html), usar guión (nombre-archivo.html), usar mayúsculas (algo que es menos usado) (nombreArchivo.html). Yo suelo usar la la segunda opción ya que pienso que es más fácil de leer.

Usar texto alterno (alt) para las imágenes

El uso del atributo alt en las los tags <img /> (imágenes) y <area /> (área) es requerido ya que es necesario proveer un una explicación alterna en casos que las imágenes no pueden ser visualizadas correctamente o si el contendido está siendo visto por alguna persona con algún tipo de impedimento visual.

Al momento de insertar una imagen DW te pide primero que nada que especifiques un texto alterno y, de forma opcional, una descripción más extensa:

Si decides no hacerlo en ese momento sólo necesitas dar clic al botón de cancelar. Siempre podrás agregar o cambiar el Texto ALT si le das clic a la imagen específica y buscas en el Panel de Propiedades el campo Alt:

Usar Labels correctamente en los formularios

Los label son básicamente etiquetas que se asignan a los inputs (text, checkboxes, radio boxes, etc), textareaselect menus. Su propósito es describir el uso del campo, pero ejemplo, en este caso el label del campo “name” es “Name” (Imagen sacada de los ejemplos de dialog de jQueryUI):

Label 1

Parecería obvio el hecho de que se deben proveer instrucciones específicas para el usuario al momento de llenar una formulario, pero si tomamos en cuenta la manera como los elementos están organizados en la página (flow) muchas veces la relación label/campo no es tan evidente. Esto es un problema mayor si el usuario posee un impedimento visual. Es por eso que es importante hacer que esta relación sea lo más clara posible.

Hay dos formas de crear esta relación:

  1. Meter el campo dentro del elemento label:
    <label>Nombre
    <input id="nombre" name="nombre" type="text" />
    </label>
    
  2. Igualar el valor del atributo for del label al id del campo.
    <label for="nombre">Nombre</label>
      <input type="text" name="nombre" id="nombre" />
    

Ambas prácticas son perfectamente válidas, aunque según mi experiencia, en  la mayoría de los casos se usa la segunda opción ya que es mucho más flexible. DW provee la funcionalidad para utilizar ambos métodos. Si estás en vista de diseño y le das al botón de agregar un campo de formulario DW pregunta primero si vas a utilizar un label con el campo:

Las opciones son:

  • ID: el id del campo que vas a crear, por ejemplo: nombre (los id en html tienen que ser únicos en cada página. Se siguen las normas de nombrar un archivo pero además sólo se puede empezar con una letra).
  • Label: El label (etiqueta) del campo, por ejemplo: Favor de especificar su nombre.
  • Estilo (Style): Aquí escogeremos uno de los métodos explicados anteriormente : 1-usar el atributo for y 2-incluir el campo dentro del label o 3-optar no usar label.
  • Posición (Position): Indica la posición del label: 1-antes del campo o 2-después del campo.
DW también posee campos para el access key y el tab key, pero eso lo discutiremos en otra ocasión.