lunes, 31 de agosto de 2009

Drupal: Insertar código Javascript desde archivo template.php

Ejemplo rápido sobre como insertar código JS desde el archivo template.php:

function bluemarine_preprocess_page(&$vars, $hook) {
if ($hook == 'page')
{
drupal_add_js('alert("Hola");','inline');
$vars['scripts'] = drupal_get_js();
}
}

Notar la definición del encabezado de la función que consiste en:

function NombreTheme_preprocess_page(&$vars, $hook) {...}

En la función drupal_add_js el segundo parámetro es 'inline' para indicar que el código que se va a insertar es código que no procede de un archivo externo.

viernes, 28 de agosto de 2009

Drupal: Reescribir una URL con código PHP

Para poder reescribir la URL de un enlace, se puede usar la función "custom_url_rewrite_outbound". Por ejemplo, supongamos que tenemos un catálogo generado por el Ubercart. Cada elemento del catálogo muestra una imágen y un título, cada grupo de imágen y título tienen el mismo URL, el cual lleva al usuario a una página general donde se muestran todos los items relacionados con el nombre de catálogo al cual se le hizo clic.

El problema sería ¿cómo puedo hacer para que después de hacer clic en uno de los items que muestra el catálogo, muestre más bien, el resultado de una Vista u otra página que nosotros queramos?

La solución más rápida que encontré es agregando en el archivo settings.php la función llamada "custom_url_rewrite_outbound". Con ésta función es posible reescribir la url de cualquier enlace que exista en la aplicación Drupal que estemos creando.

El código de ejemplo es:

function custom_url_rewrite_outbound(&$path, &$options, $original_path) {
if (preg_match('|^catalog/(.*)|', $path, $matches)) {
preg_match('/[0-9]+$/', $path, $matches);
switch ($matches[0])
{
case '3':
$path = drupal_get_path_alias('catalogo-alicates');
break;
case '4':
$path = drupal_get_path_alias('catalogo-lijas');
break;
case '5':
$path = drupal_get_path_alias('catalogo-martillos');
break;
}
}
}

Notar que en el primer preg_match: preg_match('|^catalog/(.*)|', $path, $matches), usamos una expresión regular para filtrar la url que queramos analizar. En mi caso la URL original es de la forma:

http://www.dominio.com/catalog/5

Lo que está en color rojo, es lo que deseo cambiar por

http://www.dominio.com/catalogo-martillos

Dependiendo del número que aparezca en la URL, se establece el alias. Esos alias que estoy usando son páginas que apuntan a Vistas de Drupal previamente creadas.

En realidad, la cosa es más compleja, pues estoy usando taxonomía; cada elemento del catálogo es un término taxonómico. En el índice de términos se observa la relación que existe entre el nombre que le dimos al término y la url que se le asignó automáticamente.

Referencias:
http://drupal.org/node/207330
http://drupal.org/node/243889
http://agaric.com/note/override-taxonomy
regular_expressions

miércoles, 26 de agosto de 2009

Archivos CHM no funcionan.

Descargué un archivo con formato *.chm. El problema es que no podía verlo, ¿por qué?

La respuesta se explica en esta página: Chm Files

Brevemente, para poder ver el archivo, hay que ir a las propiedades del archivo y notaremos que existe un botón que dice "Unblock". Hay que hacer clic en dicho botón y listo!

martes, 18 de agosto de 2009

Drupal: Corregir imágenes transparentes en IE5, IE6

Excelente módulo para corregir transparencias que en IE5 ó IE6 definitivamente son un caso especial. El módulo está en www.jwpctips.com

Lo único que hay que hacer es instalar el módulo, luego en el archivo page.tpl.php buscamos la imágen que queremos corregir. Dicha imágen la encerramos con un bloque DIV de la forma:

<div class="pngfix">
<img .......>
</div>

Alternativa dos: Enlace relacionado

Alternativa 3:
Otra alternativa que en lo personal, me gusta mucho es ni más ni menos que evitar de una vez por todas el uso de versiones inferiores a IE7. En lo personal creo que los navegadores web de Microsoft definitivamente llevan la contraria a lo que es CSS, de hecho es el único, que yo sepa!, que no respeta las normas de CSS establecidas por la W3C. Una forma para indicarle al usuario que se actualice es usando ie6-upgrade-warning de lo contrario inventarse un código para que detecte en que navegador se va a presentar la información y de esa forma impedir la carga del sitio o mostrar un mensaje de advertencia indicando que el sitio no se puede ver correctamente en versiones IE6 e inferiores.

martes, 11 de agosto de 2009

Asp.Net: Código para descargar un archivo.

Código para descargar un archivo:

JQuery: Establecer colores en líneas alternas de una tabla.

En el siguiente trozo de código se muestra como utilizando JQuery es posible cambiar el color de las líneas de una tabla pero en forma alterna:

$(document).ready(function()
{
    $('tr:odd').addClass('odd');
    $('tr:even').addClass('even');
}

viernes, 7 de agosto de 2009

martes, 4 de agosto de 2009

lunes, 3 de agosto de 2009

Asp .Net Ajax: Control Modal PopUp

Código xhtml:

Agregar el control ModalPopUpExtender manualmente para que se inserte la instrucción @Resgister.



No se ocupa programar nada en el codebehind pero lo que si sería necesario es crear unas buenas reglas CSS para personalizar el Panel.

Asp.Net Ajax: Usar control PopupExtender

Código que va en la página aspx:


Código que va en el CodeBehind:

Asp .Net: Proyectos libre descarga hechos en Asp.Net

En las páginas de Asp.Net Ajax encontré un enlace que nos lleva a una sección de descarga de Starter Kits y entre ellos podemos encontrar un Shopping Cart y un Report Web Site ya hechos; pero obviamente son bien básicos.

El enlace para ir a la página es el siguiente: Starter Kits

Ajax .Net: Actualizar un UpdatePanel con código Javascript

Digamos que tengo dentro de un UpdatePanel la hora que se recupera del lado del servidor y no de la computadora del cliente y se desea que la hora se actualice cada segundo del lado del cliente; éste siempre debe ver la hora del servidor.

El primer paso es modificar el evento Load del UpdatePanel; en éste control debemos poner el código para que la hora que aparece en un label se actualice cada vez que ocurre un postback asíncrono.

Protected Sub UpdatePanel1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles UpdatePanel1.Load
Label1.Text = DateTime.Now
End Sub

El siguiente paso es usar el siguiente código Javascript:

<script type="text/javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
setTimeout("Actualizar()", 1000);
function Actualizar() {
prm._doPostBack("UpdatePanel1", "");
setTimeout("Actualizar()", 1000);
}
</script>

Obviamente, con éste ejemplo se pueden implementar muchas otras cosas!.

En caso de no querer implementar la función actualizar, entonces se podría usar el control Timer. En el evento Tick se pone el código para que actualice el contenido del Lable1. Y en el UpdatePanel se agrega un Trigger que haga referencia al control Timer y al evento Tick.

domingo, 2 de agosto de 2009

Asp .Net: Ajax y consumo de WebServices con Javascript

Buscando una explicación sobre que scripts se carga cuando agrego un control ScriptManager a un proyecto Asp.Net, encontré un interesante sitio donde explican muy claro como trabajar con Javascript y los WebServices. Está muy bien explicado y al mismo tiempo esta resumido, no se anda con rodeos; el sitio es TecBlog.

El sitio donde explican más o menos cómo usar el framework de Asp.Net Ajax está en CideSoft