PHP

117 entradas

Magento logo

Magento: primeras incursiones, recorriendo los productos

Este estupendo CMS orientado a la venta online de productos hace las delicias de los vendedores, de igual modo de los maquetadores, y cómo no, también de los programadores. Como analista programador llevaba ya un tiempo queriendo meterle mano a las entrañas de Magento. Así que poco a poco, he ido cogiendo los manuales para el usuario, luego el del diseñador, y ahora tengo entre manos el del programador. Ahora según van surgiendo las necesidades voy haciendo incursiones cada vez más a fondo en el código fuente de esta humongous web application. La verdad es que lo estoy disfrutando porque Magento está desarrollado con una buena estructura y sobre un gran framework de desarrollo PHP, el Zend Framework. Incorporando técnicas de programación que le dan una gran flexibilidad sin añadir demasiada complejidad.

Logo de PHP

Descargar un fichero vía web y enviarlo por email con PHP

Este es otro pequeño how to para hacer una tarea rutinaria. Simplemente, como indica el título de la entrada, se hace lo que dice, en este caso mediante PHP. Esta tarea se puede programar en línea de comandos para ejecutarse todos los días. Es algo habitualmente necesario, y ya que PHP es un lenguaje de scripting muy sencillo y a la par potente, vamos a ver cómo hacer esto sin complejos sistemas intermedios. Para este manual se usa Linux, y se ha probado sobre Ubuntu 14.

Magento logo

Magento 2: conociendo a la bestia parda

De todos las soluciones de tienda online que he conocido hasta la fecha, Magento es de lo más robusto y potente que he visto de código abierto. Estoy conociendo poco a poco los entresijos de Magento 1 en el trabajo, y es buen momento de ver las mejoras que trae Magento 2 y así cotejar. Es un sistema de información dedicado a la venta robusto, flexible y muy personalizable. Alrededor de Magento se mueve todo un ecosistema de soluciones empresariales de la más alta gama. Todo esto es posible gracias a las características de Magento. Para explicar todo lo que tiene Magento necesitamos mucho tiempo, terminaríamos antes buscando qué no tiene. Pero también encontrar qué no tiene va a ser difícil porque Magento es todo un referente mundial de las soluciones eCommerce existentes. Un poco de historia Nació como proyecto de código abierto en el 2007. Ya en el 2008 fue premiado como mejor nuevo proyecto de código abierto del año. En el año 2009 la empresa Varien lanzó la versión Enterprise con el modelo de negocio de suscripción anual. Ahora mismo es propiedad de Ebay, la cual es propietaria del 100% de la empresa. Lanzaron también una versión Profesional, […]

Magento: Recuperando contraseñas y el modelo de datos EAV

Ya estoy de nuevo por aquí frikeando un poco con el software. Estoy en estos días poniéndome al día con Magento. Es la gran solución de Código Libre para trabajar de forma económica montando una web. Entre las tres principales soluciones es la que de momento ostenta la primera posición, la segunda viene a ser Prestashop y la tercera WooCommerce. Estoy hablando de las soluciones económicas, Open Source, PHP, robustas y estables. Ya si nos centramos sólo en España veremos que el despunte de tiendas online es para Prestashop. Espero no equivocarme con los datos, los puedes comprobar rápidamente haciendo un par de búsquedas y dejar un comentario abajo para corregir. Situación Resulta que tenemos entre manos ahora un Magento, pero no podemos entrar al panel de administración que lo tenemos en: https://nombredominio.com/index.php/admin Pero sí que tenemos acceso a la base de datos. Es imprescindible tenerlo porque si no entonces tendremos que descartar éste mecanismo de recuperación. Necesitamos entonces acceso mediante phpMyAdmin, Mysql Workbench, línea de comandos.. Dónde tenemos que tocar Ahora bien, los administradores están en la tabla admin_user y la contraseña de cada uno es la columna password. Si le hemos puesto un prefijo a las tablas entonces […]

Sylius.org tienda online 100% Symfony: calidad, flexibilidad y escalabilidad

Brutal el proyecto que están desarrollando en Sylius. Navegando y navegando por proyectos para hacer tiendas online. Viendo las principales opciones del mercado: Magento, Prestashop y WordPress con WooCommerce. Me planteaba la opción de cómo sería desarrollar una tienda completa en Symfony. Integrar pasarelas de pago, métodos de envío, ordenando todo los productos por categorías, valores, atributos de los productos.. es un trabajazo. Pero por otro lado no quería prescindir de la flexibilidad y agilidad que nos da un buen framework PHP, en este caso el gran Symfony. Aterrizaje Todas estas búsquedas me llevaron a encontrar Sylius. Lo que hasta ahora es el proyecto de tienda online basado en Symfony que me ha parecido más interesante. A fecha en que escribo está en fase de desarrollo aunque hay quien ya lo está utilizando. Aquí el repositorio público de la aplicación web:https://github.com/Sylius/Sylius Página principal del proyecto:http://sylius.org/ Se trata de un proyecto Open Source, licenciado bajo la MIT license. Esto nos permite usar Sylius para cualquier proyecto, libremente sin coste de compra ninguno. Lo único que no se pude hacer es decir que Sylius lo hemos hecho nosotros, como es lógico. Se puede adaptar, modificar, ampliar, etc.. Cualquier cosa se puede hacer […]

