PDT 1.0: PHP en Eclipse

eclipse.pngHace tiempo que hablamos de PDT, un conjunto de herramientas para el desarrollo de PHP, realizado por Zend para la plataforma Eclipse.

En esta ocasión ha salido por fin la versión 1.0, que añade las siguientes características:

  • Editores sensibles al contexto, que facilitan el resaltado de texto, asistente de código y code folding.
  • Integración con el proyecto modelo de Eclipse, quie permite usar las vistas de ficheros y proyectos, además añade un nuevo explorador para PHP.
  • Soporte para debug incremental del código PHP.
  • Framework y API que permiten el desarrollo de código de forma más sencilla.

PDT

Vía / International PHP Magazine

links for 2007-09-20

Magento: e-commerce open source

magento.pngMagento es una aplicación open source para poder instalar un software de e-commerce en nuestro sitio web. Así podremos tener nuestra propia tienda online de forma sencilla y gratuita.
magento2.png
Dentro de las características para los usuarios nos encontramos con optimización para motores de búsquedas (SEO), comunicación con los clientes, envío a varias direcciones, búsquedas, comparación de productos, etiquetado de productos, opiniones sobre productos, checkout, carrito de la compra y cuentas para clientes.
A parte, nos ofrece la posibilidad de genera informes, definir reglas para los impuestos, manejar productos y catálogos, CMS, grupos de clientes, importar y exportar, ACL, multiples sitios web, múltiples idiomas y muchas cosas más.
Magento
Vía / WebAppers

Elements of Design: showcase de elementos web

Elements of Design es una galería de elementos contenidos en páginas web que nos puede ayudar a diseñar partes de la página y añadirlas al diseño general. Es como CSSMania pero en vez de diseños completos, enfocado únicamente a elementos.
elementsofdesign.png
Podremos encontrar diseños de formularios para comentarios de blogs, comentarios de blogs, calendarios, código, iconos, texto entrecomillado, formularios de registro, cajas de búsqueda y tipología de cabeceras.
Elements of Design

links for 2007-09-19

Laboratorio: reordenar lista mediante mootools

Estoy empezando a curiosear Mootools, y aunque me está gustando bastante, si que echo en falta una documentación más detallada, no solo explicar como va el API, ya que a veces son necesarios ejemplos más básicos para no tener que estar buscando en el API.

En este caso voy a reorganizar mediante drag&drop una lista de elementos, la cual puede tener subelementos también, un típico ejemplo de categorías y subcategorías. Para ello me crearé una lista cuyos elementos tendrán el estilo categoria y cuyos subelementos tendrán el estilo subcategorias, necesario para diferenciar estilos y comportamiento.

ordenarlistas.png

<ul id="lista_categorias">
<li class="categoria">Elemento 1</li>
<li class="categoria">Elemento 2
<ul>
<li class="subcategoria">Elemento 2.1</li>
<li class="subcategoria">Elemento 2.2</li>
<li class="subcategoria">Elemento 2.3</li>
<li class="subcategoria">Elemento 2.4</li>
<li class="subcategoria">Elemento 2.5</li>
<li class="subcategoria">Elemento 2.6</li>
</ul>
</li>
<li class="categoria">Elemento 3</li>
<li class="categoria">Elemento 4
<ul>
<li class="subcategoria">Elemento 4.1</li>
<li class="subcategoria">Elemento 4.2</li>
<li class="subcategoria">Elemento 4.3</li>
<li class="subcategoria">Elemento 4.4</li>
</ul>
</li>
<li class="categoria">Elemento 5</li>
<li class="categoria">Elemento 6</li>
<li class="categoria">Elemento 7</li>
<li class="categoria">Elemento 8</li>
<li class="categoria">Elemento 9</li>
</ul>

Para ser lo menos intrusivo que se pueda, anadiré al evento load del objeto window la carga de las funciones necesarias para ello, siempre que exista el objeto lista_categorias (el primer ul de todos).

