Telepieza es un mezcla de ayuda, información, opinión, ocio, negocio y diversión, esperamos que todos vosotros os sintaís en vuestra casa.

Archivo de la Categoría Programación

 Voy a empezar a escribir una serie de post para virtuemart, he leí­do mucho sobre los problemas que ocasiona al instalar el sh404sef en un joomla con virtuemart (Tienda Virtual), dichos problemas son la paginación de los productos o que enseña siempre el mismo artículo cuando queremos ver una categoría en concreto.

 El problema de enseñar siempre el mismo artículo se soluciona de forma momentánea desactivando la cache del modulo global de joomla, después explicaremos la solución (ver imagen abajo).

joomla_cache

…………………………………………………………

El problema de la paginación se soluciona de forma momentánea desactivando el módulo sh404sef de joomla (ver imagen abajo).

joomla_sh404sef

Dichos problemas se solucionan mediante programación, cambiar el código php, por dicho motivo es necesarío tener un entorno de pruebas en nuestro ordenador personal, sin modificar la tienda virtual que tenemos colgada en Internet.

Si modificamos los programas directamente en el Hosting, sobre todo el sh404SEF, podemos tener una mala experiencia personal, puede que todo el rato te este dando la página web el error 404. (por cierto en mi primera instalación llego un momento que el 404 lo tenía atragantado).

Al desactivar los dos módulos el de la cache y el sh404sef, nuestra tienda virtual del hosting funcionará sin problemas, y os dará tiempo a vosotros de ir leyendo estos post y aplicarlos en vuestro ordenador personal, para ver los resultados, una vez que son correctos los podéis aplicar sin problemas en el hosting.

Lo más difí­cil pero no imposible es tener un entorno de pruebas en vuestro ordenador igual que el del Hosting, un mismo joomla, una misma base de datos, un mismo entorno de trabajo ………

Puede que me alargue en las explicaciones,  pero os puedo garantizar que la solución de la paginación o de la visualización del mismo producto en el virtuemart no es igual para todo el mundo, cada uno de vosotros puede tener una solución diferente en función de los componentes y themes instalados en el joomla + virtuemart.

Cómo hemos indicado tenemos que buscar el bug (error) en los programas de joomla, y modificar su código, para eso necesitamos un entorno de programación en nuestro ordenador personal.

Lo primero a realizar es instalar un entorno WAMP en nuestro windows, las siglas WAMP es Windows, Apache, Mysql y Php.

1.- Instalar XAMPP Apache

  instalar_xampp_01.gif El entorno WAMP se instala mediante el  el paquete Open Source  XAMPP (Apache) realizado por la organización apachefiends que está englobado en el proyecto de OpenSource y su dirección es :

    http://www.apachefriends.org/en/xampp-windows.html

 La carpeta por defecto es c:\xampp es aconsejable no cambiar dicha carpeta de nombre en la instalación,  (ver imagen izquierda). 

NOTA : Para ver las fotos en miniatura, simplemente tienes que picar encima de ella. 

instalar_xampp_02.gif Dicho programa instala en nuestro ordenador el Apache, PHP 4 y 5,  de forma opcional  MySql y el PhpMyAdmin (ver imagen izquierda) y todos sus servicios asociados. (Tenemos que indicar en la instalación que instale Apache, MySql y el PhpMyAdmin)

  XAMPP es una maravilla de producto funcionando a la perfección en S.O. Windows con más de 2   millones y medio  de descargadas en Open Source.

  • 1. Visite la dirección de arriba (Si aún no has descargado el programa) y descargue el programa.
  • 2. Descargue el paquete de instalación XAMPP, que deberá ser un archivo ejecutable llamado xampp-win32-1.7.3.exe (según versión)
  • 3. Ejecute el paquete de instalación. Cuando le solicite información, elija instalar Apache  y MySQL dejando sin marcar Filezilla.

 NOTA : Le recuerdo que si tiene instalado el IIS, no es posible tener dos servidores conectados a la vez por el puerto 80, uno de ellos tiene que ser desactivado.

Una vez terminado la instalación del XAMPP, ahora tenemos que instalar un IDE para buscar y modificar los programas realizados en PHP del JOOMLA. Existen muchos IDE’s, uno puede ser Eclipse, Netbeans  y muchos más ….