Cómo recuperar entrada al panel de control Joomla protegido con JSecure Lite

Este es un pequeño HOWTO para estos casos. Si tenemos un Joomla que hace tiempo que no visitamos y tenemos instalado el componente que cito, JSecure Lite, que protege la entrada directa al directorio /administrator/ podemos entonces recuperarlo de la siguiente forma. Esto funciona para la versión 2.5 por lo menos. Teniendo acceso por FTP al servidor vamos al directorio: ../administrator/components/com_jsecurelite/Y abrimos el archivo params.phpEn este archivo tenemos que ver una linea como la siguiente: public $publish = ‘1’; .. que la sustituimos por:public $publish = ‘0’; Con esto lo que hemos hecho es desactivar el componente lo que hace que no haga falta poner la clave. Ahora ya podremos entrara al sitio con la URL: http://nombredeldominio.com/administrator/ Cuando lo vuelvas a activar no olvides que la clave se pone de la forma siguiente: http://nombredeldominio.com/administrator/?clave Esto es todo, un saludo.

Atom Editor, ¡brutalmente sencillo y potente!

Hola de nuevo, ya estoy trasteando con un nuevo editor de código fuente que hace poco ya alcanzó la versión de producción 1 y está en el momento en que escribo en la versión 1.0.7. Estoy hablando del Atom Editor, un editor de códigos fuentes ligero, rápido, con todo tipo de plugins.. como dicen en su web: un editor hackeable del siglo 21. Es sencillo a más no poder, pero a la vez se puede mejorar instalando paquetes y pieles, que lo convierten en una potente herramienta. Como punto de entrada me sorprendió no recuerdo donde que leí que estaba hecho en HTML, CSS y Javascript. Ya sólo esto me sorprendió así que hace un par de meses decidí instalarlo y probarlo. No probé demasiado bien, pero ahora que ya ha alcanzado cierta madurez lo he probado bien durante una semana y estos son los resultados. Características Al estilo Sublime Text o tipo Eclipse con un estilo ‘dark’ resulta agradable ya la primera impresión. Tus ojos descansan con colores suaves mientras lees los códigos. Como es un proyectos de Github, trae integrada la detección de cambios Git del repositorio que estés viendo. Rápido como él sólo, arranca bien, abre las […]

Me preocupa el despliegue contínuo, fijando versiones en composer.json (editado)

¿Qué pasa si tienes un proyecto con librerías gestionadas con #Composer y le has puesto muchas de ellas que se actualicen a la última versión disponible? Para mantener el programa actualizado, beneficiándote de las últimas mejoras de cada librería, era una buena solución. Poner todo a la versión ‘dev-master’. Jeje, todo va bien mientras estás desarrollando.. De vez en cuando alguna función ‘deprecated’ deja de existir porque definitivamente la eliminaron. Nuevas funciones o propiedades que podemos usar. La aplicación funciona cada vez mejor pero sabes que no hay otra que fijar las versiones si no cuando pasemos a producción es un riesgo que se actualice automáticamente y zas! dejó de funcionar. Así que hay que buscar la versión que tenemos instalada de cada paquete y fijarlas. Puede que tengamos un composer.json parecido a éste, con muchos ~ * @dev dev-master >= etcétera: “requiere” : { “php” : “>=5.3.3”, “symfony/symfony” : “2.5.*”, “doctrine/orm” : “~2.2,>=2.2.3”, “doctrine/doctrine-bundle” : “~1.2”, “twig/extensions” : “~1.0”, “symfony/assetic-bundle” : “~2.3”, “symfony/swiftmailer-bundle” : “~2.3”, “symfony/monolog-bundle” : “~2.4”, “sensio/distribution-bundle” : “~3.0”, “sensio/framework-extra-bundle” : “~3.0”, “incenteev/composer-parameter-handler” : “~2.0”, “sensio/generator-bundle” : “~2.3”, “mopa/bootstrap-bundle” : “dev-master”, “twbs/bootstrap” : “dev-master”, “knplabs/knp-paginator-bundle” : “dev-master”, “knplabs/knp-menu-bundle” : “dev-master”, “knplabs/knp-menu” : “2.0.*@dev”, “craue/formflow-bundle” : “dev-master”, “friendsofsymfony/user-bundle” […]

Hola mundo Silex usando Composer

