Capy

Drupal, Ubuntu, jQuery, CSS

Follow me on TwitterRSS Feeds

  • Home
  • CSS y Maquetación
  • Drupal 6
  • jQuery
  • PHP
  • Programación
1263055255_application-javascript

JS: Como saber si un objeto undefined está undefined

Aug 31st

Posted by Capy in Programación

No comments

Suena a boludez:


if( objetoso == undefined ){
	return "objetoso no está definido.";
}

Pero lo anterior no te va a funcionar porque al querer comparar un objeto que está indefinido, el navegador va a arrojarte un error :S

La forma correcta de hacer esta comprobación entonces es:


if( typeof(objetoso) === "undefined" ){
	return "objetoso no está definido.";
}

Y ya nos evitamos que se rompa todo por culpa de un objeto indefinido…

Bye.

JavaScript, snippet
Drupal!

Como ver las variables disponibles en una plantilla .tpl.php (PHPTemplate)

Aug 31st

Posted by Capy in Drupal 6

No comments

Otro de esos TIP que nos vienen sorprendente mente bien :) .

Si estas haciendo debug sobre una plantilla y necesitas saber cuales son las variables de las que dispones sobre la misma, te habras dado con el problema de que no se pueden ver. Osea, las variables existen, y si las mandas a imprimir con un echo() seguro que ahi está, pero hasta que no lo haces no podes saber siquiera que existe.

Bueno basta de intro, vamos a un ejemplo rapido y claro:

Si pones esta función en la plantilla que querés investigar, vas a poder ver un array ($variablesDisponibles para este ejemplo) de los nombres de todas las variables de las que dispone (y de sus contenidos también):

$variablesDisponibles = get_defined_vars();

Chau!

debug, Drupal 6, PHP, PHPTemplate, Programación
CSS & maquetación

Hacer bocadillos para comentarios con CSS puro

Aug 24th

Posted by Capy in CSS y Maquetación

No comments

Como me quedaron lindos se los comparto para que los usen si les hace falta.

Bocadillos con CSS

CSS:


.comentario {
	background-color: #336699;
	width: 600px;
	padding: 20px;
	float:left;
	color:#fff;
}

.contenedor{
	float:left;
}

.comentario.der {
	float:left;
}

.comentario.izq {
	float:right;
}

.comentario.top {
	float:none;
}

.comentario.bot {
	float:none;
}

.bocado-izq {
	border-bottom:20px solid transparent;
	border-right:25px solid #336699;
	border-top:20px solid transparent;
	height:0;
	width:0;
	float:left;
}

.bocado-der {
	border-bottom:20px solid transparent;
	border-left:25px solid #336699;
	border-top:20px solid transparent;
	height:0;
	width:0;
	float:right;
}

.bocado-top {
	border-bottom:25px solid #336699;
	border-left:20px solid transparent;
	border-right:20px solid transparent;
	height:0;
	width:0;
}

.bocado-top_mid {
	border-bottom:25px solid #336699;
	border-left:20px solid transparent;
	border-right:20px solid transparent;
	height:0;
	width:0;
	margin: 0 auto;
}

.bocado-bot {
	border-left:20px solid transparent;
	border-top:25px solid #336699;
	border-right:20px solid transparent;
	height:0;
	width:0;
	float:right;
}
.bocado-bot_mid {
	border-left:20px solid transparent;
	border-top:25px solid #336699;
	border-right:20px solid transparent;
	height:0;
	width:0;
	margin:0 auto;
}

.clear{
	clear:both;
}

HTML:

<div>
 <div>Lorem ipsum dolor sit amet,
 nulla viverra diam faucibus dictum. Nulla facilisi. Donec sit amet dolor
 at sapien accumsan consectetuer.Lorem ipsum dolor sit amet,
 nulla viverra diam faucibus dictum. Nulla facilisi. Donec sit amet dolor
 at sapien accumsan consectetuer.</div>
 <div></div>
