Frog es un CMS bastante sencillo pero potente en sus funciones, con una elegante interfaz usando prototype.js, un sistema de plantillas que nos permiten cambiar fácilmente su apariencia y un panel administrador en el cual podremos manejar a gusto las funciones de nuestro sitio.
The Pastry es una excelente forma de compartir código por Internet, basta pegar las líneas, escoger el lenguaje deseado (ActionScript, HTML, C++, PHP, Python, CSS, etc) y obtendremos el enlace generado con el código perfectamente ordenado, coloreado y listo para compartirlo.

Entre las cualidades de The Pastry podemos resaltar que usa tu Cuenta de Google para poder almacenar tus código anteriores, así tener un historial. Otra de sus funciones a resaltar es la que cualquier persona pueda editar nuestro código con lo cual se creara una nueva revisión del código donde podemos comparar los cambios hechos linea por linea.
Categorizado: Desarrollo Web Etiquetado: ActionScript |
Codigo |
CSS |
HTML |
PHP |
Recursos Web Primero precisamos lo que significa Patrón Singleton.
El Patrón Singleton, garantiza que una clase posea una sola instancia, y suministra un punto de acceso global a ella.

Un caso hipotético de aplicación podría ser: tenemos una clase BaseDeDatos que nos devuelve un objeto llamado “bd” una vez creada la conexión con la base de datos. En vez de permitir que las aplicaciones usen libremente la clase y puedan crear tantas instancias del objeto “Base de Datos” como aplicaciones y accesos a bases existan, se decide restringir la creación a una sola instancia y esta será compartida y usada por todos.
<?php
interface ISingleton
{
/**
* Método que va a devolver la instancia Singleton
* @return (Singleton)
*/
public static function getInstance();
}
?>
Un ejemplo claro.
Una Clase (Singleton) Config. “Config” para los amigos, que no es otra que la encargada de mantener la configuración del acceso a la base de datos y algunas otras cosas, como límites, nombres, etc.
Su uso es muy simple, se agrega el atributo, se lo inicializa, y listo.
<?php
class Config implements ISingleton{
// Definimos el atributo que guarda la instancia del Singleton
private static $config = null;
/**
* Retorna la clase Singleton si existe en memoria
* Si no existe, crea una nueva
* @return (Singleton)
*/
public static function getInstance()
{
if ( self::$config == null ):
self::$config = new Config();
endif;
return self::$config;
}
// Prevenir a los usuarios de poder clonar la instancia
public function __clone() {}
}
?>
Para usar una de las configuraciones, podemos simplemente:
<?php
$config = config::getInstance();
$config->db['host'] = 'localhost';
$config->db['user'] = 'root';
$config->db['pwd'] = '';
$config->db['name'] = 'motor';
$config->db['type'] = 'mysql';
?>
Fácil de conservar, de actualizar y acceder.
Referencias
Categorizado: Desarrollo Web Etiquetado: Interfaces |
Patrones |
PHP |
Singleton TimThumb es un script open-source, creado por Tim McDaniels, es de gran utilidad cuando se quiere redimensionar el tamaño de la imágenes.
Ben añadió soporte de GIF y PNG, además de mejorar la velocidad y el almacenamiento en caché.
Uso
Basta con copiar el código fuente en un nuevo documento llamado “timthumb.php“, colóquelo en una carpeta en su sitio (ej: /scripts/) y llamar a la imagen como esta:
<img src="/scripts/timthumb.php?src=/images/whatever.jpg&h=150&w=150&zc=1" alt="">
Requerimientos
- TimThumb requiere la GD Library, que está disponible en cualquier web server con PHP 4.3+ instalado.
- Una vez que está instalado, TimThumb crea automáticamente un subfolder llamado /cache/. Verificar que tenga los permisos de escritura necesarios (777).
- Además, cerciórese de que la carpeta Script que contiene TimThumb también tenga los permisos (777).
Parametros de TimThumb
- w: ancho
- h: alto
- zc: zoom corte (0 or 1)
- q: calidad de la imagen (por defecto es 75 y máximo es 100)
Suele ser muy útil, cuando se requiere uniformidad de las imágenes en el diseño.
Demo
Descarga
Categorizado: Diseño |
Diseño Grafico |
Diseño Web Etiquetado: GD |
Imagenes |
PHP Seguramente, conoces OsCommerce, Zend Cart, Cubecart los cuales usamos para montar nuestros carritos de compra. Sin embargo, es muy probable que pienses que o bien se han quedado desfasadas y desactualizadas a lo que hoy día se espera, o bien no es nada sencillo de instalarlas y administrar. Para los que requieren un poco mas de funcionalidad en su web y son atrevidos en nuevas tecnologías les presento 2 Sistemas de carritos de compra muy bueno y al fiel estilo Web 2.0 .
Prestashop y Magento son nuevas herramientas para generar y administrar tiendas on-line de manera sencilla.
Prestashop
Esta nueva herramienta, está desarrollada exclusivamente con php5, y es muy liviana y rápida (las plantillas smarty tienen mucho que ver en esto). Los requisitos necesarios para hacerla funcionar son:
- Servidor Linux, Unix, o Windows
- Apache Web server
- PHP 5.0 o superior
- MySQL 5.0 o superior
Las características más importantes de la versión estable 1.0 (1.0.0.8) son:
Modo Cliente:
- Ofertas especiales (descuentos de precios y cupones de descuento)
- Destacado de productos
- Ranking de vendedores
- Listado de Nuevos productos
- Ofertas de “Envío Gratuito”
- Zoom de las imágenes de los productos
- Permitir/Denegar pedidos con productos sin stock
- Suscripción/Borrado de cliente a boletines de noticias
- Métodos ilimitados de pagos
- Pago por transferencia
- Pago contra rembolsó
- Pre configurado para ventas con PayPal
- Formulario de Contacto para múltiples direcciones
- Mas+
Modo Administrador:
- Categorías y Subcategorías ilimitadas
- Editor WYSIWYG por defecto
- Combinación de atributos ilimitada
- Características de productos ilimitada
- Imágenes con optimización y reescalado automático ilimitadas
- Sin límite de monedas
- Sin límite de impuestos
- Empresas de Transportes ilimitadas
- Inventariado
- Alertas SMS
- Añadido/Borrado de módulos
- Código de Barras
- Ayudas contextuales
- Notificación por emails del estado del pedido
- Sin límite de idiomas
- Mas+
Descarga PrestaShop
Demo PrestaShop
Magento
Esta herramienta, tambien está desarrollada exclusivamente con php5, altamente flexible, escalable y fácil de integrar con otras aplicaciones, tiene optimización SEO, soporte de AJAX, soporte para múltiples monedas, idiomas. Los requisitos necesarios para hacerla funcionar son:
* Servidor Linux, Unix, o Windows
* Apache Web server
* PHP 5.0.2 o superior
* MySQL 4.1.20 o superior
Las características más importantes de la versión estable 1.2 son:
Modo Cliente:
- Soporte para pago con tarjeta de crédito: Authorize.net y PayPal Payflow Pro.
- Soporte para métodos de envío. Integración en tiempo real con: UPS, FedEx, y USPS.
- Capacidad de envío de notificaciones por email
- Listado de Nuevos productos
- Buscador básico y avanzado
- Facilidad para comparar productos.
- Review de productos.
- Sitemap por categorías
- Descarga de Productos
- Subcripcion a Newsletter
- Filtrado de Productos por Tags
- Términos populares de búsquedas
- RSS feed
- Mas+
Modo Administrador:
- Soporte para asignar tags a los productos y generación de un tagcloud o nube de tags.
- Manejo de Newsletter y personalización de templates
- Search Engine Optimization (SEO)
- Creación de Encuestas
- Sistema de permisos para administrar la tienda
- Búsquedas avanzadas
- Actualización en un Clic
- Sistema de control de contenido para paginas informativas
- Sin límite de idiomas
- Optimización SEO defecto
- URL amigables
- Temas para la tienda
- Mas+
Descarga Magento
Demo Magento
En lo personal, las 2 vienen siendo buenas alternativas aunque magento parece más sólido y con más opciones de pagos. Bueno para gustos los colores.
Categorizado: Desarrollo Web Etiquetado: Ajax |
Carrito de Compra |
Ecommerce |
PHP Desde PHP Senior leo las razones sobre la cual el uso de Short Tags como <?= debería ser <?php echo, lo mismo que <? por <?php , tanto en el Manual PHP y la wiki de Zend Framework recomiendan no usarlos.
Smashing Magazine presenta 50 herramientas de php muy útiles que pueden mejorar significativamente su flujo de trabajo de programación. Entre otras cosas, encontramos un gran número de bibliotecas y clases sobre depuración, optimización, manejo de imágenes, seguridad, control de versiones entre otros recursos muy utiles.
En RoScripts han recopilado un par de Expresiones Regulares muy útiles para PHP con lo cual nos ayudara a validar casi cualquier campo desea Fechas, Email, CVS, URL entre otros.
Uno de las mejores alternativas para que tus proyectos en php se muestren más rápido es la de implementar un sistema de cache, con lo que ganamos velocidad y él un consumo reducido de nuestro servidor.
Hoy veremos un Sistema de Cache Simple en PHP, pero lo suficientemente flexible como para poder adaptarla a cualquier proyectos y personalizarla conforme a nuestras necesidades.
La Clase de Cache en PHP
/* file : cache.class.php
* Clase : m2Cache
* Original: http://www.calinsoft.com/2009/01/sistema-de-cache-simple-en-php.html
*/
//Algunos parámetros de configuración
define('ABSPATH', dirname(__FILE__) );
//Directorio donde almacenaremos los archivos cacheados
define('CACHE_DIR',
ABSPATH . '/cache'); // tiene que tener permisos 777
//El tiempo que la copia se mantendrá vigente.
define('CACHE_TIME', 3600 ); // 3600 segundos 1 hora.
// La dirección de la Pagina Donde nos encontramos
define('PAGE',
'http://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']
);
// La dirección de la pagina con el nombre encriptado
define('CACHE_LINK',
CACHE_DIR . "/" . md5( PAGE ) . ".html"
);
class m2Cache
{
//Variable para activar el Sistema de Cache
var $enableCache;
//Variable para almacenar el tiempo de la creación del archivo
var $time;
function m2Cache(){
//por defecto el sistema de cache estará desactivado
$this->enableCache = false;
//el tiempo por defecto empieza en 0
$this->time = 0;
}
//Función para activar el Sistema de cache.
function enable(){
$this->enableCache = true;
}
// Retorna el estado Actual del Sistema.
function status(){
return $this->enableCache;
}
// Función Inicio del Cache.
function startCache()
{
// verificamos estado
if ($this->status()):
//verificamos que existe la pagina en cache
if ( @file_exists( CACHE_LINK ) ):
// si existe obtenemos la hora de creación del archivo.
$this->time = @filemtime( CACHE_LINK );
// verificamos si está adentro del tiempo permitido.
if ( ( time() - CACHE_TIME ) < $this->time ):
// si está adentro del tiempo
// mostramos la pagina cacheada.
@readfile( CACHE_LINK );
die();
else:
//Si Expiro se elimina, para prevenir conflictos.
@unlink( CACHE_LINK );
endif;
endif;
//Habilitamos el uso de búferes de salida
ob_start();
else:
// no está el activado sistema de cache
return false;
endif;
}
//función de término del sistema de cache
function endCache()
{
//verificamos estado del sistema de cache
if ($this->status()):
//Creamos el archivo
$fp = fopen( CACHE_LINK , 'w' );
// escribimos adentro de el.
@fwrite( $fp , ob_get_contents() );
//cerramos
@fclose( $fp );
//Volcamos el búfer de salida y deshabilitamos el uso del búfer
ob_end_flush();
else:
// no está el activado sistema de cache
return false;
endif;
}
}
Método de Uso
/* file: index.php
Para usarlo solo incluimos la clase dentro de la pagina que deseemos cachear.
*/
include 'cache.class.php';
// Instanciamos
$cache = new m2Cache();
// Activamos el cache
$cache->enable();
//al comienzo de la pagina añadimos esto
$cache->startCache();
/*
acá vendría la pagina en si comenzando supuestamente por
<html>
<head>
<body>
.......................
.......................
.......................
Y luego
</body>
</html>
*/
//al final añadimos
$cache->endCache();
Conclusión y Descarga de archivos
Con el parámetro CACHE_DIR indicamos el directorio donde almacenaremos la cache , con CACHE_TIME indicamos el tiempo de vida de la cache (en este caso 60 minutos/1 hora) y la función $cache->enable(); de la clase la cual nos permite activar el sistema de cache por defecto esta desactivado (muy bueno cuando uno va hacer cambios en la pagina).
He realizado una mini página sencilla adaptándola al sistema de cache para que observen su funcionamiento correcto, en la cual la estructura de archivos es la siguiente.