El que vamos a instalar es un IDE Opensource muy fácil de ejecutar, no necesitamos programas adicionales cómo el Java, el nombre del producto es :  CODELOBSTER, dicho programa crea un proyecto sobre el paquete de joomla más todos sus componentes para poder buscar las instrucciones a modificar en los programas que tienen el bug.

Otro programa necesario y digo necesario es el GOOGLE CHROME, ir al buscador google y descargar el navegador Chrome, lo necesitamos para que nos diga el elemento a inspeccionar con el Codelobster y a su vez modificar el código php del joomla.

Bueno con estos tres programas : XAMPP, CODELOBSTER y CHROME ya estamos listos para instalar nuestro JOOMLA del HOSTING en nuestro ordenador personal y realizar todas las pruebas necesarias para poder localizar los errores anteriormente descritos en nuestra tienda virtual.

En el próximo post seguiremos con nuestra explicación de solucionar problemas en el joomla con virtuemart más todos los componentes necesarios para arrancar una tienda virtual.

Share

En el apartado (buscar de Forma automática el cambio de Divisa (I) , nos quedamos en la instrucción fsockopen() devuelve un puntero a fichero, el cual se puede usar junto con las otras funciones de ficheros (como fgets(), fgetss(), fputs(), fclose(), feof()).

Voy a colgar el programa en PHP que está funcionando desde hace muchos meses sin dar ningún tipo de error para localizar el cambio de divisa desde un Hosting con la instrucción fsockopen()

El programa php currency_class.php es una clase y la he llamado currency_class.php, ire comentando casi todas las instrucciones para su mejor comprensión.

PROGRAMA REALIZADO PARA PHP LLAMADO CURRENCY_CLASS.PHP SIENDO LA CLASE Currency.

<?php
/**
* @version  $Id: currency_class.php
* @package  mvmphp
* @copyright Copyright (C) 2009
* @comment      Clase Currency (Buscar Valor de la Divisa)
*/

class Currency {
// Por defecto para toCurr es USD = Dólares y fromCurr es EUR = Euros 

 public $toCurr   = ‘USD’; 
 public $fromCurr = ‘EUR’;
 // Constructor de la Clase, si los parametros a pasar son diferentes de null, pasamos los valores a las variables de la clase
 function __construct($p_curr=null, $p_from=null) {
  if ($p_curr != null ) $this->toCurr   = $p_curr;
  if ($p_from != null) $this->fromCurr = $p_from; 
  $this->toAmount = 1;  // Valor es siempre 1
 }  
 
/**
* Busca mediante la tecnica del Socker del puerto 80 en google el valor de la divisa
* Si es correcto devuelve una página para después localizar el cambio de la divisa
*/
 function getCurrencyGoogle() {

 $host = ‘www.google.com’;
 $page = ‘/search?&q=’.$this->toAmount.’+’.$this->toCurr.’+in+’.$this->fromCurr;
 $file_info = ”;   $get_info = false;  $returnHtml = array();  $t_d=”; 

# Open Socker (Google) y search con las dos divisas con valor 1
 if ($fsock = @fsockopen($host, $port=80, $errno, $errstr, $timeout=15))
 {
# Pagina y valores a buscar en el servidor
  @fputs($fsock, “GET $page HTTP/1.1\r\n”);
# DNS o IP del Host
  @fputs($fsock, “HOST: $host\r\n”);
# Tipo de Conexion y cierre
  @fputs($fsock, “Connection: close\r\n\r\n”);
  while (!@feof($fsock))
  {  
# A partir de la Segunda Lectura grabamos la informacion en $file_info para su posterior tratamiento
   if ($get_info) $file_info .= @fread($fsock, 1024);
   else
   {
# Por primera vez eliminamos la cabecera y controlamos errores de conexion
    $line = @fgets($fsock, 1024);
    if ($line == “\r\n”) $get_info = true;
    else if (stripos($line, ’404 not found’) !== false)
    {
     $errstr = ‘FILE_NOT_FOUND’ . ‘: ‘ . $host . $page;
     error_log_event(‘ Currency 01-Error : ‘,$errstr ); 
     return false;
    }
   }
  }
  @fclose($fsock);
 }
 else
 {
  if ($errstr) { $errstr = utf8_convert_message($errstr);
                 error_log_event(‘ Currency 02-Error : ‘,$errstr );
                       return false;  }
  else     { $errstr = ‘FSOCK_DISABLED’;  
                 error_log_event(‘ Currency 03-Error : ‘,$errstr );
        return false; }
 }

Lee el resto de esta entrada »

Share

Cuando realizas una página web pensando en todas las culturas e idiomas , tienes que tener en cuanta estos consejos :

1.- Google no está en todos los continentes, por ejemplo en Asia domina Baidu.

2.- El famoso YouTube está prohibido en China, alli el que funciona se llama Youku.

3.- En programación, existen funciones automáticas que cambian las palabras de minúsculas a mayúsculas, recuerda que muchos idiomas no existe las mayúsculas y el efecto es que no salen las letras.

4.- Cuando diseñas una página web necesitas comprender el significado de los colores en cada cultura. El significado del color es fundamental para un pueblo, por ejemplo el blanco en china significa muerte, sus colores preferidos son el dorado y el rojo, aquí en nuestra cultura el significado de los colores son diferentes.

5.- El mundo está lleno de ordenadores conectados a Internet. El navegador más utilizado es el Explorer 6 y muchos de ellos tienen una antigüedad superior a 5 años con tarjetas de vídeo no superior a 512 Kb y resolución de 800×600.

6.- Si tú sitio web está pensado para ordenadores de 1024×768,  millones de ordenadores no podrán ver tú página web, por lo explicado en el punto 5.

7.- En la escuela , en el trabajo, en las noticias te explican que los navegadores más utilizados en el mundo son IE, mozilla, chrome …, pero se olviden de que un pueblo como los chinos utilizan uno llamado 360 IE en chino ……..

8.- Nuestra cultura  se expresa y escribe con caracteres y en otras culturas en símbolos. Lo explico porque un carácter se puede leer con font 10, pero cuando estamos visualizando sí­mbolos es a font 12 o superior.

9.- Si quieres armonizar una página web en varios idiomas, recuerda que la lengua expresada con sí­mbolos es más ancha que la expresada en caracteres.

10.- Si pides opinión a personas de otras culturas, puede que nunca te digan que no, pero si no les gusta la página no entrarán nunca a tu web.

11.- Si realizas una web y tu vecino o amigo la ve lenta, en otros continentes como el Asiatico o el Africano ni la verán, sus líneas de comunicaciones son más penosas que las nuestras.

12.- Una página web multi-idioma que se aprecie tiene que enseñar la página principal en el idioma que el usuario tiene en su ordenador o navegador.

Share

 Existen muchas técnicas diferentes para buscar el cambio de una divisa en lenguaje PHP en otro servidor que no sea el tuyo (Por ejemplo : European Center Bank). Generalmente el cambio de las divisas del día lo dan servidores de Bancos, Instituciones Económicas, Prensa especializada en economía, Las Bolsas de todo el Mundo ,  los buscadores como yahoo, google y demás organizaciones que están especializados en Importación/Exportación de Divisas.

 Para poder leer un fichero HTML en otro ordernador en PHP podemos utilizar la funcion :  file_get_contents()  y para poder leer un fichero en otro servidor en XML la funcion : simplexml_load_file()

Dichas funciones funcionan perfectamente si las utilizamos en programa PHP que sus máquinas son controladas por nuestro Dpto. Informático o en ordenadores locales con conexión a Internet.

 Las técnicas que estamos utilizando para buscar el valor de divisa en los formatos ya explicados anteriormente, son muy factibles porque dichas organizaciones nos dejan dichos ficheros en sitios públicos, para que otras compañías puedan acceder a leer libremente dichos ficheros.

 Pero la sorpresa es cuando una aplicación realizada en PHP  la ejecutamos en un HOSTING,  y vemos con sorpresa que dichas funciones nos dan error,  porque el Servidor del Hosting no permite acceder a otros Ordenadores con dichas funciones para leer los ficheros que nosotros necesitamos en nuestra aplicación.

Para solucionar el problema existe una función : fsockopen() que nos puede ayudar a leer ficheros HTML y TXT, para poder leer ficheros de otros servidores sin que el HOSTING nos corte el acceso a las máquinas remotas que deseamos acceder.

La funcion fsockopen()  abre una conexión de dominio Internet o Unix via sockets. su descripción es : 

   int fsockopen( string hostname, int port [, int errno [, string errstr [, double timeout]]])

 fsockopen() : Inicia una conexión de dominio Internet  o Unix.

 Para el domino Internet, abrirá una conexión TCP hacia el ordenador hostname en el puerto port.

 Para el dominio Unix, hostname se usará como ruta al socket, port debe ser 0 para este caso, el parámetro opcional timeoutse puede usar para especificar un timeout en segundos para establecer la conexión.

fsockopen() devuelve un puntero a fichero, el cual se puede usar junto con las otras funciones de ficheros (como fgets(), fgetss(), fputs(), fclose(), feof()).

En el siguiente post realizaremos un programa con fsockopen() para extraer el cambio de la divisa desde un servidor.

Share

 Existen muchos productos informáticos que ofrecen una solución de ERP, CRM o CMS por Internet.  Dichos productos pueden ser Open Source (licencia Gratuita) como Openbravo, osCommerce , Joomla , SugarCRM,  o de pago (Licencia por Uso),  empresas que se dedican a comercializar productos por tener una exclusiva de distribución o paquetes informáticos desarrollados por ellos mismos.

 Pero si nos movemos en el mundo de la importación de mercancía entre diferentes culturas, por ejemplo España y China, aquí empezamos a tener problemas de idioma en cualquier tipo de producto Open Source que existe en la actualidad.

 Generalmente un producto Open Source cuando es configurado,  le tienes que indicar el idioma de arranque por defecto, pero si tiene que ser visto por dos culturas simultaneas en sus idiomas correspondientes, el idioma por defecto no funciona en una de las culturas.

 Pongo un ejemplo : Imaginaros que compro productos en China y los vendo en España, mis proveedores de china cuando entran a la web,  para consultar mis pedidos tienen que ver la página principal en chino antes de identificarse con el Usuario y Contraseña. Mis clientes de España cuando entran en la página Web la tienen que ver en Español antes de identificarse en la página web.

 Si trabajamos con un idioma por defecto, por ejemplo el Español, los chinos no tienen ni idea de dicho idioma, pero sí conocen el ingles. Si ponemos el Chino por defecto en nuestra página web , aquí tenemos un serio problema,  porque existen dos tipos de lenguas, el simplificado y el tradicional. (Cuál colocar cómo lengua por defecto).

 Podemos poner cómo idioma por defecto el inglés, pero en España como en China aún no está lo suficientemente arraigado dicho idioma en el pueblo y por dicho motivo no es posible introducirlo como idioma por defecto en nuestra Web. 

 Muchas veces crees que el idioma por defecto de un paquete informático es la solución, pero cuando trabajas con dos culturas diferentes, pasa a ser un problema de grandes dimensiones para nuestro negocio de Importación o Exportación entre diferentes continentes.

Share

 En las aplicaciones por Internet cada vez es más popular el soportar varios idiomas a la vez. Existe una reglamentación el ISO-639 que regula el idioma. Tiene que ser dos dígitos y en minúsculas.

La lista está en : http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt

 Existe otro reglamento el ISO-3166 que regula los países. Tienen que ser dos dígitos y en mayúsculas.

La lista está en : http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html   
 
 Para indicar un idioma y un país en concreto se unen los dos dígitos en minusculas del idioma y los dos dígitos del país en mayúsculas unidos por un guión _.

Varios ejemplos :

  • “es_ES”   Español es España.
  • “ca_ES”   Catalán en España. 
  • ‘es_MX”  Español en Mexico.

Todo esto lo explico porque cada vez más se implementan los idiomas en lenguajes de programación orientados a Objetos como el JAVA , C++ y el PHP, que pueden tener la clase locale para gestionar los idiomas, dicha clase se regula según la reglamentación ISO-639 e ISO-3166.

Les dejo abajo todas las posibles combinaciones que existen entre los idiomas y los paises :

Value Description   Value Description
ar Arabic   fi Finnish
ar_AE Arabic (United Arab Emirates)   fi_FI Finnish (Finland)
ar_BH Arabic (Bahrain)   fr French
ar_DZ Arabic (Algeria)   fr_BE French (Belgium)
ar_EG Arabic (Egypt)   fr_CA French (Canada)
ar_IQ Arabic (Iraq)   fr_CH French (Switzerland)
ar_JO Arabic (Jordan)   fr_FR French (France)
ar_KW Arabic (Kuwait)   fr_LU French (Luxembourg)
ar_LB Arabic (Lebanon)   hi_IN Hindi (India)
ar_LY Arabic (Libya)   hr Croatian
ar_MA Arabic (Morocco)   hr_HR Croatian (Croatia)
ar_OM Arabic (Oman)   hu Hungarian
ar_QA Arabic (Qatar)   hu_HU Hungarian (Hungary)
ar_SA Arabic (Saudi Arabia)   id Indonesian
ar_SD Arabic (Sudan)   is Icelandic
ar_SY Arabic (Syria)   is_IS Icelandic (Iceland)
ar_TN Arabic (Tunisia)   it Italian
ar_YE Arabic (Yemen)   it_CH Italian (Switzerland)
be Belarusian   it_IT Italian (Italy)
be_BY Belarusian (Belarus)   iw Hebrew
bg Bulgarian   iw_IL Hebrew (Israel)
bg_BG Bulgarian (Bulgaria)   ja Japanese
ca Catalan   ja_JP Japanese (Japan)
ca_ES Catalan (Spain)   ko Korean
cs Czech   ko_KR Korean (Korea)
cs_CZ Czech (Czech Republic)   lt Lithuanian
da Danish   lt_LT Lithuanian (Lithuania)
da_DK Danish (Denmark)   lv Latvian
de German   lv_LV Latvian (Latvia)
de_AT German (Austria)   mk Macedonian
de_CH German (Switzerland)   mk_MK Macedonian (Macedonia)
de_DE German (Germany)   nl Dutch
de_LU German (Luxembourg)   nl_BE Dutch (Belgium)
el Greek   nl_NL Dutch (Netherlands)
el_GR Greek (Greece)   no Norwegian
en English   no_NO Norwegian (Norway)
en_AT English (Austria)   no_NO_NY Norwegian (Norway,Nynorsk)
en_AU English (Australia)   pl Polish
en_BR English (Brazil)   pl_PL Polish (Poland)
en_CA English (Canada)   pt Portuguese
en_CH English (Switzerland)   pt_BR Portuguese (Brazil)
en_DE English (Germany)   pt_PT Portuguese (Portugal)
en_DK English (Demark)   ro Romanian
en_ES English (Spain)   ro_RO Romanian (Romania)
en_FI English (Finland)   ru Russian
en_FR English (France)   ru_RU Russian (Russia)
en_GB English (Great Britain)   sk Slovak
en_HK English (Hong Kong)   sk_SK Slovak (Slovakia)
en_IE English (Ireland)   sl Slovenian
en_IN English (India)   sl_SI Slovenian (Slovenia)
en_IT English (Italy)   sq Albanian
en_JP English (Japan)   sq_AL Albanian (Albania)
en_KR English (Korea)   sr Serbian
en_MX English (Mexico)   sv Swedish
en_NL English (Netherlands)   sv_SE Swedish (Sweden)
en_NO English (Norway)   th Thai
en_NZ English (New Zealand)   th_TH Thai (Thailand)
en_SE English (Sweden)   tr Turkish
en_SG English (Singapore)   tr_TR Turkish (Turkey)
en_TW English (Taiwan)   uk Ukrainian
en_US English (United States)   uk_UA Ukrainian (Ukraine)
en_ZA English (South Africa)   vi Vietnamese
es Spanish   vi_VN Vietnamese (Vietnam)
es_AR Spanish (Argentina)   zh Chinese
es_BO Spanish (Bolivia)   zh_CN Chinese (China)
es_CL Spanish (Chile)   zh_HK Chinese (Hong Kong)
es_CO Spanish (Colombia)   zh_TW Chinese (Taiwan)
es_CR Spanish (Costa Rica)      
es_DO Spanish (Dominican)      
es_EC Spanish (Ecuador)      
es_ES Spanish (Spain)      
es_GT Spanish (Guatemala)      
es_HN Spanish (Honduras)      
es_MX Spanish (Mexico)      
es_NI Spanish (Nicaragua)      
es_PA Spanish (Panama)      
es_PE Spanish (Peru)      
es_PR Spanish (Puerto Rico)      
es_PY Spanish (Paraguay)      
es_SV Spanish (El Salvador)      
es_UY Spanish (Uruguay)      
es_VE Spanish (Venezuela)      
et Estonian      
et_EE Estonian (Estonia)      
Share

 Si desea contactar con telepieza, puede enviar un e-mail a: telepieza@telepieza.com.
Normas de uso y Politica de privacidad .Telepieza empezó el 20/12/2007 a las 18h (Hora Española).
 Ayude a financiar Telepieza en Internet, picando un anuncio de su interes en nuestro Weblog.