</div>

<div></div>
<br />

<div>
 <div>Lorem ipsum dolor sit amet,
 nulla viverra diam faucibus dictum. Nulla facilisi. Donec sit amet dolor
 at sapien accumsan consectetuer.Lorem ipsum dolor sit amet,
 nulla viverra diam faucibus dictum. Nulla facilisi. Donec sit amet dolor
 at sapien accumsan consectetuer.</div>
 <div></div>
</div>

<div></div>
<br />

<div>
 <div></div>
 <div>Lorem ipsum dolor sit amet,
 nulla viverra diam faucibus dictum. Nulla facilisi. Donec sit amet dolor
 at sapien accumsan consectetuer.Lorem ipsum dolor sit amet,
 nulla viverra diam faucibus dictum. Nulla facilisi. Donec sit amet dolor
 at sapien accumsan consectetuer.</div>
</div>

<div></div>
<br />

<div>
 <div></div>
 <div>Lorem ipsum dolor sit amet,
 nulla viverra diam faucibus dictum. Nulla facilisi. Donec sit amet dolor
 at sapien accumsan consectetuer.Lorem ipsum dolor sit amet,
 nulla viverra diam faucibus dictum. Nulla facilisi. Donec sit amet dolor
 at sapien accumsan consectetuer.</div>
</div>

<div></div>
<br />

<div>
 <div>Lorem ipsum dolor sit amet,
 nulla viverra diam faucibus dictum. Nulla facilisi. Donec sit amet dolor
 at sapien accumsan consectetuer.Lorem ipsum dolor sit amet,
 nulla viverra diam faucibus dictum. Nulla facilisi. Donec sit amet dolor
 at sapien accumsan consectetuer.</div>
 <div></div>
</div>

<div></div>
<br />

<div>
 <div>Lorem ipsum dolor sit amet,
 nulla viverra diam faucibus dictum. Nulla facilisi. Donec sit amet dolor
 at sapien accumsan consectetuer.Lorem ipsum dolor sit amet,
 nulla viverra diam faucibus dictum. Nulla facilisi. Donec sit amet dolor
 at sapien accumsan consectetuer.</div>
 <div></div>
</div>
CSS
Drupal!

Crear múltiples instancias de un mismo formulario en Drupal 6

Aug 8th

Posted by Capy in Drupal 6

No comments

El problema mas común a la hora de querer hacer que un formulario se repita mas de una vez en una misma pagina, es que cada uno de los formularios que se vayan creando van a ser solamente una fiel copia del anterior. Dicho de otra forma, estamos usando un solo formulario pero copiandolo en varios lados de la pagina.

Tuve este problema hace ya mas de un año pero no me olvido lo JODIDA-MENTE DIFÍCIL que me fue encontrar una solución, hasta que me di con esta pagina. Cuestión, que me salvó la vida (exagerado yo?). Por supuesto que les recomiendo que lean el articulo original, pero mas les recomiendo que lean mi interpretación de los hechos que esta mas buena :) .

Para este ejemplo primero vamos a crear una url donde poder poner nuestras múltiples instancias:

/**
 * Implementacion del hook_menu()

 * Solo esta implementada una URL para poder hacer este ejemplo.
 */
function form_multi_instancias_menu(){
	$items['form-multiples-instancias'] = array(
			'title' => t('Formulario multi instanciado'),
			'page callback' => 'form_multiples_instancias',
			'type' => MENU_NORMAL_ITEM,
        	'access callback' => TRUE,
	);
	return $items;
}

Y la respectiva función:

/**
 * En este callback de la url queremos crear varias instancias
 * del mismo formulario.
 */