Estoy ahora curioseando los entresijos de PHP. Viendo hacia dónde tiende la programación en la web. Añadiendo herramientas, librerías de programación para mis proyectos. Dentro del mundo de la programación, elegir librerías, actualizarlas, combinarlas.. todo esto lleva trabajo y en los últimos años están apareciendo herramientas que nos facilitan la vida. Pongámonos en situación Cuando empezamos a programar con PHP. Desde el inicio hasta hace pocos años, que casi todo se hacía a pelo. PHP puro y duro, añadiendo código y más código. Los programas iban creciendo y creciendo. Se iban añadiendo manualmente librerías para todo tipo de tareas. Ahora ya no tenemos que reinventar la rueda. Estan surgiendo librerías públicas como por ejemplo  Packagist, donde se recopilan códigos para hacer todo tipo de tareas con PHP. Para manejo de Packagist tenemos una herramienta llamada Composer, con la que una vez configurado lo que vamos a necesitar Composer se encarga de conectar a Packagist y descargar los ficheros que haga falta. Para la programación front-end tenemos herramientas como Bower, similar a Composer, pero pensado para gestionar librerías Javascript/CSS. Estas herramientas, una vez configuradas, nos descargarán los ficheros a nuestro directorio de trabajo y listo. Ya tendremos nuestro proyecto para programar, […]

Composer, gestor de librerías PHP

Instalar globalmente Composer en Ubuntu

Este post va a ser bien corto. Se trata de cómo instalar el ejecutable de Composer en un directorio de Linux que está en la variable PATH del sistema. Los directorios que están en PATH son los directorios en donde se busca el programa cuando queremos ejecutar algo en Linux. Podemos escribir lo siguiente en línea de comandos y veremos cuáles tenemos ahora mismo: echo $PATH Tendremos separados por : todos los directorios actuales. Vamos entonces a añadir en uno nuestro ejecutable de Composer, que se trata de un phar. Un fichero .phar es un programa PHP empaquetado dentro de un sólo archivo. Vamos entonces.. Descargar la última versión de composer Si tenemos instalado curl podemos ejecutar lo siguiente en línea de comandos: curl -sS https://getcomposer.org/installer | php Si sólo tenemos instalado PHP ejecutamos lo siguiente: php -r “readfile(‘https://getcomposer.org/installer’);” | php Entonces debemos tener en el directorio en que estamos un fichero llamado composer.phar que podríamos usar con ‘php composer.phar …’. Pero queremos ir un paso más allá. Pudiendo ejecutarlo desde cualquier directorio, ¿recuerdas? Instalamos en el sistema en PATH Ejecutamos los siguientes comandos y ya lo tendremos instalado globalmente. sudo mv composer.phar /usr/local/bin/composer sudo chown root:root /usr/local/bin/composer sudo chmod […]

Objetos relacionados

PHP 8: Creando objetos a partir de otros, herencia simple

Estoy con algo más de tiempo, así que jugando un poco más con la programación orientada a objetos, les escribo ahora sobre cómo crear objetos a partir de otros de la forma más simple. Hay tres formas de crear objetos a partir de otros objetos: mediante extends, con clases abstract, y con interface. Todo éste proceso es lo que se llama herencia, donde los objetos hijos no heredan casas ni coches ni grandes fortunas xD, si no que en éste caso heredan funciones y variables. Empezando con la herencia simple Vamos a suponer lo siguiente. Queremos usar en nuestro programa la información de ciertos vehículos, y dichos vehículos pueden ser motos, coches y camiones. Usando la palabra reservada extends vamos a ver con un ejemplo lo sencillo que es el siguiente: <?php // clase base class vehiculo { public $matricula; } // clases que extienden la clase base class moto extends vehiculo { public $velocidadMaxima; } class coche extends vehiculo { public $tipo; } class camion extends vehiculo { public $numeroRuedas; } // creamos 3 vehiculos $micoche = new coche(); $mimoto = new moto(); $micamion = new camion(); // tanto la moto como el coche y el camión tienen matrícula […]

Objetos relacionados

PHP 7: Empezando con clases y objetos

A partir de ahora vamos a entrar en la programación orientada a objetos, POO para los amigos. En las técnicas de programación utilizar objetos es básico para poder hacer programas bien estructurados que se puedan reutilizar o  modificar. En programación, una clase es un objeto, y un objeto es una clase. Éstas clases de PHP tienen unas variables y unos métodos o funciones. Dicho ésto vamos al grano. Una primera clase básica A continuación tenemos un objeto, que es una clase de PHP. Éste objeto representa un avión que está en unas coordenadas, tiene un tipo de motor, cierta matrícula, y está en un estado determinado. Por ejemplo: <?php // se declara el objeto class Avion { // variables public $x, $y, $z; private $tipoMotor; public $matricula; private $estado; // a partir de aquí estan las funciones // constructor de la clase function __construct() { $this->x = $this->y = $this->z = 0; $this->tipoMotor = 1; $this->matricula = “No definida”; $this->estado = “No definido”; } public function getTipo() { switch ($tipoMotor) { case 1: $descripcion = “Hélices”; break; case 2: $descripcion = “Propulsión a chorro”; break; default: $descripcion = “Tipo no encontrado”; } return $descripcion; } public function getEstado() { return […]