Free Website Hosting Anuncios

Cargar un controlador desde un controlador en Codeigniter ¿Cómo hacerlo?

Utilizando CodeIgniter, muchas veces, nos vemos en la necesidad de querer utilizar un controlador maestro y a partir de él derivar tareas a otros controladores que realizan tareas según (por ejemplo) una opción de menú elegida.

Parecería que necesitamos cargar desde un controlador otros controladores, sin embargo este concepto es imposible en la arquitectura MVC que propone este framework. Lo que si podemos hacer es indicar, modelo, vista y tarea a ejecutar, y el modelo es quien realiza las operaciones. No podemos cargar helpers o libraries desde modelos, pero si las podemos cargar en el controlador maestro o de entrada y luego utilizarlas en el modelo porque ya fueron cargadas. Ejemplo:

Controlador de entrada:

class Ejemplo extends Controller {
 
 
	function Ejemplo(){
 
		parent::Controller();
 
 
	}
 
	function index($param=null){
 
		##obteniendo librerias necesarias 
		$this->load->helper('form');
		$this->load->helper('tools');
		$this->load->library('session');
 
		if(!is_null($param)){
 
                                ## desempaqueto parametros (pueden venir serializados)
				$param = _unpackParametros($param);
 
				##cargo el modelo de la opcion
				$this->load->model($param['model']);
 
				##cargo los datos para la vista, llamando al modelo
				$this->datos = array_merge($this->{$param['model']}->{$param['task']}(), $this->datos);
 
				##seteo la vista a mostrar
				$view = $param['view'];
 
 
			}
 
 
 
			##esta es la vista que puede variar segun la opcion elegida
			$this->load->view($view, $this->datos);
 
 
		}
	}

¿Que ganamos con esto?
Código cerrado ante cambios. Si se agrega una nueva funcionalidad, en el futuro, no queremos tocar el controlador ejemplo, sino que creamos un modelo y una vista que brinde esta nueva funcionalidad y simplemente la subimos.

La variable $param puede ser un valor obtenido por url o bien obtenido de la base de datos.

si te gustó el post, comprame una cerveza!

Categorías: General | Sin Comentarios

Cambiar set default toolbar de CKEditor | change toolbar sets defaults CKEditor

CKEditor es un increíble editor wysiwyg , de altisima integración en páginas web, en este post simplemente voy a comentar como cambiar la apariencia por defecto, y setear su toolbar que trae por defecto, a mi gusto demasiadas herramientas:

1- Editar ckeditor/config.js con un editor de textos cualquiera.
2- Reemplazar su contenido por este:

?Ver código JAVASCRIPT
CKEDITOR.editorConfig = function( config )
    {
       // Define changes to default configuration here. For example:
       // config.language = 'fr';
       // config.skin = 'office2003';
       //config.removePlugins =  'elementspath,enterkey,entities,forms,pastefromword,htmldataprocessor,specialchar' ;
       config.removePlugins =  'elementspath,enterkey,entities,forms,pastefromword,htmldataprocessor,specialchar,horizontalrule,wsc' ;
       config.skin = 'v2';
       //config.toolbar = 'Basic';
       CKEDITOR.config.toolbar = [
       ['Styles','Format','Font','FontSize'],
       '/',
       ['Bold','Italic','Underline','StrikeThrough','-','Undo','Redo','-','Cut','Copy','Paste','Find','Replace','-','Outdent','Indent','-','Print'],
       '/',
       ['NumberedList','BulletedList','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
       ['Image','Table','-','Link','Flash','Smiley','TextColor','BGColor','Source']
    ] ;
    };

3- Lo guardas y listo.

3.1 – Solo para los que no se conforman con copiar y pegar de un blog, si observas bien, he seteado esto: config.skin = ‘v2′; si lo comentas o eliminas volves a la vista anterior de CKEditor.
Por otro lado, si agregas o quitas elementos de la barra toolbar modificas a tu gusto la barra, simplemente borras ‘flash’ o ‘link’ porque eso no los quieres mostrar al usuario final.

Espero que les sirva tanto como a mi.

Ahhh, si alguien quiere descargar el CKEditor puede hacerlo en este enlace: http://cksource.com/

si te gustó el post, comprame una cerveza!

Categorías: Frames php, General, HTML, Javascript, Nuevas Tecnologias, Productos open source, Web 2.0, configuraciones | Sin Comentarios

Generar una password alfanumérica con php

Podemos generar una password alfanumérica muy facilmente con php utilizando esta pequeña funcion, donde colocamos la longitud de la contraseña y si queremos o no codificada en md5 la respuesta:

function makePass($long=null, $hash=FALSE){
$letras = 'x12m3b4r5a6H7b8c9dZ'; // letras y numeros que usaremos 
srand((double)microtime()*1000000);
$i = 1;
$largo_clave = ($long)?$long:6; // tamaño maximo de clave generada (por defecto 6)
$largo = strlen($letras);
$clave_usuario='';
while ($i <= $largo_clave)
  { $lee = rand( 1,$largo);
     $clave_usuario .= substr($letras, $lee, 1); 
    $i++;                 
  }
$clave_usuario = trim($clave_usuario);
if($hash) return md5($clave_usuario); else return $clave_usuario;
}

si te gustó el post, comprame una cerveza!

Categorías: General | Sin Comentarios

Instanciar un objeto de modelo en Codeigniter

Bueno, Codeigniter es un gran framework, lo utilizo mucho y cada vez me gusta más, pero me topé con la necesidad de instanciar un objeto del modelo en un controlador para pasarselo a la vista o trabajar con él.
Di unas vueltas hasta que lo hice asi:
En el modelo, en mi caso el modelo bk_usuario:

class Bk_usuario extends Model {
 
	var $usuario = null;
 
	function Bk_usuario($id){
		//Llamando al contructor del Modelo
		parent::Model();
		$ru = $this->db->get_where('bk_usuario',array('idbk_usuario'=>$id));
		$this->usuario = $ru->row();
	}
 
	function isSuper(){
		return ($this->usuario->nivel==3);
	}
 
	function isAdmin(){
		return ($this->usuario->nivel==2);
	}
 
	function isReserva(){
		return ($this->usuario->nivel==1);
	}
 
}

Entonces desde un controlador que consume el modelo usuario:

class Inicio extends Controller {
 
	function Inicio(){
 
		parent::Controller();
 
	}
 
	function index(){
 
		##cargando models
		$this->load->model('booking/bk_usuario');
 
                ##Aqui es donde instancio el modelo usuario con un new y pasando el id de usuario (en este ejemplo harcodeado, pero debe ser un dato variable)
		$usuario 					= new $this->bk_usuario('ddicami');
 
		$datos['puede_ver'] 		= ( $usuario->isSuper() OR $usuario->isAdmin() );		
 
		$this->load->view('booking/header', $datos);
		$this->load->view('booking/index', $datos);
 
	}
 
}

Lo que logré es rellenar el atributo $usuario desde el contructor del objeto bk_usuario, instanciándolo con el id del usuario desde el controlador.

si te gustó el post, comprame una cerveza!

Categorías: Code Igniter, Frames php, General | Sin Comentarios

Especificar a un div que no corte el texto, propiedad nowrap css

Al igual que en los <TD> teniamos la propiedad nowrap=”nowrap” y esto hacia que un td no corte un texto o contenido. En css también tenemos esta propiedad simplemente debemos usar la propiedad white-space: nowrap;

Un ejemplo de esto sería :

.nowrap {
	white-space: nowrap;
}

Pruebenlo….

si te gustó el post, comprame una cerveza!

Categorías: CSS, General, HTML | Sin Comentarios

Usar la conexión a la base de datos de WordPress

Wordpress gestiona la conexion a la base de datos con una clase. Para poder utilizarla (en una funcion, por ejemplo) simplemente debemos tomarla como global, la variable es $wpdb.
Y luego tenemos varios métodos de la clase que nos sirven para hacer selects, inserts, updetes, etc, etc.

Aqui pongo un ejemplo de una funcioncita para un contador de visitas en WP:

function contadorDeVisitas(){
global $wpdb;
 
//inserto la visita
$wpdb->insert( 'wp_visitas', array( 'ip' => $_SERVER['REMOTE_ADDR'] ), array( '%s' ) );
//obtengo las visitas
$count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM wp_visitas"));
return sprintf('%05d',$count);	
}

En este ejemplo uso la tabla wp_visitas que tiene 3 columnas,
id INT, ip Varchar(100), fechayhora(Timestamp)

La idea es ver como utilizar la capa de conexion a la base de datos. Es el primer paso para construirte tus propios plugins.

Si querés el query para un filtrado por categorias ve esto:
http://wordpress.org/support/topic/post_category-not-assigned-to-posts

Aquí la documentación completa y oficial:
http://codex.wordpress.org/Function_Reference/wpdb_Class

si te gustó el post, comprame una cerveza!

Categorías: General, Mysql, configuraciones, wordPress | Sin Comentarios

Conjunto de funciones javascript para validar email, nif, cif telefono fijo y telefono movil

Aquí pongo un conjuntito de funciones javascript que sirven para validar NIF, CIF, Email, Telefono celular, telefono movil:

?Ver código JAVASCRIPT
/** libreria de funciones javascript para validaciones de forms **/
/** Diego Di Camillo - diegodicamillo@diegodicamillo.com.ar     **/
 
function EsEmail(w_email) {
 
	var test = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	var emailReg = new RegExp(test);
 
	return emailReg.test(w_email);
}
 
function EsTelefonoFijo(tel) {
				var test = /^[89]\d{8}$/;
				var telReg = new RegExp(test);
				return telReg.test(tel);
			}
function EsTelefonoMovil(tel) {
				var test = /^[6]\d{8}$/;
				var telReg = new RegExp(test);
				return telReg.test(tel);
			}
 
 
function isValidCif(abc){
	par = 0;
	non = 0;
	letras = "ABCDEFGHKLMNPQS";
	let = abc.charAt(0);
 
	if (abc.length!=9) {
		//alert('El Cif debe tener 9 dígitos');
		return false;
	}
 
	if (letras.indexOf(let.toUpperCase())==-1) {
		//alert("El comienzo del Cif no es válido");
		return false;
	}
 
	for (zz=2;zz<8;zz+=2) {
		par = par+parseInt(abc.charAt(zz));
	}
 
	for (zz=1;zz<9;zz+=2) {
		nn = 2*parseInt(abc.charAt(zz));
		if (nn > 9) nn = 1+(nn-10);
		non = non+nn;
	}
 
	parcial = par + non;
	control = (10 - ( parcial % 10));
	if (control==10) control=0;
 
	if (control!=abc.charAt(8)) {
		//alert("El Cif no es válido");
		return false;
	}
	//alert("El Cif es válido");
	return true;
}
 
 
function isValidNif(abc){
	dni=abc.substring(0,abc.length-1);
	let=abc.charAt(abc.length-1);
	if (!isNaN(let)) {
		//alert('Falta la letra');
		return false;
	}else{
		cadena = "TRWAGMYFPDXBNJZSQVHLCKET";
		posicion = dni % 23;
		letra = cadena.substring(posicion,posicion+1);
		if (letra!=let.toUpperCase()){
			//alert("Nif no válido");
			return false;
		}
	}
	//alert("Nif válido")
	return true;
}

Muy útil para tener siempre a mano cuando se quieren validar formularios web.

Ahh y como bonus, una web muy sencilla que dice la letra del nif y explica como es la validacion:
http://club.telepolis.com/jagar1/Economia/Cnif.htm

si te gustó el post, comprame una cerveza!

Categorías: General, HTML, Javascript | Sin Comentarios

Gtalk también guarda las conversaciones (a menos que le digas lo contrario)

Gtalk tambien guarda un historial de conversaciones, lo que ocurre es que para encontrarlo, tenés que revolver un poco el GMAIL.

Te explico, por defecto, GALK guarda un historial con todas tus conversaciones de tus contactos, para verlas:

1.- Debés entrar en gmail.
2.- Ubicar al contacto en la derecha, en el panel chat (si esta logeado, lo tienes a la vista, sino, ponés ver todos, y ahi te aparece la lista completa).
3.- Si pasas el mouse sobre él, se abre un cuadro de dialogo con tres opciones, una de ella es “Video y más”, si haces clic en ella dice:
“conversaciones recientes”
4.- Ahi te aparece un historial con todas las conversaciones que has tenido con ese contacto.

Opinión personal: ¿A que cerebro de Google se le ocurrió que algo tan importante como esto debe estar en “Video y más” !!!!!

si te gustó el post, comprame una cerveza!

Categorías: General, configuraciones | Sin Comentarios

IE6 la caja de pandora, lleno de sorpresas para maquetadores y diseñadores

El IE 6 es un navegador único, desde el año 2001 y hasta la actualidad en vigencia en muchas máquinas.
Si te ponés a desarrollar una web tenés que pensar en funcionalidades, diseño, efectos y en la compatibilidad con este navegador en esta version :P !!!!

En este caso no funciona la propiedad max-width ni max-height por lo que debes usar un truquito para realizar lo mismo.
En cualquier navegador haríamos esto:

 
<html>
<body>
<p style="max-width:30em;border:1px solid red;">
012345678901234567890123456789012345678901234567890123456789<br>
[alot of text goes here]
</p>
</body>
</html>

Para IE (fucking) 6 :

<html>
<style>
p {
border:1px solid red;
width:expression( 
    document.body.clientWidth > (500/12) * 
    parseInt(document.body.currentStyle.fontSize)?
        "30em":
        "auto" );
}
</style>
<body>
<p>
[alot of text]
</p>

Lo podrias tener asi declarado en el css:

 
<html>
<style>
body {
width:100%;
margin:0;
padding:0;}
 
p {
border:1px solid red;
max-width:800px; /** para cualquier navegador incluido IE7 **/
width:expression(document.body.clientWidth > 800? "800px": "auto" ); /** solo para IE6 **/
}
</style>
<body>
<p>
[alot of text]
</p>
</body>
</html>

Por otro lado también existe una forma de poner css solo para IE6 :

Supongamos que tenemos un div llamado header, si declaramos esto:

 
#header {margin-bottom:3em}
html>body #header {margin-bottom:1em}

IE no puede entender la segunda regla del CSS (el comando html>body) por lo que sólo utilizará la primera regla. El resto de los navegadores utilizarán la segunda.

si te gustó el post, comprame una cerveza!

Categorías: CSS | Sin Comentarios

Obtener últimos POSTS de un Blog Wordpress

Hola. Si tenés un blog wordpress y estás pensando en publicar en alguna pagina los últimos posts o entradas, lo que tenés que hacer es algo muy sencillo, solo debes tener cierto acceso desde la web que estés desarrollando:

1.- Acceso a la base de datos donde esté el Wordpress instalado, normalmente si el sitio esta en el mismo hosting no habrá problemas, solo compartirías usuario y contraseña entre la base del wordpress y el nuevo sitio, o bien tendrías una conexion php a la base para el nuevo sitio y otra para el wordpress.
2.- Si el nuevo sitio no esta en el mismo hosting, deberias abrir el permiso del hosting de wordpress para conectarse a la base de mysql remotamente ( :( ( — desgraciadamente esto es muy riesgoso, asi que no es recomendable ) la alternativa es trabajar con una capa XML para intercambiar datos, pero no lo describiré aquí.

Muy bien, entonces si en el sitio que estas queriendo incluir noticias de wordpress pones :

 
/** la variable $conn tiene el handler de la conexion a Mysql desde PHP, como cualquier conexion.... */
//selecciono la BD de wordpress
mysql_select_db('nombre base de datos wordpress', $conn);
//Selecciono el ultimo post, pueden ser los ultimos posts, simplemente cambia el LIMIT 1 por LIMIT n  , donde n=3  o n=4 .... 
$query_ultimo = "SELECT post_title AS titulo, post_date AS fecha, post_content AS texto, guid AS link  FROM wp_posts WHERE post_type LIKE 'post' AND post_status LIKE 'publish' ORDER BY post_date DESC LIMIT 1";
$ultimo = mysql_query($query_ultimo, $conn) or die(mysql_error());
$row_ultimo = mysql_fetch_assoc($ultimo);
$totalRows_ultimo = mysql_num_rows($ultimo);
 
// en $row_ultimo['titulo']  --> el titulo del post
// en $row_ultimo['fecha']  --> la fecha del post
// en $row_ultimo['texto']  --> la texto o contenido (puede ser HTML)  del post
// en $row_ultimo['link']  --> el link al post en el blog

Luego vos sabrás que hacer con esto ….

si te gustó el post, comprame una cerveza!

Categorías: Frames php, General, PHP, configuraciones, wordPress | Sin Comentarios

alternativa a innerHTML en IE7 IE6 “error desconocido en tiempo de ejecucion”

En ciertas ocasiones cuando usamos IE7 o IE6 (esos cachibaches que causan dolores de cabeza) al intentar inyectarle HTML a una capa o DIV ejemplo:

document.getElementById('contenedor').innerHTML = 'hola';

Obtenemos un error que indica “Error desconocido en tiempo de ejecucion” y esto se debe a que en cualquier otro explorador salvo estos dos, funciona bien el innerHTML aunque no es una sentencia estandard W3C.
La solucion a esto es usar el appendChild que en realidad “agrega” al contenido del contenedor el HTML que le digamos, funciona asi:

var newdiv = document.createElement("div"); //crea un nuevo div
var container = document.getElementById('contenedor'); //obtengo el div contenedor
var texto = document.createTextNode("Texto"); //creo un nodo con HTML que puede ser un texto
div.appendChild(texto); //agrego el texto al nuevo div
container.appendChild(newdiv); 
//agrego el contenido del nuevo div al contenedor

Esto produce que dentro de la capa “contenedor” se agregue el nuevo div con el contenido colocado en nuestro caso un texto que dice “Texto”.

Mmmm pero esto hace append del contenido y no un reemplazo, asique valiendome de la libreria mootools, la incluyo asi:

<script src="path/to/mootools-1.2.1-core-yc.js" type="text/javascript"></script>

Lo realizo asi, a mi me anduvo fantasticamente:

$("contenedor").set("html", "Texto o lo que sea HTML");

Espero que les sirva.

si te gustó el post, comprame una cerveza!

Categorías: General, Javascript, Web 2.0 | Sin Comentarios

Personalizar el backend de joomla!

Con todo esto podés personalizar todo el CMS de Joomla!:

1º Subir la imagen (tamaño 250×54) j_header_left.png a /administrator/templates/khepri/images/h_green

2º Ir a /administrator/templates/khepri/

de los siguientes archivos:
cpanel.php
index.php
login.php

buscar la etiqueta

<div id="footer">
<p class="copyright">

y colocar:

<a href="http://tuweb.com/ target="_blank"><img src="http://tuweb.com/images/logo_CMS.png alt="Dise&ntilde;o Web" /></a>

3º Ir a /administrator/language/es-ES
Buscar en el documento “es-ES.ini” la constante “JOOMLA! ADMINISTRATION LOGIN”
y modificar el texto por el deseado.

si te gustó el post, comprame una cerveza!

Categorías: General, Joomla! | Sin Comentarios

Excluir categorías en Wordpress

Si querés excluir ciertos post del home de tu página montada con wordpress tenemos a nuestra disposición ciertas funciones que provee el core de wordpress:

Abre el index.php de tu theme activo.
Localiza esta linea de codigo php:

if (have_posts()) : ....

Justo antes debes colocar el siguiente codigo ::

if ( is_home() ) {
	$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;	
	query_posts(array('category__not_in' => array(7,10,9),'orderby'=>date,'showposts'=>get_option('posts_per_page'),'paged'=>$paged));
}

Fijate que solo se ejecuta cuando estamos en el home page.

IMPORTANTE: mira que puse ‘category__not_in’ apuntando a un pequeño array de numeros (7,10,9) esas son los IDs de las categorias que se excluyen , es decir, los posts ubicados dentro de esas categorias, no se muestran en el HOME PAGE , pero si , si ingresas en la categoria.

Los IDs de categorias los averiguas desde el panel de wordpress. en la parte de categorias.

Más info visita Function Reference

si te gustó el post, comprame una cerveza!

Categorías: General, configuraciones, wordPress | 1 Comentario

Iniciar session solo una vez en Joomla! – Only Once Session!! – Joomla!

Un plugin muy bueno para controlar que tus usuarios registrados puedan iniciar session solo una vez,
es este: http://www.innato.nl/downloads/joomla15/index.php

Muy facil de usar e instalar, y efectivo!!!

que os aproveche !!

si te gustó el post, comprame una cerveza!

Categorías: Frames php, General, Joomla!, Productos open source | Sin Comentarios

Hacer que un input tenga texto en uppercase o mayusculas

Si buscás que un campo de texto HTML se escriba y en él siempre el texto esté en mayusculas la colución es muy sencilla usando las bondades del CSS y con javascript:

<input type="text" value="" style="text-transform:uppercase;" onkeyup="javascript:this.value=this.value.toUpperCase();">

Lo que obtenemos es que al tipear hola , se muestra HOLA pero cuando hagas el submit del form, el valor enviado será hola (en minusculas) para corregir esto, usamos la funcion javascript toUpperCase() asociada al evento onKeyup (al soltar la tecla presionada) que verdaderamente reemplaza el texto a mayúsculas y es enviado en mayúsculas.

si te gustó el post, comprame una cerveza!

Categorías: CSS, General, HTML | 2 Comentarios