function form_multiples_instancias() {
	$salida = 'Si le hechas una mirada al codigo fuente vas a poder ver que el "form_id" de cada formulario es distinto, asi como el "form_build_id".

';

	//en este ejemplo simplemente usamos un contador para crear los
	//formularios, pero podriamos estar procesando nodos tranquilamente.
	for($i = 0; $i < 5; $i ++) {
		/*
		* Noten que estoy armando dinamicamente el
		* drupal_get_form(). Lo siguiente equivaldria a hacer:
		* $salida .= drupal_get_form ( "form_ejemplo_0" , 0);
		* $salida .= drupal_get_form ( "form_ejemplo_1" , 1);
		* $salida .= drupal_get_form ( "form_ejemplo_2" , 2);
		* etc...
		*/
		$salida .= drupal_get_form ( "form_ejemplo_" . $i , $i);
	}

	return $salida;
}

Si van leyendo los comentarios del código se va a ir entendiendo. Definamos el formulario que queremos instanciar:


//Este es un FAPI comun de toda la vida
function form_ejemplo( $form_state, $i ){
	$form['un_campo_de_texto'] = array(
	    '#type' => 'textfield',
	    '#title' => t('Un campo de texto de ejemplo'),
		'#default_value' => $i,
	);
	$form['submit'] = array(
	    '#type' => 'submit',
		'#value' => "enviame",
	);

	$form['#validate'] = array("form_ejemplo_validate");
	$form['#submit'] = array("form_ejemplo_submit");
	return $form;
}

function form_ejemplo_validate( $form_state, $form ){
	drupal_set_message("He validado.");
}

function form_ejemplo_submit( $form_state, $form ){
	drupal_set_message (
		t ( 'Y el formulario enviado fue el Nº @form_number.',
		array (
			'@form_number' => $form_state ["un_campo_de_texto"] ["#value"] )
		)
	);
}
//Este es el fin del FAPI comun de toda la vida

Bueno bueno bueno… hasta acá, si ejecutas el script lo que pasaría es que te saldrían tantos warning como formularios se invoquen. Y eso es debido a que no tenemos ningún formulario definido que se llame form_ejemplo_0, ni form_ejemplo_1, etc.

¿Soluciones?: Crear de la función form_ejemplo_0() para delante jajaja. No enserio, la solución es implementar el hook_forms(), que básicamente va a entender que se esta invocando un formulario inexistente y va a redireccionarlo a la definición ÚNICA que tenemos: form_ejemplo().

/**
 * Acá es donde se va a hacer la magia:
 * Resulta que por cada formulario que se invoca, el
 * hook_forms() es capaz de actuar como si de un hook_form_alter()
 * se tratara pero lo hace antes que se termine de armar
 * el array FAPI mas basico que crea Drupal.
 * O sea que intercede antes de que se le genere a cada
 * formulario sus #form_build_id, lo que nos permite
 * sobreescribir ciertos aspectos como ser la funcion
 * que alimentará el futuro formulario.
 */
function form_multi_instancias_forms($form_id, $args) {
	$forms = array();
	//para no cambiarle el callback a todos los formularios
	//que se creen hacemos un pequeño if. caso contrario
	//tendriamos un problema GORDO.
	if (strpos($form_id, 'form_ejemplo_') === 0) {
		//hemos dado con una de las variantes del formulario que
		//estamos instanciando, solamente tenemos que apuntar
		//su callback al formulario que hemos definido.
		$forms[$form_id] = array('callback' => 'form_ejemplo');
	}

	return $forms;
}

Bueno. ya está. este código así, funciona. Les dejo un mini-modulo con lo anterior para que lo vean funcionar. Instalenlo y miren en la URL “/form-multiples-instancias”

DESCARGAR

Drupal 6, FAPI, Formularios multiples, hook_forms()
Drupal!

Drupal 6: Módulos y templates con acentos, “¿” y “ñ” mal codificados [solución]

Aug 8th

Posted by Capy in Drupal 6

No comments

Un problema con el que me suelo dar de tanto en tanto son las codificaciones de caracteres. En especial la de acentos, la ñ y el signo de pregunta de apertura (¿).

