CMS

Nos enfocaremos en los CMS más populares programados en PHP, como Joomla, Wordpress, Drupal y Prestashop, que utilizan HTML, CSS, JavaScript y PHP con alguna otras bibliotecas.
Si buscas un programador de cms te puedo ayudar esta entrada.
Lo primero que es saber que no se tiene instalar absolutamente ningún plugin y componente, es simplemente un override de la plantilla de virtuemart de orders en los ficheros:
- html/com_virtuemart/orders/detail.php
- html/com_virtuemart/orders/details_item.php
En fichero de detail añadimos:
<input type="hidden" name="task" value="add"/>
<input type="hidden" name="option" value="com_virtuemart">
<input type="hidden" name="view" value="cart">
<input type="hidden" name="Itemid" value="101">
</form>
En fichero de details_items.php añadimos esta input ocultos:
<input type="hidden" name="virtuemart_product_id[]" value="<?php echo $item->virtuemart_product_id; ?>">
<input type="hidden" name="quantity[]" value="<?php echo $qtt; ?>">
Akkeba Backup para wordpress, pienso que es la mejor opción por lo que he probado hasta ahora.
Hace tiempo provee este otro plugin muy conocido en la comunidad wordpress que es All in One migration , un cliente me paso una copia de su web (815MB) para hacer unos cambios, la copia la realizo el cliente con ese plugin.
Entonces yo tuve que instalar un wordpress con ese plugin para poder importar el fichero que me paso, la información la encontré en esta web que lo tiene muy bien explicado.
En el momento de realizarlo me surgieron una serie dudas y problemas.
1.- Si la version que me pasa el cliente es mucho inferior a la que instale, que sucede ...
2.- Al ser una web tan pesada tuve cambiar php.ini de mi servidor.
Una vez terminada, el usuario que haya creado en la instalación del wordpress pelado creo que dejará funcionar una vez hagas importacion y tendrás que utilizar el usuario de la copia que importaste.
Problemas con la url en servidor local.
Wordpress tiene un sistema de reescribir url que ne local siempre me da muchos problemas.
Lo que hice fue activar el mod_rewrite de apache en mi Debian, tal como dice en esta pagina de digitalocean
Me surge una duda en la "Paso 2: configuración de .htaccess" a la hora modificar el fichero de configuracion, ya mi servidor apache local está multisite y tengo varios ficheros de configuracion y entonces el que creo que debo utilizar me aparece lo siguiente:
< VirtualHost _default_:80 >
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /home/miusuario/www
ServerName miusuario.midominio.es
ServerAlias 192.168.4.3 localhost homer
< Directory / >
Options FollowSymLinks
AllowOverride None
< /Directory >
< Directory /home/miusuario/www/ >
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Require all granted
< /Directory >
< Directory /home/miusuario/www/Clientes/Micliente/worpress/ >
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
< / Directory >
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/miusuario_error.log
CustomLog ${APACHE_LOG_DIR}/miusuario_access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
< / VirtualHost >
La cuestion es que puse jugar un poco y me dio un error el wordpress con una pagina en blanco, lo explica muy bien en siguiente link. En ella nos dice que puede ser del ficheto htaccess y muchas mas opciones.
Me parece interesante lo que habla configuracion para dectetar errores.
Bueno, la cuestion es que encontre esta web donde lo explica un poco bien,
La idea es crear un repositorio espejo en GitHub del repositorio OFICIAL DE VIRTUEMART que esta Subversion.Esto surge despues de ver y preguntar en este hilo del foro de Virtuemart. Nunca trabaje con SVN, soy de GIT. :-)
Lo primero que hacemos es bajarnos el repositorio SVN en local con:
git svn clone https://dev.virtuemart.net/svn/virtuemart
Esta ruta la sacamos de https://docs.virtuemart.net/tutorials/development/100-svn-download.html
Tiene que tene instalado el paquete git-svn, si no tuvieras
sudo apt install git-svn
Entonces empieza descargar todo el repositorio y todo su historial, en este caso tarda bastante ya que es muy grande, lleva muchos años el repositorio.
Una vez terminado, una de la primeras preguntas que me hago es, donde tiene guarda la ruta del SVN que clono, ya que con "git remote" no aparece nada.
Buscando informacion en "git svn --help", encuentro:
▶ git svn info Path: . URL: https://dev.virtuemart.net/svn/virtuemart/trunk/virtuemart Repository Root: https://dev.virtuemart.net/svn/virtuemart Repository UUID: 87cc427b-4a1e-0410-b729-b2260ec0f063 Revision: 10338 Node Kind: directory Schedule: normal Last Changed Author: Milbo Last Changed Rev: 10338 Last Changed Date: 2020-07-06 11:18:18 +0200 (lun, 06 jul 2020)
Con esto es suficiente por ahora.
Creo una rama llamada svn, para tener todo igual en esa rama.
Para poder sincronizar con svn de forma manual, al tener añadir en config el svn-repo simplemente tiene que ejecutar:
git svn fetch
Ahora solo queda hacer un rebase para actualice. Yo lo hago en la rama svn que tengo creada.
git svn rebase
Luego solo te queda actualizar en git tus ramas... jejej
Con :
- Php 7.2
- Joomla 3.9.21
- Virtuemar 3.8.4 10335
me da un error al intentar cambiar el estado de algunos pedidos.
[Sun Aug 30 20:08:50.604004 2020] [php7:warn] [pid 6369] [client ::1:43724] PHP Warning: strtoupper() expects parameter 1 to be string, object given in /www/Clientes/superoliva/web/libraries/src/Language/Language.php on line 314, referer: http://localhost/Clientes/superoliva/web/administrator/index.php?option=com_virtuemart&view=orders
[Sun Aug 30 20:08:50.604083 2020] [php7:warn] [pid 6369] [client ::1:43724] PHP Warning: strpos() expects parameter 1 to be string, object given in /www/Clientes/superoliva/web/libraries/src/Language/Language.php on line 361, referer: http://localhost/Clientes/superoliva/web/administrator/index.php?option=com_virtuemart&view=orders
[Sun Aug 30 20:08:50.604106 2020] [php7:error] [pid 6369] [client ::1:43724] PHP Recoverable fatal error: Object of class stdClass could not be converted to string in /www/Clientes/superoliva/web/libraries/src/Language/Language.php on line 364, referer: http://localhost/Clientes/superoliva/web/administrator/index.php?option=com_virtuemart&view=orders
El problema creo que solo surge en los pedido que tiene un estado creado por nosotros. ( lo texteare mas)
Buscamos cual puede ser la causa y es el fichero administrator/components/com_virtuemart/models/orderstatus.php
Donde veo con la ultima actualizacion de virtuemart cambiaron esto:

Si dejo la version en rojo (la anterior) , funciona perfectamente.
Bueno, creare un tema en foro de virtuemart, a ver que me comentas.
Bueno como dice el titulo NO voy escribir (otro más) sobre como migrar (hay quien le llama actualizar) joomla 2.5 a 3, ya que hay internet mucho que lo han hecho y muy bien.
Lo único quiero aclarar es dos cosas:
1.- El php 5.6 es valido hasta un versión de 3.5.1 (creo recordar) a partir ahí tiene que cambiar de versión de PHP
2.- Cuando habla de limpiar cache no se refiere cual de los dos sitios que hay en Joomla, nosotros tuvimos que limpiar cache en las dos opciones posibles para actualiza a versiones superiores 3.5.1
Uno en sistema

Y el otro en "Gestor de extensiones" que hay purgar cache de extensiones.

Este ultimo me trajo por el camino de la amargura en varias migraciones que no funcionaba correctamente.
El mundo de las plantillas en Joomla es impresionante, las plantillas son las encargadas de mostrar algo de una forma u otra. En Joomla tiene muy bien separado la parte visual de la operativa, tanto en parte front-end como en la administrativa, así es que podemos utilizar plantillas para la parte administrativa y front-end.
Saber que tiene mas importancia en nuestra web, si la plantilla o el componente, lleva años debatiendose entre cafes de desarrolladores, un ejemplo claro es esté debate abierto en Podcast de Mastermind Joomla:¿ Quién pinta en Joomla ?
:-) buenisímo
Hay un sinfín de sitios para descargar plantilla e incluso frameworks que son extensiones que nos confeccionan la plantilla de una forma más interactiva.
Algunos proveedores de plantillas y creadores frameworks:
- Theme de ThemeForest
- RocketTheme
- Joomlart
- Gantry framework
- Helix Ultimate de Joomshaper
- Wright v3 de Joomlashack
- JA T3 de joomlart
- Warp7 de Yootheme
- Meet Gavern de Gavick
Yo personalmente los frameworks de plantillas los descarto, ya que generan código innecesario y hacen la web a veces muy pesadas.
Estos seguro ya os paso alguna vez:
Te pones a buscar plantillas o framework y encuentras alguna interensante y que te gusta, luego la instalas, te pone hacer cambios y pruebas, pero al poco o mucho tiempo te das cuenta que no es exactamente lo que buscas y da mucho trabajo cambiar las cosas, la descartas.
La rueda vuelve a empezar. vuelves a buscar plantilla para ese proyecto web.
Nosotros ya dejamos esa rueda, por ello optamos por modificar plantillas básica y sencillas , que suelen ser la menos complejas de añadir o quitar funcionalidades, de realizar cambios para adaptarlas a nuestras necesidades.
Modificar una plantilla de Joomla
Modificar una plantilla Joomla suele ser una tarea bastante sencilla. Lo primero que debemos hacer es conocer a fondo todas las posibilidades que nos da esa plantilla, opciones y configuraciones, si estas no llegan entonces con un poco de conocimiento php, html y css, nos ponemos a cambiarla y asi la ponemos a nuestro gusto.
Si te va introducir en cambiar plantillas te recomiendo principalmente la lectura de los documentos oficiales de Joomla:
- Magazine Joomla - Como modificar una plantilla HTML/CSS
- Joomla Documentación - Modificar una plantilla de Joomla !
A veces la cosas mas sencillas parecen muy compleja
El cambiar un precio a virtuemart es muy sencillo, pero virtuemart no hace que sea de forma intuitivo.
Ejemplo de cambio de precio:
1.- Tenemos un producto con un precio determinado , en este caso un ZZ que cuesta 2.19€, precio con iva incluido.
Imaginaros queréis añadir un modulo a una extensión o componente de Joomla , pero no queréis y no debéis cambiar el código de ese componente, pues podéis hacerlo en vuestro override de la plantilla de ese componente/ extensión.
Por ejemplo nosotros queremos poner en un modulo en el formulario que trae componente contactos antes del botón de enviar ( añadir una clausula de privacidad, por ejemplo ). Pues hacemos los siguiente:
- Creamos un modulo tipo personalizado con el texto y le ponemos una posición única (nombre nuestra posición por ejemplo "clausula_contacto"), es decir que no se utilice en ninguna de la plantillas que tenemos instaladas.
- Añadimos el código en el override de ese componente en la plantilla que utilizas.
El ejemplo del código php para insertar en plantilla, sería:
En nuestro repositorio de GitHub puedes descargarte el mod_login_virtuemart, donde tiene la opción de cargar un menu, el que asignemos en la configuracion, este menu se muestra una vez no identificamos.
Es muy util, para mostrar en el mismo modulo cuando este registrado un menu exclusivo para los usuarios, la tipica Area privada.
Aparte tiene tres presentaciones:
- Enlaces: En la que solo muestra enlace Registro y mi cuenta.
- Vertical: Muestra formulario acceso vertical,un campo debajo del otro.
- Horizontal: Muestra formulario acceso horizontal, un campo al lado de otro.

Lee más…