Tout d'abord je profite de ce poste pour dire que je viens juste de m'inscrire sur le forum mais que j'y suis déjà venue de nombreuses fois afin de trouver des réponses à mes questions.
Donc bonjour à tous ! ^^

J'arrive donc avec une question de vulgarisation.
J'ai déjà posé ma question à des personnes de mon entourage qui s'y connaissent mais personne n'est arrivé à m'expliquer la chose précisément et aisément :

Qu'est-ce qu'un framework ? A quoi ça sert exactement ? Dans quel cas l'utiliser ? En quoi est-ce différent d'un cms ?

J'ai vraiment envie et besoin de comprendre donc svp répondez en mode "je suis pédagogue" Smiley ravi
Bonjour,

Un framework est une sorte de grosse bibliothèque (mais en fait, c'est plutôt un ensemble de bibliothèques) qui vont permettre de travailler plus vite.
Ce qui fait la différence entre un framework et une bibliothèque, c'est que le framework te fait travailler d'une certaine manière (structure du code) alors qu'une bibliothèque n'est qu'un ensemble de fonction faîtes pour te simplifier la vie.

Dans quel cas l'utiliser ? Je sais pas trop...

En quoi est-ce différent d'un CMS ? Pour moi, la question serait plutôt, quel est le lien avec un CMS ? Un framework t'aide à programmer, un CMS (Content Management System) est comme son nom l'indique un système de gestion de contenu. C'est pour gérer le contenu de ton site plus facilement (au lieu de faire une requête SQL à la main pour modifier le contenu d'un message...)

Wooouh, je suis pas sûr de tout ce que j'ai dit et je vais peut-être me faire taper dessus par les vrais pros...
Modifié par Gothor (26 Jul 2012 - 15:39)
Je vais essayer de faire simple.

Ce que l'on appel "framework" est issue du constat qu'en développement on se retrouve souvent à ré-écrire les mêmes bouts de code, les mêmes routines, à faire des copié-collés d'un ancien site à un nouveau...etc.

Des développeurs malins et organisés ont alors eu l'idée d'écrire ce que l'on appel une librairie. C'est à dire un ensemble de fonctions couramment utilisées et réutilisées, rassemblées dans un même fichier que l'on peut par la suite réutiliser sur chaque nouveau projet pour répondre à des besoins récurants.
Au fil du temps et des projets, ces librairies devenant de plus en plus imposantes, il a fallut les structurer. Parfois on y ajoute même des portions entières destinée à fonctionnement primaire du site (afficher une page web demandée) et à l'organisation du code dans la librairie elle même (MVC, autoinclude...).
On en est arrivé à ce que l'on appel aujourd'hui un Framework. Les plus connus étant Zend, Symfony ou Codeigniter (en un peu plus simple).

Ces frameworks constituent des bases de développement, apportant une structure d'organisation du code (généralement MVC) et des classes de fonctionnalités couvrant à peu près tous les cas d'usage.


Pour ce qui est des CMS, pour Content Managment System, il s'agit comme con nom l'indique d'un outil de gestion du contenu. Une interface utilisateur qui va permettre de créer, éditer ou supprimer des contenus de son site.
Wordpress, Joomla, ou Drupal font parti des plus connus.

Pour la majorité des CMS (pour ne pas dire la totalité), ils intègrent dans leur moteur un framework. Wordpress dispose par exemple de son propre framework (aussi appelé API). Mais ce framework va souvent être limité aux fonctionnalités proposées par le CMS et il sera plus ou moins laborieux d'ajouter ou modifier des fonctionnalités du CMS.
C'est là qu'il faut bien choisir son CMS en fonction du besoin pour ne pas se retrouver limité par les capacités des API embarquées. (Drupal étant réputé pour être l'un des CMS les plus évolutifs, mais relativement complèxe à prendre en main techniquement).

Les "vrai" framework comme Zend ou Symfony son globalement illimités en terme de possibilité. D'autant plus si l'on considère l'importance des communautés de développeurs qui gravitent autour de ces solutions. On peut donc développer une solution répondant exactement à ces besoin mais il faudra créer soit même l'interface utilisateur pour arriver à ce qu'offre un CMS "out of the box".

En espérant avoir été assez clair pour t'éclairer Smiley smile
moust a écrit :

Les plus connus étant Zend, Symfony ou Codeigniter (en un peu plus simple).


Je rajoute CakePHP qui également très connu.

moust a écrit :

Wordpress dispose par exemple de son propre framework (aussi appelé API).


Si on considère qu'un framework sert à imposer un style de développement et une architecture structurée, Wordpress et le seul CMS qui n'est pas basé sur un framework mais plutôt sur des bouts de machins récupérés à droite et a gauche sur le net et posés là un peu n'importe comment. Rien que la manière dont sont nommées les bibliothèques est à pleurer de rire (ou de désespoir si on est forcé de développer un site sous Wordpress). Sans parler (ah ben si j'en parle quand même) des mélanges PHP 4 et PHP 5, procédural et objet et du manque total de consistance (sauf si on considère qu'être inconsistant de A à Z est une forme de consistance).

moust a écrit :

On peut donc développer une solution répondant exactement à ces besoin mais il faudra créer soit même l'interface utilisateur pour arriver à ce qu'offre un CMS "out of the box".


Tu oublies de préciser que sur la plupart des frameworks tu disposes de collections de bundles prêt à l'emploi et qui font déjà ce que font tous les CMS. Donc pour ce genre de fonctionnalités, en général tu n'a rien à développer mais simplement installer un bundle CMS.
Modifié par jb_gfx (26 Jul 2012 - 16:59)
C'est vrai que Wordpress est le mauvais exemple pour parler de framework intégré. Mais c'était pour prendre un exemple connu pour illustrer le principe de librairie intégrée à un CMS. Smiley cligne

Effectivement les framework comme Symfony ou Zend proposent des bundles pour générer des modules de CRUD assez simplement, mais ça s'arrête là en comparaison à un CMS (qui demandera quand même également un temps de configuration avant d'être fonctionnel).
moust a écrit :
Effectivement les framework comme Symfony ou Zend proposent des bundles pour générer des modules de CRUD assez simplement, mais ça s'arrête là en comparaison à un CMS (qui demandera quand même également un temps de configuration avant d'être fonctionnel).


Non je parle de bundles ou de composants qui font directement offices de CMS (ou de plein d'autres trucs comme des forums, blogs, ecommerce, etc) et qui ont juste besoin d'être installés pour être utilisés.

CMS symfony 2 : http://knpbundles.com/symfony-cmf/SimpleCmsBundle
CMF symfony 2 : http://cmf.symfony.com/
CMS Laravel : http://bundles.laravel.com/bundle/pongocms

Comme les plugins pour jQuery si tu préfères.

Des milliers de bundles pour Symfony2 : http://knpbundles.com/
Idem pour Symfony 1.x : http://www.symfony-project.org/plugins/
Idem pour Laravel : http://bundles.laravel.com/
Modifié par jb_gfx (26 Jul 2012 - 17:32)
Merci d'avoir éclairé ma lanterne !
Je n'en espérais pas tant ! Smiley cligne
Modifié par mayaga (27 Jul 2012 - 09:41)
jb_gfx a écrit :
Non je parle de bundles ou de composants qui font directement offices de CMS (ou de plein d'autres trucs comme des forums, blogs, ecommerce, etc) et qui ont juste besoin d'être installés pour être utilisés.


Au temps pour mois. Je suis plus habitué à Symfony premier du nom qui n'intègre qu'un générateur de module CRUD. Il existe bien un module CMF (Sympal) venant se pluger dessus mais la dernière fois que j'ai regardé ce n'était pas encore très probant.

Enfin après c'est comme tout. Tout dépend du besoin et des fonctionnalités attendues Smiley smile