El problema mas común que me encontré en mis primeros tiempos como desarrollador de módulos de Drupal fue que de tanto en tanto abría un modulo, y este tenia los caracteres especiales hechos pedazos, mal codificados.

Probé con todo tipo de yerbas raras. Desde usar funciones de todo tipo de encoding de PHP hasta cambiar la collation de la DB…

Pero la solución estaba tan al alcance de la mano que me llegue a sentir un autentico boludo cuando me cayeron las fichas: ¡La codificación de los archivos!. Si señor/a, no me había fijado en la codificación de los archivos (*.module, *.php, *.install, *.inc, etc).

Lo único que hay que hacer para que todo funcione como la seda son unas pocas cosas:

Que el archivo esté codificado en UTF-8. Podés saber que codificación tiene abriéndolo con Notepad++ y yendo al menú “Formato” como se ve en la imagen:

Y si ven que no está seteado en “UTF-8 sin BOM” o “UTF-8”, pueden convertirlo a cualquiera de estos formatos en el mismo menú:
(Para nosotros usar “UTF-8 sin BOM” o “UTF-8” nos es indistinto :) )

En el caso de los IDE deben saber que Netbeans y Zend Studio de serie vienen configurados para crear y tratar a los archivos bajo UTF-8, mientras que Eclipse NO.

Entonces, si usas Eclipse solo tenes que tocar un detalle en la configuración general para despreocuparte de este asunto:
Vayan al menú “Window -> preferences” y en el menú de preferencias deben ir a “General -> Workspace”. Cambien la codificación que haya puesta por la de UTF-8 como se ve en la imagen.


Otra cosa mas. Si trabajan con GIT sepan que tampoco codifica los archivos en UTF-8, y se soluciona yendo a sus opciones y cambiándolo.

Con lo anterior podes olvidarte de tener problemas de codificación De hecho podes dejar de usar entidades HTML y demases, y solo con usar t(“áéíóúñ”) que no vas a tener mas problemas.

Lo ultimo que quiero comentar es que si trabajan con mas gente sobre estos módulos, asegurate que todos tengan bien configurado su IDE o editor para evitar que los codifique mal (con solo abrir un archivo UTF-8 con un editor que no esté en ese formato es muy posible que al editarle una letra y guardarlo lo haga pedazos!).

Codificación de caracteres, Drupal 6, IDE y editores, PHP, Programación
Drupal!

Drupal 6: Mostrar los errores de PHP en lugar de la pantalla blanca (o blank page)

Aug 3rd

Posted by Capy in Drupal 6

No comments

Suele hacer falta poder ver los errores de PHP en Drupal de vez en cuando.

Abrí el archivo index.php de Drupal y poné lo siguiente justo por encima de “require_once ‘./includes/bootstrap.inc’;“:

//Reportar errores PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
//Fin reportar errores PHP
debug, Drupal 6, PHP
Drupal!

Deshabilitar Pathauto en determinados content types

Jul 22nd

Posted by Capy in Drupal 6

No comments

Resumiendo la situación:
Tengo un par de content types que en realidad no son accesibles públicamente y no me interesa que se creen alias para ellos.
Puede que por mera intuición mucha gente haya solucionado este problema, pero como acostumbro matar moscas con bazucas no se me ocurrió antes…

Es simple:
andá a la administración de Pathauto:

www.ejemplo.com/admin/build/path/pathauto

Desplega “Opciones de rutas de nodos”
Borra el patrón predefinido global (el primer campo de la lista)
pone alias a los content type que te interese y el resto dejaos en blanco.

Listo!

Deshabilitar Pathauto en determinados content types

Resumiendo la situación:

Tengo un par de content types que en realidad no son accesibles públicamente y no me interesa que se creen alias para ellos.

Puede que por mera intuición mucha gente haya solucionado este problema, pero como acostumbro matar moscas con bazucas no se me ocurrió antes…

Es simple:

andá a la administración de Pathauto:

