Desarrollo de Sitios Webs, CMS, Plantillas Oscommerce y Wordpress

Firefox 3.6 beta 4 Liberado

Firefox 3.6 beta 4 es puesta a disposición de cualquier usuario interesado apenas dos semanas después de haber sido lanzada la versión beta 3, en un esfuerzo por acelerar el desarrollo de este nuevo navegador web de la Fundación Mozilla.

La cuarta beta de Firefox 3.6 se centra en traer solución a más de 140 fallos de la versión anterior (listado de errores) y mejorar la compatibilidad con complementos, logrando soportar hasta un 70% de los actuales.

Interesados en acceder a más información pueden acceder a las notas de lanzamiento de Firefox 3.6 Beta 4.

Aunque sujetos a posibles retrasos la versión final de Firefox 3.6 se espera sea lanzada antes de fin de año.

Firefox 3.6 introduce numerosos cambios respecto a la versión 3.5 del navegador de la Fundación Mozilla:

  • nuevo motor de renderizado Gecko 1.9.2
  • soporte para la API de ficheros de HTML 5,
  • mejoras en la integración y gestión del funcionamiento de software de terceros para mejorar la estabilidad del navegador,
  • ejecución de archivos en modo asíncrono
  • mecanismo que impide el cuelgue de Firefox por software incompatible
  • cambio en la apariencia del navegador gracias a un nuevo complemento llamado “Personas”,
  • alertas para plug-ins desactualizados
  • mejora del rendimiento de JavaScript, responsable de una mayor capacidad de respuesta global del navegador y menor tiempo de inicio.
  • compatibilidad con los últimos estándares HTML, CSS y DOM.

Interesados pueden acceder a la descarga de Firefox 3.6 beta 4 desde www.mozilla.com.

read more

Solucion al ERROR 1054 – Unknown column ‘p.products_id’ in ‘on clause’ en OsCommerce

Cuando estamos instalando oscommerce y queremos mejorarlo con una plantilla o codigo propio puede que no encontremos que al dar click en el logo o en el nombre de una subcategoria , se produce el siguiente error:

1054 – Unknown column ‘p.products_id’ in ‘on clause’

select count(p.products_id) as total from products_description pd, products p left join manufacturers m on p.manufacturers_id = m.manufacturers_id, products_to_categories p2c left join specials s on p.products_id = s.products_id where p.products_status = ’1′ and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = ’3′ and p2c.categories_id = ’19′

[TEP STOP]

Segun la web oficial de oscommer es un bug que aparentemente ya esta corregido, y que sucede al correr una version de oscommerce preparada para php 4 en php5 , ahora bien, si bien oscommerce es un excelente paquete para el ecommerce facil de instalar y un poco menos facil de rediseñar su aspecto y colocarle lo que llamamos contribuciones o modulos adicionales, su codigo fuente esta un poco desfasado en el tiempo, aun existiendo una version propuesta oscommerce 3, se sigue viendo codigo de llamadas a la base de datos en archivos que son de la presentacion, no tiene un modelo MVC definido, asi mismo ocurre en WordPress, que siendo un excelente paquete para publicar contenidos web, no presenta un MVC en su estructura, entre otras cosas, aun asi, existen soluciones para las cosas y aqui dejo el codigo para solucionar el error en cuestion de este articulo:

En el archivo index.php
Ubicar estas lineas de codigo:


// show the products of a specified manufacturer
if (isset($HTTP_GET_VARS['manufacturers_id'])) {
if (isset($HTTP_GET_VARS['filter_id']) && tep_not_null($HTTP_GET_VARS['filter_id'])) {
// We are asked to show only a specific category
$listing_sql = “select ” . $select_column_list . ” p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from ” . TABLE_PRODUCTS . ” p, ” . TABLE_PRODUCTS_DESCRIPTION . ” pd, ” . TABLE_MANUFACTURERS . ” m, ” . TABLE_PRODUCTS_TO_CATEGORIES . ” p2c left join ” . TABLE_SPECIALS . ” s on p.products_id = s.products_id where p.products_status = ’1′ and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = ‘” . (int)$HTTP_GET_VARS['manufacturers_id'] . “‘ and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = ‘” . (int)$languages_id . “‘ and p2c.categories_id = ‘” . (int)$HTTP_GET_VARS['filter_id'] . “‘”;
} else {
// We show them all
$listing_sql = “select ” . $select_column_list . ” p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from ” . TABLE_PRODUCTS . ” p, ” . TABLE_PRODUCTS_DESCRIPTION . ” pd, ” . TABLE_MANUFACTURERS . ” m left join ” . TABLE_SPECIALS . ” s on p.products_id = s.products_id where p.products_status = ’1′ and pd.products_id = p.products_id and pd.language_id = ‘” . (int)$languages_id . “‘ and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = ‘” . (int)$HTTP_GET_VARS['manufacturers_id'] . “‘”;
}
} else {
// show the products in a given categorie
if (isset($HTTP_GET_VARS['filter_id']) && tep_not_null($HTTP_GET_VARS['filter_id'])) {
// We are asked to show only specific catgeory
$listing_sql = “select ” . $select_column_list . ” p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from ” . TABLE_PRODUCTS . ” p, ” . TABLE_PRODUCTS_DESCRIPTION . ” pd, ” . TABLE_MANUFACTURERS . ” m, ” . TABLE_PRODUCTS_TO_CATEGORIES . ” p2c left join ” . TABLE_SPECIALS . ” s on p.products_id = s.products_id where p.products_status = ’1′ and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = ‘” . (int)$HTTP_GET_VARS['filter_id'] . “‘ and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = ‘” . (int)$languages_id . “‘ and p2c.categories_id = ‘” . (int)$current_category_id . “‘”;
} else {
// We show them all
$listing_sql = “select ” . $select_column_list . ” p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from ” . TABLE_PRODUCTS_DESCRIPTION . ” pd, ” . TABLE_PRODUCTS . ” p left join ” . TABLE_MANUFACTURERS . ” m on p.manufacturers_id = m.manufacturers_id, ” . TABLE_PRODUCTS_TO_CATEGORIES . ” p2c left join ” . TABLE_SPECIALS . ” s on p.products_id = s.products_id where p.products_status = ’1′ and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = ‘” . (int)$languages_id . “‘ and p2c.categories_id = ‘” . (int)$current_category_id . “‘”;
}
}
————————————-
y reemplazarlo con estas lineas

