martes, 16 de septiembre de 2014

domingo, 3 de agosto de 2014

Error en la instalación de Zend Framework 2 con Doctrine ORM

Una consultilla a toda la gente, meses atras podia instalar normal el Zend Framework 2, con estas operaciones

cd my/project/dir
git clone git://github.com/zendframework/ZendSkeletonApplication.git
cd ZendSkeletonApplication
php composer.phar self-update
php composer.phar install


Pero ahora el comando: "php composer.phar self-update" no me esta funcionando, me sale error, que no puede instalar, que el composer esta corrupto, estoy intentando instalar Doctrine ORM y no puedo :(.

La configuracion de mi composer.json es:

{
    "name": "zendframework/skeleton-application",
    "description": "Skeleton Application for ZF2",
    "license": "BSD-3-Clause",
    "keywords": [
        "framework",
        "zf2"
    ],
    "homepage": "http://framework.zend.com/",
    "require": {
        "php": ">=5.3.3",
        "zendframework/zendframework": "2.3.*"
    },

    "minimum-stability": "dev",
    "require": {
        "doctrine/doctrine-orm-module": "dev-master",
        "hounddog/doctrine-data-fixture-module": "dev-master"
    }
}



Cuando logro instalar Doctrine y deseo probar por mi navegador me sale este problema:

Fatal error: Uncaught exception 'RuntimeException' with message 'Unable to load ZF2. Run `php composer.phar install` or define a ZF2_PATH environment variable.' in D:\Desarrollo\WMB\MVC\Pagina\public_html\ZendSkeletonApplication\init_autoloader.php:53 Stack trace: #0 D:\Desarrollo\WMB\MVC\Pagina\public_html\ZendSkeletonApplication\public\index.php(14): require() #1 {main} thrown in D:\Desarrollo\WMB\MVC\Pagina\public_html\ZendSkeletonApplication\init_autoloader.php on line 53





viernes, 25 de abril de 2014

Yii CJuiDatePicker rango de fechas en datepicker de jQuery UI

Rango de fechas en el Framework Yii (CJuiDatePicker) usando la librería jQuery UI que trae por defecto este framework PHP, la codificación es similar, en este caso habria que ponerle "js" antes de la palabra function, como se muestra en el ejemplo.

From: <input type="text" name="date_from" id="date_from" />
To: <input type="text" name="date_to" id="date_to" />



<?php
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
    'name' => 'date_from',
    // additional javascript options for the date picker plugin
    'options' => array(
        'showAnim' => "slideDown",
        'changeMonth' => true,
        'numberOfMonths' => 1,
        'showOn' => "button",
        'buttonImageOnly' => false,
        'dateFormat' => "yy-mm-dd",
        'showButtonPanel' => true,
        'onClose' => 'js:function(selectedDate) { $("#date_to").datepicker("option", "minDate", selectedDate); }',            
    )
));
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
    'name' => 'date_to',
    // additional javascript options for the date picker plugin
    'options' => array(
        'showAnim' => "slideDown",
        'changeMonth' => true,
        'numberOfMonths' => 1,
        'showOn' => "button",
        'buttonImageOnly' => false,
        'dateFormat' => "yy-mm-dd",
        'showButtonPanel' => true,
        'onClose' => 'js:function(selectedDate) { $("#date_from").datepicker("option", "maxDate", selectedDate); }',
    )
));
?>

Los parámetros son similares que el de JavaScript, como el siguiente código:

<script type="text/javascript">
    $(function() {
        $("#date_from").attr('value', getTodayDate);
        $("#date_from").datepicker({
            changeMonth: true,
            changeYear: true,
            numberOfMonths: 1,
            showOn: "button",
            buttonImageOnly: false,
            showAnim: "slideDown",
            dateFormat: "yy-mm-dd",
            onClose: function(selectedDate) {
                $("#date_to").datepicker("option", "minDate", selectedDate);
            }
        });
        $("#date_to").datepicker({
            changeMonth: true,
            changeYear: true,
            numberOfMonths: 1,
            showOn: "button",
            buttonImageOnly: false,
            showAnim: "slideDown",
            dateFormat: "yy-mm-dd",
            onClose: function(selectedDate) {
                $("#date_from").datepicker("option", "maxDate", selectedDate);
            }
        });
    });
</script>

Ejemplo en JavaScript pueden verlo aquí: http://jsfiddle.net/wimarbueno/fpT6q/
Documentación: http://www.yiiframework.com/doc/api/1.1/CJuiDatePicker

lunes, 21 de abril de 2014

getAttribute y setAttribute en JavaScript

TExtos de prueba:


<div id="ejemploid">Este es conenido del DIV con ID: "ejemploid"</div>                        
<div id="ejemplo" data-atributo-sin-valor class="miejemplo" style="background: white;color: gold;font-size: 18px;border: 1px dashed red;padding: 10px;">
    Este es conenido del DIV con ID: "ejemplo", Clase: "miejemplo"