www.ejemplo.com/admin/build/path/pathauto

Desplega “Opciones de rutas de nodos”

Borra el patrón predefinido global (el primer campo de la lista)

pone alias a los content type que te interese y el resto dejaos en blanco.

Listo!

Drupal 6
1263055237_start-here-ubuntuoriginal

Recuperar la interface eth0

Jul 15th

Posted by Capy in Tip

No comments

Si por algun extraño motivo te desayunas el que eth0 haya desaparecido como me pasó a mi. La solución es esta:
sudo gedit /etc/network/interfaces
Agrégale las siguientes lineas asegurandote de dejar un salto de linea de por medio:
auto eth0
iface eth0 inet dhcp
Guardá. cerrá, y tirá el comando:
sudo /etc/init.d/networking restart
Linux, Ubuntu
BD

Tip: Restaurar un dump creado por mysql rapidamente

Jul 7th

Posted by Capy in Tip

No comments

mysql -uUSUARIO -pCLAVE capy_db < /home/capy/Descargas/dump.sql

-uUSUARIO: nombre del usuario mysql con privilegios sobre la BD
-pCLAVE: clave del usuario
<: indicamos que vamos a lanzar el siguiente SQL sobre la BD
/home/capy/Descargas/dump.sql: Ruta hasta donde tenemos guardado el dump.

Mysql
1263055237_start-here-ubuntuoriginal

Cambié los permisos de un directorio y Git me muestra “old mode 100644 new mode 100755″

Jul 5th

Posted by Capy in Programación

No comments

Me pasó que me cloné de un repo y como no tenía los permisos adecuados fui con sudo y le metí un 777 a todo el repositorio. Que boludo que fui. Por no leer un poco antes de hacer esa perrada, me di con que a la hora de comitear todos los archivos presentaban cambios, puntualmente todos decían:

old mode 100644
new mode 100755

Solucionando el problema:
primero reviertan la situación cambiándole nuevamente los permisos a todos los archivos con:

sudo chmod 644 -R ./mi-proyecto/

En el paso anterior estoy asumiendo que los permisos originales eran 644 para todos lo archivos del proyecto.

Lo segundo es hacer las cosas bien. Para ello basta con cambiar el owner y grupo al directorio:

sudo chown nobody:nogroup mi-proyecto

y listo. Ahora cualquier usuario tiene privilegios sobre este proyecto por lo que no hace falta cambiarle permisos :)

Linux, Programación
12345»...Last »
    • Popular posts
    • Categories
    • debug (3)
    • Programas (4)
    • CSS y Maquetación (6)
    • jQuery (7)
    • Tip (12)
    • Mix de cosas (17)
    • PHP (23)
    • Programación (27)
    • Drupal 6 (28)
    • Invocar un block programaticamente en Drupal 6 (6)
    • Extender taxonomías en Drupal 6 (5)
    • Crear enlaces de menú en Drupal 6 con programación. (4)
    • Instalar XDebug en Windows 7 y XAMPP (4)
    • Aplicar un theme, plantilla o template a formularios en Drupal 6 (4)
    • Reemplazar la ñ, acentos y espacios en PHP (3)
    • Internet Explorer cachea las peticiones Ajax en jQuery (3)
    • ¿Vacaciones?. No, gracias! (3)
    • Notas rápidas de strpos() (PHP) (3)
    • No funciona jQuery change() en Internet Explorer (2)
  • Tags

    Apache Solr bug Codificación de caracteres CSS debug Drupal 6 Eclipse FAPI Formularios multiples GD2 hook_forms() IDE y editores IE te odio JavaScript jQuery JSON Linux Maquetación Mix de cosas Mysql Pensálo Performance PHP PHPTemplate Programación Programas Python QT4 snippet Trabajo Ubuntu Xampp Xdebug
Mystique theme by digitalnature | Powered by WordPress
RSS Feeds XHTML 1.1 Top