Après si tu veux pas t'embeter vu qu'en ce moment je code plein de truc avec, je me suis fait un "squelette" pour m'aider à générer des sites rapidements
Ainsi lorsque ton utilisateur va sur une URL qui commence par /url-qui-va-bien, cela passe la main à sous application, qui recupere le morceau d'url qui suit (note: il est tout à fait possible de définir d'autre type de regexp, là c'est juste mon choix personnel)
Ensuite dans SousApplication cela se passe comme ça
Cela dit que lorsqu'un utilisateur va sur /url-qui-va-bien/sous-url/bonjour
1 - on appelle SousApplication avec "/sous-url"
2- cela va appeler "methode_qui_va_bien" avec un parametre "bonjour"
Maintenant la méthode
voidSousApplication::methode_qui_va_bien(std::stringmessage){// en admettant qu'on l'ai mis quelque chose avantstd::stringusername=session()["name"];// classe dérivant de Content à définir autre partMonContentc;c.message=message;c.username=username;render("vue_qui_va_bien",c);}
En gros le but va d'etre de remplir un Content (donc évidemment après on le remplit comme on veut, appelle à une bdd etc.) qui sera ensuite passé à une vue
Et là je vois les ruby-on-railistes et les phpistes et autres djangoistes me dire "Bon t'es bien gentil mais nous on veut voir comment on genere le html, en c++ ça doit etre drole, allez fait nous rire avec ton langage bas niveau"
Et Non c'est là toute la magie de cppcms, il utilise aussi des templates
donc ma vue n'est en fait rien d'autre que cela
<% c++ #include "contents/MonContent.h" %>
<% skin %>
<% view vue_qui_va_bien uses MonContent extends master %>
<% template title() %><% gt "Tout va bien %><% end template %>
<% template body() %>
<%= message %>
<%= username %>
<% end template %>
<% end view %>
<% end skin %>
et le "Master" qui va bien
<% c++ #include "contents/content.h" %>
<% skin %>
<% view master uses contents::BaseContent %>
<% template render() %>
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<% include header() %>
</head>
<body>
<% include body() %>
</body>
</html>
<% end template %>
<% template title() %>TODO: replace this<% end template %>
<% template header() %>
<title><% include title() %></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<% include css() %>
<% end template %>
<% template css() %>
<% end template %>
Celui là il suffit de l'écrire une fois et après redéfinir dans les autres vues, les fonctions que l'on veut "override"
après cppcms offre un outil qui convertira ces templates en code C++ (c'est à préciser dans le makefile, mais il suffit de pomper celui donner dans les exemples, rien de magique)
Après il est possible soit de le lancer derrière un Apache/nginx/lighttps (meme I2S) avec fast-cgi ou sinon il vient également avec son mini serveur http standalone (le binaire généré prend un fichier de configuration en paramètre, écrit en json, qui permet de préciser, entre autre, fast-cgi ou standalone)
Enfin pour me simplifier la vie, avec cppcms-skeleton je fais simplement un git clone
je remplis les options qui vont bien dans 'tootls/config.y'
je lance un "init.py"
et après pour ajouter une nouvelle sous application "./addController.py SousApplication"
pour ajouter une nouvelle méthode/content/vue associé "./addMethod.py SousApplication bonjour"
le code généré compile, après il suffit juste de remplir le code.
# Un framework en C++ qui l'est bien : CppCMS
Posté par Allan Simon . En réponse au message Développer des interfaces "web". Évalué à 2.
Comme son nom ne l'indique pas, ce n'est pas un CMS
http://cppcms.com/wikipp/en/page/main hop les liens qui vont bien
Après si tu veux pas t'embeter vu qu'en ce moment je code plein de truc avec, je me suis fait un "squelette" pour m'aider à générer des sites rapidements
https://github.com/sysko/cppcms-skeleton
et si tu veux un exemple
https://github.com/sysko/Tatodetect
J'écrirais surement à journal dessus, car il ne me semble pas avoir vu des gens en parler ici
Comme cela fait beaucoup de code à digérer grosso modo:
En gros il a une classe principale "Application" sur lequel on branche des "sous applications" comme suit
Ainsi lorsque ton utilisateur va sur une URL qui commence par /url-qui-va-bien, cela passe la main à sous application, qui recupere le morceau d'url qui suit (note: il est tout à fait possible de définir d'autre type de regexp, là c'est juste mon choix personnel)
Ensuite dans SousApplication cela se passe comme ça
Cela dit que lorsqu'un utilisateur va sur /url-qui-va-bien/sous-url/bonjour
1 - on appelle SousApplication avec "/sous-url"
2- cela va appeler "methode_qui_va_bien" avec un parametre "bonjour"
Maintenant la méthode
En gros le but va d'etre de remplir un Content (donc évidemment après on le remplit comme on veut, appelle à une bdd etc.) qui sera ensuite passé à une vue
Et là je vois les ruby-on-railistes et les phpistes et autres djangoistes me dire "Bon t'es bien gentil mais nous on veut voir comment on genere le html, en c++ ça doit etre drole, allez fait nous rire avec ton langage bas niveau"
Et Non c'est là toute la magie de cppcms, il utilise aussi des templates
donc ma vue n'est en fait rien d'autre que cela
et le "Master" qui va bien
Celui là il suffit de l'écrire une fois et après redéfinir dans les autres vues, les fonctions que l'on veut "override"
après cppcms offre un outil qui convertira ces templates en code C++ (c'est à préciser dans le makefile, mais il suffit de pomper celui donner dans les exemples, rien de magique)
Après il est possible soit de le lancer derrière un Apache/nginx/lighttps (meme I2S) avec fast-cgi ou sinon il vient également avec son mini serveur http standalone (le binaire généré prend un fichier de configuration en paramètre, écrit en json, qui permet de préciser, entre autre, fast-cgi ou standalone)
Enfin pour me simplifier la vie, avec cppcms-skeleton je fais simplement un git clone
je remplis les options qui vont bien dans 'tootls/config.y'
je lance un "init.py"
et après pour ajouter une nouvelle sous application "./addController.py SousApplication"
pour ajouter une nouvelle méthode/content/vue associé "./addMethod.py SousApplication bonjour"
le code généré compile, après il suffit juste de remplir le code.