Publié par Lucie
Mar 28 août 2007 09:56:00 GMT
Toute l’équipe de Webpulser vous invite à assister à sa conférence le jeudi 27 septembre.
Au programme : Ruby on Rails ou les nombreux avantages que ce framework a apporté au développement de sites Internet.
Différents sujets seront abordés : historique et contexte actuel du marché de l’e-business, Ruby on Rails, d’un point de vue technique et enfin deux cas clients afin d’apporter des exemples concrets.
Rendez-vous à partir de 18h dans les locaux de Digiport (Euratechnologies).
Parcourez le détail de la conférence et inscrivez-vous
ici
Publié sous News | Mots clés conférence, on, Rails, Ruby | 1 commentaire
Publié par Lucie
Lun 27 août 2007 15:20:00 GMT
Webpulser is one more time standing out for its values by sponsoring the Railsconf Europe, which will take place in Berlin on september 17th, 18th and 19th.
This event dedicated to the framework Ruby on Rails, gives the opportunity to share and learn more about the framework and its uses.
Webpulser will be hosting an informational gathering on the last day. It will deal with Ruby on Rails and the advantages that this framework brought to the development of e-commerce applications.
Learn more on : Railsconf Europe
Publié sous News | Mots clés on, Rails, Railsconf, Ruby | aucun commentaires
Publié par Lucie
Lun 27 août 2007 15:00:00 GMT
Les Cafés Méo ont choisi Webpulser pour le développement fonctionnel et logique de leur nouveau site Méo-pro.fr.
Cette boutique en ligne, destinée aux entreprises et aux professionnels de la restauration a pour objectif de présenter, simplifier et développer ses ventes de machines à café ainsi que l’ensemble de ses produits dérivés.
Méo-Pro.fr sera réalisé en Ruby on Rails.
Notons que le choix du framework est en totale adéquation avec l’image des Cafés Méo : innovation et qualité.
La mise en ligne du site se fera courant septembre.
En attendant, vous pouvez visitez :
meo
Publié sous News | Mots clés méo, on, Rails, Ruby | aucun commentaires
Publié par Jonathan Demoutiez
Lun 27 août 2007 10:07:00 GMT
Ce framework nous offre une souplesse en terme d’utilisation et d’accès à la base de données qui vous fera gagner énormément de temps !
(cf : Démarrer un projet pour la configuration de l’application à votre base de données)
La base de données sera décrite dans un fichier de configuration : config/schema.yml.
Pour commencer, nous distinguerons deux points. Soit votre modèle de données :
- est déjà construit et nous ne pouvons pas le modifier : nous perdrons quelques atouts de Symfony;
- n’est pas encore définit ou nous pouvons la re-modeler.
Noms de champs spécifiques
id : Si un des champs d’une table se nomme id il sera alors considéré automatiquement comme la clé primaire de la table.
created_at & updated_at : Vous pouvez appeler un champ de type datetime`created_at ou updated_at pour que Symfony gère ces données automatiquement lors de l’insertion ou de la mise à jour de données.
Système relationnel
Symfony va nous permettre de gérer très simplement le système relationnel de notre modèle de données.
- Automatiquement si nous appelons nos champs comme il faut :
Si un champs se nomme NOM_TABLE_EXISTANTE_id il sera alors considéré automatiquement comme la clé étrangère de la table NOM_TABLE_EXISTANTE. Ainsi le système relationnel sera repris automatiquement dans notre système objet (ORM).
Ecriture du schéma
- Ma base n’est pas encore créée :
Nous allons éditer le fichier `config/schema.yml` comme suit:
propel:
nom_table:
id:
created_at:
titre: varchar(255)
texte: longvarchar
nom_table_2:
id:
created_at:
updated_at:
nom_table_id:
texte: varchar(255)
description: longvarchar
chiffre: int
Notre schéma
SQL écrit, nous allons pouvoir générer automatiquement les tables en base et la génération des objets (cf: le prochain article
l’ORM)) :
>symfony propel-build-all
Si notre base est déjà écrite, nous pouvons générer ce fichier automatiquement via la commande :
>symfony propel-init-schema
Nous pouvons ensuite y effectuer quelques modifications et, par exemple, y préciser notre système relationnel :
propel:
nom_table:
id:
created_at:
titre:varchar(255)
texte: longvarchar
nom_table_2:
id:
created_at:
updated_at:
texte: varchar(255)
description: longvarchar
chiffre: int
_foreignKeys:
nom_table:
_attributes: { onDelete: cascade }
references:
- {local: nom_cle_etrangere, foreign: id }
Ici nous n’allons pas créer les tables en base puisqu’elles existent déjà. Nous allons donc générer seulement les objets via l’ORM :
>symfony propel-build-model
Publié sous Symfony | Mots clés Symfony | 4 commentaires
Publié par Quentin Tousart
Lun 20 août 2007 12:38:00 GMT
Carré Blanc, grande marque de linge de maison souhaitait mettre à disposition de ses clients un site e-commerce interactif et simple d’utilisation.
Webpulser et l’agence web Altima ont su répondre précisément à cette demande.
Trois mois de travail ont été nécessaires pour développer ce site en Ruby on Rails. Ce framework dernière génération répond à toutes les exigences de Carré Blanc : rapidité de développement, interactivité et facilité d’utilisation.
Le résultat de leur collaboration est en ligne depuis hier sur www.carreblanc.com et également sur www.business-on-rails.com.
Naviguez en toute simplicité sur le site de Carré Blanc !
Publié sous Exemples concrets, Références, Ruby & Rails | Mots clés ecommerce | aucun commentaires
Publié par Jonathan Demoutiez
Lun 13 août 2007 12:49:00 GMT
Jusqu’ici nous avons vu les grands points de Symfony et surtout son fonctionnement (application / modules / actions / vues; partials / helpers).
Mais Symfony est un framework et nous offre donc une multitude d’helpers et de fonctions qui nous simplifierons la vie.
De nombreuses fonctions de Symfony permettent de générer une balise HTML.
Les fonctions les plus courantes
Liens HTML
Puisque Symfony utilise de l’url rewriting nous passerons systématiquement par les fonctions de Symfony pour générer des liens. Ceci permettra de formater automatiquement les liens :
Accueil/index?var1=value1
deviendra automatiquement :
Accueil/index/var1/value1
link_to(TEXTE, LIEN, PROPRIETES) : génére un simple lien html.
Le troisième paramètre est une chaine de caractères qui peut contenir tous les attributs possibles d’une balise A_ sous cette forme : _target=nom, popup=true, alt=text
link_to('clic ici', 'PUB/index?pub=2', 'popup=true')
Liens & Javascript
En faisant appel à l’helper `Javascript` nous pourrons utiliser :
link_to_function(TEXTE, CODE_JAVASCRIPT) qui génére un lien faisant appel à du code javascript onclick.
link_to('clic ici', 'alert(\'BONJOUR !\')') ?>
link_to_remote(TEXTE, array()), fait appel à une page en ajax.
link_to_remote(
'clic ici',
array(
'url' => 'MODULE/ACTION',
'update' => 'div_id_1',
'loading' => 'alert(\'Debut\')',
'complete' => 'alert(\'FIN\')',
'script' => true
'confirm' => 'Etes vous sur ?'
)
)
loading permet de spécifier du code javascript à exécuter avant l’appel ajax, et complete après l’appel.
update est l’id de l’élément HTML à mettre à jour.
confirm permet de géré automatiquement une petite alert de confirmation.
ATTENTION : si vous ne mettez pas script à true, le code Javascript récupéré en ajax ne sera pas executé !
Remarque : Cet helper offre de très nombreuses fonctions (tel que les fonctions de Drag And Drop par exemple) que vous trouverez dans la documentation officielle.
Image
<img src='/images/image.jpg' alt='image'/>
équivaut à :
Remarque : Certaines extensions seront prises en compte automatiquement (‘jpg’, ‘png’). Dnas le cas contraire, précisez la.
L’image est automatiquement recherchée dans le dossier web/images, mais nous pourrions accèder à d’autres dossiers :
/images2/image ou encore sous_dossier_images/image
Formulaire
<form method='post' action='/MODULE/ACTION'>
form_tag('MODULE/ACTION', 'method=post');
<label for="input1">Saisissez : </label>
label_tag('input1', 'Saisissez : ')
<input type='text' name='input1' value='valeur' />
input_tag('input1', 'valeur')
<input type='submit' value='Ok' />
submit_tag('Ok')
</form>
La balise select
select_tag(
'NAME',
options_for_select(
array(
'value' => 'affiche',
'value1' => 'affiche1'
),
'valeur_par_defaut'
),
'size=2'
)
Remarque : Vous pouvez spécifier des ‘optgroup’ :
options_for_select(
array(
'groupe 1' => array(),
'value' => 'affiche',
'groupe 2' => array(),
'value1' => 'affiche1'
),
'valeur_par_defaut'
)
De nombreuses autres fonctions associées sont disponibles, ce qui rend le tout très intuitif.
Publié sous Symfony | Mots clés Symfony | aucun commentaires
Publié par Jonathan Demoutiez
Mer 08 août 2007 09:35:00 GMT
Helper
Un helper va comme le partial permettre de généraliser des bouts de vues, mais il ne contient pas directement une vue mais des fonctions qui retourneront les bouts de vue.
Ces fonctions correspondent à un tout petit bout de vue contrairement à un partial qui peut contenir beaucoup d’éléments.
Un helper pourra définir par exemple des fonctions
- qui vont attribuer des couleurs au titre selon des critères de niveaux;
- qui vont définir les options pour le select d’un formulaire (avec appel au model);
- ... .
Des fonctions comme link_to_remote; draggable_element; ... appartiennent à l’helper Javascript.
Aussi il est possible que l’on ai besoin de faire du calcul ou de l’appel au model pour générer un bout de vue, nous ferons appel à l’utilisation d’un helper dans ce cas pour respecter notre système MVC.
Définir un helper
Les helpers d’une application vont se situer dans le dossier apps/NOM_APP/lib/helper/ (ou dans le dossier lib d’un module pour plus de spécificités)
Un helper
Menu aura pour nom de fichier le nom du helper suivit du mot clé
Helper, exemple :
Faire appel à un helper
L’appel à un helper se fait donc évidement dans une vue (ou encore un partial).
Nous pourrons appeler des helpers via la fonction use_helper :
<?php use_helper('Menu') ?>
On peut également faire appel à plusieurs helpers en même temps :
<?php use_helper('Menu', 'helper2', ...) ?>
Une fois un helper appelé nous aurons accès aux fonctions définies dans celui-ci.
Publié sous Symfony | Mots clés Symfony | 2 commentaires
Publié par Jonathan Demoutiez
Lun 06 août 2007 08:40:00 GMT
Symfony est un framework dit « DRY » (Don’t Repeat Yourself), il intégre un système de partial et d’helper qui vont nous permettre de généraliser des “bouts de vues”.
Partial
Un partial se place dans le dossier templates du module le concernant.
Le nom du fichier commencera systématiquement par le caractère `_`, exemple si on le nomme : `je_suis_un_partial`, le fichier se nomme :
Un partial va pouvoir être appelé de n’importe quelle vue via l’instruction :
include_partial('je_suis_un_partial');
Cette instruction appelle le partial et le “cherche” dans le module actuel. Dans le cas ou vous voulez appeler le partial d’un autre module, vous devez le préciser :
include_partial('NOM_MODULE/je_suis_un_partial')
A quoi ça sert ?
Si par exemple vous avez un formulaire qui permet à l’utilisateur de saisir des informations lors de son inscription, souvent vous avez ce même formulaire qui permet à l’utilisateur de venir les modifier.
Plûtot que d’écrire ce formulaire dans le fichier ‘modules/inscription/templates/inscriptionSuccess.php’
et de le recopier dans
‘modules/membre/templates/modifierInfosSuccess.php’.
Nous allons écrire uniquement ce formulaire dans le partial ‘modules/inscription/templates/_formulaire.php’.
Evidement nous pouvons passer des valeurs à un partial, voici comment procéder :
include_partial(
'NOM_MODULE/je_suis_un_partial',
array(
'nom_var1' => val1,
'nom_var2' => val2,
...
)
);
A suivre les helpers…
Publié sous Symfony | Mots clés Symfony | 1 commentaire
Publié par Jonathan Demoutiez
Ven 03 août 2007 12:49:00 GMT
Essayons avec un exemple tout simple pour bien comprendre l’intéraction modules / actions / vues.
Commençons par générer notre projet, notre première application et notre premier module :
$> symfony init-project mon_premier_projet_symfony
$> symfony init-app front
$> symfony init-module front Accueil
On définit notre module et action par défaut :
apps/front/config/routing.yml
# default rules
homepage:
url: /
param: { module: Accueil, action: index }
// ...
Nous allons définir notre action
index :
apps/front/modules/Accueil/actions/actions.class.php
class AccueilActions extends sfActions{
public function executeIndex(){
// Aucun traitement pour le moment...
}
apps/front/modules/Accueil/templates/indexSuccess.php
Bienvenue...<br />
<br />
Ici nous sommes dans le module Accueil et l'action index.
Définissons notre action
autre, on rajoute la méthode
executeAutre,
apps/front/modules/Accueil/actions/actions.class.php
public function executeAutre(){
// Aucun traitement pour le moment...
}
apps/front/modules/Accueil/templates/autreSuccess.php
Voici mon autre action...
Rendez-vous sur l’url : http://MON_DOMAINE/ ou http://MON_DOMAINE/Accueil/index et http://MON_DOMAINE/Accueil/autre
Vous pouvez essayer de générer un deuxième module et une deuxième application et y faire vos essais.
Publié sous Symfony | Mots clés Symfony | aucun commentaires
Publié par Jonathan Demoutiez
Jeu 02 août 2007 11:51:00 GMT
Les vues d’un module sont stockées dans le dossier templates.
La vue correspondante à une action doit avoir le même nom que celui de l’action suivi du mot clé Success.
Vous trouverez donc par défaut dans un module la vue de l’action index qui est indexSuccess.php (action générée par défaut).
Comment récupérer dans la vue une variable définie dans l’action ?
Il nous sera bien sur indispensable de passer des variables de notre action à notre vue. Pour cela il suffit de passer la variable en attribut de classe.
Exemple :
public function executeIndex(){
...
$cout_en_francs = 1;
$this->setVar('cout_en_euros', $cout_en_francs * 6.55);
...
}
Ici, dans la vue nous aurons accès à la variable cout_en_euro mais pas à la variable cout_en_francs :
indexSuccess.php :
Le cout est de <?= $cout_euros ?> €
Publié sous Symfony | Mots clés Symfony | aucun commentaires