</div>




<script type="text/javascript">

    //getAttribute y setAttribute en Javascript 
    /**
     * Test01:
     */
    //Prueba con la tipica getElementById()
    var testid = document.getElementById('ejemploid');//Poniendo en variable para escribir menos codigo
    var testid1 = testid.innerHTML;//Obteniendo el valor es como escribir: document.getElementById('ejemploid').innerHTML;
    alert('Resultado 01 del DIV con ID "ejemploid": ' + testid1);
    var testid2 = testid.innerHTML = 'Agregra este texto en el ID ejemploid';//Asignando valor
    alert('Resultado 02 del DIV con ID "ejemploid":  ' + testid2);



    /**
     * Test02:
     */
    //Obtener valor con la funcion nativa de JS: getAttribute
    var elemento = document.querySelector('#ejemplo');
    var test01 = elemento.getAttribute('id'); //muestra: "ejemplo"
    var test02 = elemento.getAttribute('data-atributo-que-no-existe'); //muestra: null
    var test03 = elemento.getAttribute('data-atributo-sin-valor'); //muestra: ""
    alert('Resultado del DIV con ID "ejemplo": ' + 
elemento.innerHTML);
    alert('Resultado 01 del DIV con ID "ejemplo": ' + test01);
    alert('Resultado 02 del DIV con ID "ejemplo": ' + test02);
    alert('Resultado 03 del DIV con ID "ejemplo": ' + test03);


    /**
     * Test03:
     */
    //Asignar valor con la funcion nativa de JS: setAttribute
    var elemento = document.querySelector('#ejemplo');
    elemento.setAttribute("data-atributo-que-no-existe", "Valor para ese atributo");
    // Comprobación
    alert('Comprobación: ' + elemento.getAttribute("data-atributo-que-no-existe")); // "Valor para ese atributo"


    /**
     * Test04:
     */
    //Atributos con una propiedad para sí mismo
    //Ojo, aunque getAttribute y setAttribute funcionarán, los elementos tienen ciertas propiedades específicas para acceder a algunos atributos. Aparte de style (ver abajo), aquí tenéis algunos de las propiedades más frecuentes:
    var elemento = document.querySelector('#ejemplo');
    // class
    elemento.className // "miejemplo"
    alert('elemento className, comprobacion 01: ' + elemento.className)//comprobación
    elemento.className = "miejemplo ejemplo-especial"; // Ahora el elemento tendrá las clases "miejemplo" y "ejemplo-especial"
    alert('elemento className, comprobacion 02: ' + elemento.className)//comprobación

    // id
    elemento.id // "ejemplo"
    alert('elemento id, comprobación: ' + elemento.id)//comprobación


    //Esas son globales, y son siempre strings, aunque no estén definidos. Pero en elementos más específicos se pueden encontrar otros.
    //En elementos más específicos (como <a>, <img> e <input>) tenemos propiedades adicionales (no están todas pero sí las más importantes):
    //- En <a> tenemos href, target y title
    //- En <img> tenemos src y alt
    //- En <input> están value y type…



    /**
     * Test05:
     */
    //El atributo style
    //- Se accede a él de forma específica (elemento.style), pero no devuelve una string, sino un ElementCSSInlineStyle (para el caso, un objeto).
    //- Ese objeto tiene tantas propiedades como propiedades css acepta el navegador
    //- Los nombres de esas propiedades son el de la propiedad (excepto float que es una palabra reservada), o están en camelCase si tienen guiones elemento.style.borderRadius. Para hacer la conversión CSS/Javascript reemplazad todos los guiones y la letra siguiente por sólo la letra en mayúscula (ej: -moz-border-radius › MozBorderRadius)
    var elemento = document.querySelector('#ejemplo');
    alert('Comprobacion de style color: '+elemento.style.color);
    alert('Comprobacion de style font-size: '+elemento.style.fontSize);                         
</script>

viernes, 11 de abril de 2014

Certificados de seguridad SSL

¿Qué es un certificado SSL?

El certificado SSL (Secure Socket Layer), es un protocolo de seguridad cuyo objetivo es garantizar la transacción de datos de forma segura entre visitante y Web, o viceversa, mediante la encriptación de la información.

¿En que se basa un certificado SSL?

El certificado SSL, se basa en la encriptación de los datos enviados entre el servidor donde se encuentre alojada la Web y el programa para navegar que utilice el visitante, o viceversa, utilizando para ello algoritmos matemáticos. Mediante esta encriptación, se impide que dicha información pueda ser interceptada, haciendo que la transacción de datos se realice de forma segura.

Certificados de seguridad SSL

  ¿Qué ventajas me puede dar un certificado SSL?

La ventaja principal del certificado de seguridad SSL, es la de garantizar que la transacción de datos se realiza de forma segura, facilitando así poder ganar la confianza de los visitantes que acceden a su página Web.