// show the products of a specified manufacturer
if (isset($HTTP_GET_VARS['manufacturers_id'])) {
if (isset($HTTP_GET_VARS['filter_id']) && tep_not_null($HTTP_GET_VARS['filter_id'])) {
// We are asked to show only a specific category
$listing_sql = “select ” . $select_column_list . ” p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from (” . TABLE_PRODUCTS . ” p, ” . TABLE_PRODUCTS_DESCRIPTION . ” pd, ” . TABLE_MANUFACTURERS . ” m, ” . TABLE_PRODUCTS_TO_CATEGORIES . ” p2c ) left join ” . TABLE_SPECIALS . ” s on p.products_id = s.products_id where p.products_status = ’1′ and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = ‘” . (int)$HTTP_GET_VARS['manufacturers_id'] . “‘ and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = ‘” . (int)$languages_id . “‘ and p2c.categories_id = ‘” . (int)$HTTP_GET_VARS['filter_id'] . “‘”;
} else {
// We show them all
$listing_sql = “select ” . $select_column_list . ” p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from (” . TABLE_PRODUCTS . ” p, ” . TABLE_PRODUCTS_DESCRIPTION . ” pd, ” . TABLE_MANUFACTURERS . ” m) left join ” . TABLE_SPECIALS . ” s on p.products_id = s.products_id where p.products_status = ’1′ and pd.products_id = p.products_id and pd.language_id = ‘” . (int)$languages_id . “‘ and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = ‘” . (int)$HTTP_GET_VARS['manufacturers_id'] . “‘”;
}
} else {
// show the products in a given categorie
if (isset($HTTP_GET_VARS['filter_id']) && tep_not_null($HTTP_GET_VARS['filter_id'])) {
// We are asked to show only specific catgeory
$listing_sql = “select ” . $select_column_list . ” p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from (” . TABLE_PRODUCTS . ” p, ” . TABLE_PRODUCTS_DESCRIPTION . ” pd, ” . TABLE_MANUFACTURERS . ” m, ” . TABLE_PRODUCTS_TO_CATEGORIES . ” p2c) left join ” . TABLE_SPECIALS . ” s on p.products_id = s.products_id where p.products_status = ’1′ and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = ‘” . (int)$HTTP_GET_VARS['filter_id'] . “‘ and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = ‘” . (int)$languages_id . “‘ and p2c.categories_id = ‘” . (int)$current_category_id . “‘”;
} else {
// We show them all
$listing_sql = “select ” . $select_column_list . ” p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from ((” . TABLE_PRODUCTS_DESCRIPTION . ” pd, ” . TABLE_PRODUCTS . ” p) left join ” . TABLE_MANUFACTURERS . ” m on p.manufacturers_id = m.manufacturers_id, ” . TABLE_PRODUCTS_TO_CATEGORIES . ” p2c) left join ” . TABLE_SPECIALS . ” s on p.products_id = s.products_id where p.products_status = ’1′ and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = ‘” . (int)$languages_id . “‘ and p2c.categories_id = ‘” . (int)$current_category_id . “‘”;
}
}

——————————————————————-
en el archivo  advanced_search_result.php
encontrar estas lineas

$from_str = “from ” . TABLE_PRODUCTS . ” p left join ” . TABLE_MANUFACTURERS . ” m using(manufacturers_id), ” . TABLE_PRODUCTS_DESCRIPTION . ” pd left join ” . TABLE_SPECIALS . ” s on p.products_id = s.products_id, ” . TABLE_CATEGORIES . ” c, ” . TABLE_PRODUCTS_TO_CATEGORIES . ” p2c”;