window.addEventListener('load', function() {
_lista();
}
, false);
function _lista() {
if ($('lista_categorias')) {
...
}

Habrá tres operaciones distintas: crear efecto drag, añadir evento drop a las categorías y añadir evento drop a las subcategorías. Digo crear efecto drag porque realmente lo que se hace es que cuando se ejecuta el evento mousedown, se crea una copia del elemento, y es este el que se mueve por la pantalla, guardando una referencia al elemento original. Hay distinción entre el evento drop de las categorías y las subcategorías porque si se trata de una categoría se añade sin más, y si es una subcategoría se añade en la categoría. A parte, si se intenta mover una categoría que contiene subcategorías, solo se añadirán las subcategorías, no la categoría.

// Drag & Drop de listado
function _lista() {
if ($('lista_categorias')) {
// Drag de cada categoria/subcategoria
// Para cada elemento li añado el evento mousedown, para que cuando se ejecute se cree una copia de ese elemento, se le de estilo semi transparente y se permita hacer drag
$$('#lista_categorias li').each(function(elemento){
elemento.addEvent('mousedown', function(e) {
e = new Event(e).stop();
window.item = elemento;
window.categoria_clone = this.clone()
.setStyles(this.getCoordinates())
.setStyles({'opacity': 0.7, 'position': 'absolute'})
.addEvent('drop', function() {console.log('DROP')})
.addEvent('emptydrop', function() {
this.remove();
}).inject(document.body);
categoria_clone.makeDraggable({
droppables: $$('#lista_categorias li')
}).start(e);
});
});
// Drop en las categorias
// Para cada categoria, le añadimos el evento drop, que permite recibir elementos "drag". Si el elemento que se recibe tiene subcategorias, entonces se cogen estas y se añaden al elemento ul que contiene, si no lo contiene, lo creamos. Si no contiene subcategorías, se añade sin más.
$$('#lista_categorias li.categoria').each(function(drop){
drop.addEvents({
'drop': function() {
window.categoria_clone.remove();
var ul = window.item.getElement('ul');
if (!drop.getElement('ul')) {
(new Element('ul')).inject(drop);
}
dropul = drop.getElement('ul');
if (ul) {
ul.getElements('li').each(function(li) {
li.inject(dropul);
});
ul.remove();
} else {
window.item.inject(dropul);
}
drop.setStyle('background', '#FFFFFF');
//dropFx.start('7389AE').chain(dropFx.start.pass('ffffff', dropFx));
},
'over': function() {
drop.setStyle('background', '#DDDDFF');
//dropFx.start('98B5C1');
},
'leave': function() {
drop.setStyle('background', '#FFFFFF');
//  				window.categoria_clone.remove();
//dropFx.start('ffffff');
}
})
});
// Si cae el drop en una subcategoria lo inserto en el padre
$$('#lista_categorias li.subcategoria').each(function(drop){
drop.addEvents({
'drop': function() {
window.categoria_clone.remove();
var ul = window.item.getElement('ul');
dropul = drop.parentNode;
if (ul) {
ul.getElements('li').each(function(li) {
li.inject(dropul);
});
ul.remove();
} else {
window.item.inject(dropul);
}
}
})
});
}
}

Ejemplo

Descargar ódigo

links for 2007-09-18

| | |

MAMP: Apache, MySQL y PHP para Mac

mamp.pngMAMP es un instalador de Apache, MySQL y PHP para Mac OS X sencillo y que con unos pocos clicks ya tenemos instaladas las aplicaciones más habituales para desarrollo web.
mamp.jpg
La versión está realizado bajo licencia GNU General Public License, aunque existe una versión PRO, con licencia, que dispone de funcionalidades extra.
MAMP

|

MODx: CMS y framework PHP

MODx es lo que se llamaría un CMF (Content Management Framework), una mezcla entre CMS (Content Management System)y framework. Realizado en PHP, permite realizar aplicaciones de forma sencilla, validando código XHTML, con layouts CSS y con utilización de Ajax.
modx.png
A parte de tener en cuenta los estándares web y tratar con Ajax (gracias a script.aculo.us), hay que añadir que en los navegadores más comunes, dispone de un instalador paso a paso, hace uso de FCKeditor, diferencia entre las sesiones de usuarios y de gestores de la aplicación, y exporta a formatos como PDF o Word, entre otras cosas.
MODx
Gracias Bentejuy por el aviso.

links for 2007-09-16