¿Qué páginas Web pueden necesitar un certificado SSL?

Páginas que tengan un servicio de tienda virtual o algún tipo de comercio electrónico, que puedan aceptar pagos mediante tarjetas. O Webs que simplemente puedan almacenar datos confidenciales como contraseñas, datos bancarios, tarjetas de crédito..

¿Qué tipos de cifrado existen?

Los cifrados de los actuales certificados de seguridad SSL aceptan una encriptación de datos de entre 40 a 256 bits.

¿Qué tipos de certificados puedo contratar?

  • Rapid SSL: El certificado Rapid SSL, es valido para un único dominio o subdominio y permite una encriptación de datos de hasta 128/256 bits. Es compatible con los navegadores; IE 5.01+, AOL 5+, Netscape 4.7+, Ópera 7+, Safari, Mozilla 1+ y Firefox 1+.
  • RapidSSL Wildcard: El certificado RapidSSL Wildcard, es valido para todos los subdominios de un dominio y permite una encriptación de datos de hasta 128/256 bits. Es compatible con los navegadores; IE 5.01+, AOL 5+, Netscape 4.7+, Ópera 7+, Safari, Mozilla 1+ y Firefox 1+.
  • True BusinessID: El certificado True BusinessID, es valido para un único dominio o subdominio y permite una encriptación de datos de hasta 128/256 bits e introducir los datos de su empresa o entidad como datos identificativos de su certificado SSL. Es compatible con los navegadores; IE 5.01+, AOL 5+, Netscape 4.7+, Ópera 7+, Safari, Mozilla 1+ y Firefox 1+.
  • True BusinessID Wildcard: El certificado True BusinessID, es valido para todos los subdominios de un dominio y permite una encriptación de datos de hasta 128/256 bits e introducir los datos de su empresa o entidad como datos identificativos de su certificado SSL. Es compatible con los navegadores; IE 5.01+, AOL 5+, Netscape 4.7+, Ópera 7+, Safari, Mozilla 1+ y Firefox 1+.
  • True BusinessID with EV: El certificado True BusinessID with EV, es valido para un único dominio o subdominio y permite una encriptación de datos de hasta 128/256 bits e introducir los datos de su empresa o entidad como datos identificativos de su certificado SSL. Además la tecnología EV, le permitirá ver en la barra de direcciones de su navegador, una pequeña barra verde notificando la autenticidad del certificado de seguridad SSL. Es compatible con los navegadores; IE 5.01+, AOL 5+, Netscape 4.7+, Ópera 7+, Safari, Mozilla 1+ y Firefox 1+.


Fuente:certificados.es

martes, 11 de marzo de 2014

Conexión remota a MySQL en Ubuntu / Debian

El acceso remoto a un servidor MySQL está desactivado por defecto, para poder acceder desde otras máquinas, ya bien desde nuestra red local, o desde una dirección IP externa, debemos modificar algunas opciones de configuración:

En el fichero /etc/mysql/my.conf se deben comentar estas dos líneas

#skip-networking    (esto no encontré en configuración, en otros tutoriales hablaban de esto)
#bind-address = 127.0.0.1

Después, se debe reiniciar el servidor MySQL
root@wimarbueno:/etc/mysql# service mysql restart

Y entonces, nos conectamos a mysql en el servidor y asignamos los siguientes privilegios:

vi que esto es para ip local, pero si tienes internet coge otro ip
GRANT ALL PRIVILEGES ON *.* TO root@"192.168.1.%" identified by "password";

esto para internet cualquier ip
GRANT ALL PRIVILEGES ON *.* TO root@"%.%.%.%" identified by "password";

Donde usuario y password son los datos de conexión que utilizaremos para conectarnos en remoto y 192.168.1.% indica que todas las direcciones IP de nuestra red local tienen acceso, % se usa como comodín.

De esta forma todas las direcciones IP de nuestra red local podrán conectarse en remoto a través de usuario / password:

mysql --user=root --host=servidor -p password

jueves, 6 de marzo de 2014

Solución a los problemas de compatibilidad con HTML5 de IE8 y Firefox 3


Se puede descargar el Js de Google en: http://code.google.com/p/html5shim/
1.- Agregan un condicional HTML para incluir un código JavaScript que sólo interpretarán las versiones anteriores a Internet Explorer 9:

<!--[if lt IE 9]>
    <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]--> 
 

2.- Obligar a Internet Explorer que muestre las nuevas etiquetas HTML5 como bloques, ya que no las interpreta como tal y ahí reside parte del problema.

article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section, main{
    display: block;
} 

Esto deberemos insertarlo al principio de nuestra hoja de estilos.
Con esto nuestro sitio HTML5 se verá perfectamente en todos los navegadores*.


*Probado en Internet Explorer 7 y 8. (falta agregar más datos...)