—————————————-
y reemplazarlas con esto

$from_str = “from ((” . TABLE_PRODUCTS . ” p) left join ” . TABLE_MANUFACTURERS . ” m using(manufacturers_id), ” . TABLE_PRODUCTS_DESCRIPTION . ” pd) left join ” . TABLE_SPECIALS . ” s on p.products_id = s.products_id, ” . TABLE_CATEGORIES . ” c, ” . TABLE_PRODUCTS_TO_CATEGORIES . ” p2c”;

read more

HTML 5, Cuando sale y que nos trae..

Todo el que ha intentando incursionar en la internet y ha querido tener su propio sitio web, a tenido que tocar como primer punto, el lenguaje de marcadores HMTL el cual nos permite en pocos minutos tener una web lo suficientemente decente para mostrar y seguir adelante con la siguiente fase que es añadirle estilos mediante CSS y convertirla en una web profesional o seguir mas allá y agregarle funcionabilidades mediante un lenguaje de scripting como PHP y soportar los datos mediante un manejador de BD´s como MySql.

Ahora bien llevamos varios años usando HTML 4 y el XHTML 1 estricto,  pero en los ultimos meses nos hemos visto muy influido por frameworks, API´s,etc. Ahora bien uno de los puntos mas interesantes es el uso extendido que se le esta dando al DOM desde el HTML mediante javascript, este ultimo que desde siempre ha acompañado al famoso lenguaje de marcadores habia sido poco tomado en cuenta  asi como el DOM, ya que para añadir dinamismo se usaba poco, asi como el Dhtml, porque el interes de los desarrolladores es de programar mas del lado del servidor , esto puede tener muchos PRO´s , uno de los que me viene a la mente al momento es la seguridad del código, mientras Javascript, Html, CSS puede visualizarse el codigo fuente por el  usuario PHP  y otros solo muestran una salida estandar.

Ahora bien,  sobre HTML 5,  tienen pensado lanzarlo hasta el 2012, aunque ya algunos navegadores poseen algunas de sus caracteristicas, y como decia arriba, tocará ser mas que una nueva version de HTML,  pues ademas se vera como una implementación de especificaciones, agregando lo mas nuevo y estable, y quitando lo que esta en desuso.

Y si bien nos sorprenderia la depuración comentada, lo mas importante es que HTML 5 obstentara convertirse en un proveedor de un API que permitirá a los usuarios crear aplicaciones dentro del navegador que de otra manera estuvieran solo disponibles mediante terceros.

Algunas de las Caracteristicas Nuevas son:

  • Estructura del cuerpo: La mayoría de las webs tienen un formato común, formado por elementos como cabecera, pie, navegadores, etc. HTML 5 permite agrupar todas estas partes de una web en nuevas etiquetas que representarán cada uno de las partes típicas de una página.
  • Etiquetas para contenido específico: Hasta ahora se utilizaba una única etiqueta para incorporar diversos tipos de contenido enriquecido, como animaciones Flash o vídeo. Ahora se utilizarán etiquetas específicas para cada tipo de contenido en particular, como audio, vídeo, etc.
  • Canvas: es un nuevo componente que permitirá dibujar, por medio de las funciones de un API, en la página todo tipo de formas, que podrán estar animadas y responder a interacción del usuario. Es algo así como las posibilidades que nos ofrece Flash, pero dentro de la especificación del HTML y sin la necesidad de tener instalado ningún plugin.
  • Bases de datos locales: el navegador permitirá el uso de una base de datos local, con la que se podrá trabajar en una página web por medio del cliente y a través de un API. Es algo así como las Cookies, pero pensadas para almacenar grandes cantidades de información, lo que permitirá la creación de aplicaciones web que funcionen sin necesidad de estar conectados a Internet.
  • Web Workers: son procesos que requieren bastante tiempo de procesamiento por parte del navegador, pero que se podrán realizar en un segundo plano, para que el usuario no tenga que esperar que se terminen para empezar a usar la página. Para ello se dispondrá también de un API para el trabajo con los Web Workers.
  • Aplicaciones web Offline: Existirá otro API para el trabajo con aplicaciones web, que se podrán desarrollar de modo que funcionen también en local y sin estar conectados a Internet.
  • Geolocalización: Las páginas web se podrán localizar geográficamente por medio de un API que permita la Geolocalización.
  • Nuevas APIs para interfaz de usuario: temas tan utilizados como el “drag & drop” (arrastrar y soltar) en las interfaces de usuario de los programas convencionales, serán incorporadas al HTML 5 por medio de un API.
  • Fin de las etiquetas de presentación: todas las etiquetas que tienen que ver con la presentación del documento, es decir, que modifican estilos de la página, serán eliminadas. La responsabilidad de definir el aspecto de una web correrá a cargo únicamente de CSS.
read more