Es una duda general.. Yo generalmente desarrollo a medida en Rails y tampoco estoy muy puesto en CMS tipo Wordpress, Prestashop, Joomla, etc etc. Pero me gustaria saber como resolveis el problema cuando se os presenta..
El problema es:
"Cuando te viene un cliente con la peticion de que implementeis algo que no se adapta al CMS en el que lo quiere, que haceis?"
Poniendo un ejemplo inventado y a groso modo, imaginaros que el cliente tiene algo montado en Prestashop, y por cada categoria de productos prestashop permite poner una unica imagen de categoria. El cliente os dice 'Quiero que la foto de la categoria aparezca un slider de fotos de la categoria en lugar de unica foto'. En prestashop llegais al panel de administracion (backend) y solo esta preparado para meter una unica foto en cada categoria (en lugar de múltiples para el slider). Ouch! Y ahora que hacemos??
Nunca he sido muy partidario de los CMS en PHP por su falta de flexibilidad en estos casos, pero no se, lo mismo vosotros teneis alguna receta magica..
Yo te cuento mi experiencia en WordPress que es de lo que tengo experiencia. Imagino que Joomla o Prestashop serán similares.
Para solucionarlas a veces puedes instalar un plugin, adaptarlo tú o crear uno desde cero.
Hay plugins para prácticamente todo lo que se te pueda ocurrir y el sistema de WordPress está muy orientado a que se puedan añadir multitud de funcionalidades.
Todo el "lifecicle" de una página está trackeado, el sistema de hooks que han comentado más arriba. Algo similar a los eventos.
Puedes suscribir funciones a esos hooks que se ejecutarán en el momento determinado del lifecicle de la página. Al mostrar la cabecera, al hacer la query a la BBDD, al inicializar el sistema.
Puedes recoger los datos que se van a utilizar en un momento del lifecicle manipularlos antes de que entren y devolverlos.
Los plugins que añaden funcionalidades extra hacen esto.
Y el sistema es tremendamente flexible, al menos en WordPress.
Hay algunos "frameworks" como Genesis que reescriben todo el sistema de hooks por otros más "eficientes".
Para convertirlo en CMS además hay plugins bastante potentes que permiten generar nuevos tipos de contenidos o añadir más campos a tipos de contenido normales. Como es el caso de POD's.
Alguna vez me ha tocado añadir funcionalidades que no existían en WordPress ni en ningún plugin, para eso, lo que te queda es programarte un plugin que tendrá tu funcionalidad.
Imagina que programas un plugin que envía un pdf generado al vuelo con datos de una BBDD, esta lógica la has "enganchado" al hook del envío de email bajo ciertas condiciones.
En WordPress además puedes sobreescribir toda la funcionalidad de una página, que es otro de los usos interesante. Es decir; puedes programar un pequeño framework de apoyo para que ciertos tipos de datos se lean y se pinten con tu motor. Pero seguir usando el estor de contenido para dar de alta contenidos.
Por último destacar también que el sistema de WordPress de pintado de páginas es tan flexible que te permitiría usarlo por ejemplo como origen de datos de una API REST volcando la salidas a formatos JSON o XML.
Yo he hecho un montón de adaptaciones raras a WordPress, si tienes dudas sobre cómo se haría algo en WordPress pregúntame.
Se agradecen las respuestas a todos. Y otra preguntilla mas si no es molestia.. El backend de administracion de wordpress (por ejemplo) se puede modificar tambien de alguna forma si tocar el 'core'? O la administracion seria siempre a traves de nuestros modulos/plugins personalizados? (Si pudiera hacer esto ya si que estaria muy bien, aunq es por rizar el rizo en plan tiquismiquis, lo se)
Sí claro. Tienes un montón de hooks en backend de administración para añadir funcionalidades a tus páginas.
También puedes añadir campos a los tipos de contenido, por ejemplo; un campo "archivo adjunto a una entrada de un post"
Crear nuevos tipos de contenido con los campos que necesites, por ejemplo; Tipo de contenido libro con campos título, resumen, imagen de la portada y autor. Estos tipos de contenido Tendrán sus páginas de listado y edición automáticamente
Puedes crear páginas personalizadas de opciones, por ejemplo; Tienes una funcionalidad de añadir pdfs y quieres definir la ruta en la que se almacenarían los archivos en una variable guardada a su vez en un campo de una tabla.
Puedes añadir más campos a las páginas que hay de opciones o campos a los perfiles de usuarios.
Vale, doy mis posibles opciones:
- Decir al cliente que no se pueden hacer 'cosas raras' en un cms y quitarte el rollo. Si quiere hacer eso seria conveniente una web a medida.
- Pringarte bastante en adaptar el codigo oficial del CMS y cambiar las tablas en la base de datos. Esto llevaria bastante trabajo. Habra problemas cuando se haga la actualizacion a una version superior? Yo imagino que si.
- Tratar de hacer un apaño usando javascript. Que suba las imagenes como links a la descripcion de producto (o como buenamente se pueda) y por javascript modificar la pagina con esos datos..
Imagino que el CMS esté hecho con PHP, Ruby, COBOL o Ensablador dará igual, ¿no? ;) La flexibilidad no la da el lenguaje con el que esté programado, sino la arquitectura del software si es ampliable o no, por ejemplo si se ha preparado para tener plugins.
Como dice Iván, mal veo modificar el core de un CMS para adaptarlo a las necesidades concretas de un cliente, no lo vas a poder actualizar a menor que vuelvas a realizar las modificaciones de nuevo en cada versión. Mejor ver si se dispone de callbacks, de algún mecanismo básico de plugins.
Con WordPress si que se pueden hacer muchas cosas debido a su arquitectura ampliable, ahora mucho más que hace unos años. Tienen su API, mucha documentación y ejemplos. Y está hecho con PHP ;)
Con Joomla! algo he hecho, pero poco. Y de los demás (Prestashop, Magento, osCommerce) nada te puedo decir.
La mayoría de los CMS se pueden extender mediante plugins o modulos.
Tanto Drupal, como Wordpress, Prestashop o Magento implementan un sistema de hooks que permite modificar o añadir funcionalidades sin (por supuesto) tener que tocar el core (¡eso nunca!).
También tienes gran cantidad de plugins y modulos ya creados (gratis y de pago):
Wordpress: https://wordpress.org/plugins/
Prestashop: http://addons.prestashop.com/es/2-modulos
Magento: http://www.magentocommerce.com/magento-connect/
El si merece la pena usar un CMS y extenderlo o hacer un desarrollo a medida ya es decisión de cada uno :).
Tal y como se ha comentado ya una de las soluciones es tirar de herramientas externas (plugins) que cubren muchas funcionalidades que por defecto no aportan estos CMS.
A partir de ahí si estas herramientas no cubren tus necesidades, no queda otra que desarrollarlo a medida.
A nosotros en nuestra página de Carcasas personalizadas (http://www.camalefon.com) nos han desarrollado un plugin para poder integrar Wordpress con Symfony, pero lógicamente tiene sus horas de desarrollo y su correspondiente coste.
Con lo cual, te recomendamos nuevamente que investigues la existencia de algún plugin que te aporte la funcionalidad que necesitas, que seguramente lo encontrarás.
El problema es:
"Cuando te viene un cliente con la peticion de que implementeis algo que no se adapta al CMS en el que lo quiere, que haceis?"
Poniendo un ejemplo inventado y a groso modo, imaginaros que el cliente tiene algo montado en Prestashop, y por cada categoria de productos prestashop permite poner una unica imagen de categoria. El cliente os dice 'Quiero que la foto de la categoria aparezca un slider de fotos de la categoria en lugar de unica foto'. En prestashop llegais al panel de administracion (backend) y solo esta preparado para meter una unica foto en cada categoria (en lugar de múltiples para el slider). Ouch! Y ahora que hacemos??
Nunca he sido muy partidario de los CMS en PHP por su falta de flexibilidad en estos casos, pero no se, lo mismo vosotros teneis alguna receta magica..
13/02/2015 21:33
Para solucionarlas a veces puedes instalar un plugin, adaptarlo tú o crear uno desde cero.
Hay plugins para prácticamente todo lo que se te pueda ocurrir y el sistema de WordPress está muy orientado a que se puedan añadir multitud de funcionalidades.
Todo el "lifecicle" de una página está trackeado, el sistema de hooks que han comentado más arriba. Algo similar a los eventos.
Puedes suscribir funciones a esos hooks que se ejecutarán en el momento determinado del lifecicle de la página. Al mostrar la cabecera, al hacer la query a la BBDD, al inicializar el sistema.
Puedes recoger los datos que se van a utilizar en un momento del lifecicle manipularlos antes de que entren y devolverlos.
Los plugins que añaden funcionalidades extra hacen esto.
Y el sistema es tremendamente flexible, al menos en WordPress.
Hay algunos "frameworks" como Genesis que reescriben todo el sistema de hooks por otros más "eficientes".
Para convertirlo en CMS además hay plugins bastante potentes que permiten generar nuevos tipos de contenidos o añadir más campos a tipos de contenido normales. Como es el caso de POD's.
Alguna vez me ha tocado añadir funcionalidades que no existían en WordPress ni en ningún plugin, para eso, lo que te queda es programarte un plugin que tendrá tu funcionalidad.
Imagina que programas un plugin que envía un pdf generado al vuelo con datos de una BBDD, esta lógica la has "enganchado" al hook del envío de email bajo ciertas condiciones.
En WordPress además puedes sobreescribir toda la funcionalidad de una página, que es otro de los usos interesante. Es decir; puedes programar un pequeño framework de apoyo para que ciertos tipos de datos se lean y se pinten con tu motor. Pero seguir usando el estor de contenido para dar de alta contenidos.
Por último destacar también que el sistema de WordPress de pintado de páginas es tan flexible que te permitiría usarlo por ejemplo como origen de datos de una API REST volcando la salidas a formatos JSON o XML.
Yo he hecho un montón de adaptaciones raras a WordPress, si tienes dudas sobre cómo se haría algo en WordPress pregúntame.
13/02/2015 22:05
14/02/2015 20:00
También puedes añadir campos a los tipos de contenido, por ejemplo; un campo "archivo adjunto a una entrada de un post"
Crear nuevos tipos de contenido con los campos que necesites, por ejemplo; Tipo de contenido libro con campos título, resumen, imagen de la portada y autor. Estos tipos de contenido Tendrán sus páginas de listado y edición automáticamente
Puedes crear páginas personalizadas de opciones, por ejemplo; Tienes una funcionalidad de añadir pdfs y quieres definir la ruta en la que se almacenarían los archivos en una variable guardada a su vez en un campo de una tabla.
Puedes añadir más campos a las páginas que hay de opciones o campos a los perfiles de usuarios.
El core no lo he tenido yo que tocar nunca.
12/02/2015 13:28
- Decir al cliente que no se pueden hacer 'cosas raras' en un cms y quitarte el rollo. Si quiere hacer eso seria conveniente una web a medida.
- Pringarte bastante en adaptar el codigo oficial del CMS y cambiar las tablas en la base de datos. Esto llevaria bastante trabajo. Habra problemas cuando se haga la actualizacion a una version superior? Yo imagino que si.
- Tratar de hacer un apaño usando javascript. Que suba las imagenes como links a la descripcion de producto (o como buenamente se pueda) y por javascript modificar la pagina con esos datos..
12/02/2015 16:37
Como dice Iván, mal veo modificar el core de un CMS para adaptarlo a las necesidades concretas de un cliente, no lo vas a poder actualizar a menor que vuelvas a realizar las modificaciones de nuevo en cada versión. Mejor ver si se dispone de callbacks, de algún mecanismo básico de plugins.
Con WordPress si que se pueden hacer muchas cosas debido a su arquitectura ampliable, ahora mucho más que hace unos años. Tienen su API, mucha documentación y ejemplos. Y está hecho con PHP ;)
Con Joomla! algo he hecho, pero poco. Y de los demás (Prestashop, Magento, osCommerce) nada te puedo decir.
13/02/2015 13:38
Tanto Drupal, como Wordpress, Prestashop o Magento implementan un sistema de hooks que permite modificar o añadir funcionalidades sin (por supuesto) tener que tocar el core (¡eso nunca!).
También tienes gran cantidad de plugins y modulos ya creados (gratis y de pago):
Wordpress: https://wordpress.org/plugins/
Prestashop: http://addons.prestashop.com/es/2-modulos
Magento: http://www.magentocommerce.com/magento-connect/
El si merece la pena usar un CMS y extenderlo o hacer un desarrollo a medida ya es decisión de cada uno :).
Espero que este pequeño resumen te sirva.
Saludos
24/03/2015 14:42
Tal y como se ha comentado ya una de las soluciones es tirar de herramientas externas (plugins) que cubren muchas funcionalidades que por defecto no aportan estos CMS.
A partir de ahí si estas herramientas no cubren tus necesidades, no queda otra que desarrollarlo a medida.
A nosotros en nuestra página de Carcasas personalizadas (http://www.camalefon.com) nos han desarrollado un plugin para poder integrar Wordpress con Symfony, pero lógicamente tiene sus horas de desarrollo y su correspondiente coste.
Con lo cual, te recomendamos nuevamente que investigues la existencia de algún plugin que te aporte la funcionalidad que necesitas, que seguramente lo encontrarás.
Un saludo y gracias!