Si tienen alguna duda sobre la clase pregunten, cabe resaltar como dije al principio que esta clase es muy simple pero flexible.
Descarga
Categorizado: Desarrollo Web |
Web2Dev Etiquetado: cache |
PHP Hace un par de meses atrás hablamos sobre como detectar navegadores web mediante php, donde hacíamos uso de la variable súper global $_SERVER['HTTP_USER_AGENT'] para poder extraer el nombre clave del navegador.
Basados en ese mismo script podemos complementar para poder detectar si no visitan desde el iPhone
// Simple browser detection
$is_lynx = $is_gecko = $is_winIE = $is_macIE = $is_opera = $is_NS4 = $is_safari = $is_chrome = $is_iPhone =false;
if (strpos($_SERVER['HTTP_USER_AGENT'], 'Lynx') !== false) {
$is_lynx = true;
}elseif ( strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone') !== false ) {
$is_iPhone = true;
} elseif ( strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'chrome') !== false ) {
$is_chrome = true;
} elseif ( strpos(strtolower($_SERVER['HTTP_USER_AGENT']), 'webkit') !== false ) {
$is_safari = true;
} elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Gecko') !== false) {
$is_gecko = true;
} elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false && strpos($_SERVER['HTTP_USER_AGENT'], 'Win') !== false) {
$is_winIE = true;
} elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false && strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') !== false) {
$is_macIE = true;
} elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') !== false) {
$is_opera = true;
} elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Nav') !== false && strpos($_SERVER['HTTP_USER_AGENT'], 'Mozilla/4.') !== false) {
$is_NS4 = true;
}
$is_IE = ( $is_macIE || $is_winIE );
Y con solo un If simple determinaríamos si el usuario que nos visita lo hace por un iPhone
if ($is_iPhone):
// Nos visitas por medio del iPhone
endif;
if ($is_iE):
// Nos visitas por medio de IExplore
endif;
Y para los que solo deseen la validación del iPhone separo el código correspondiente.
$is_iPhone = false;
if (strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone') !== false ):
$is_iPhone = true;
endif;
Categorizado: Desarrollo Web Etiquetado: iPhone |
Navegadores |
PHP