Créer un site web: une brasserie
Hors ligneBrischri Le 25/02/2010 à 15:52 Profil de Brischri Configuration de Brischri

Mon plus gros problème, coucher sur papier ce qui me passe par la tête.
J'ai une idée de la manière de créer la page "carte" pour un site multilingue, j'ai des problèmes à le mettre par écrit.

Une table par catégorie de produit (bières, apéros, vins, alcools, entrées, potage, plats, pâtes, etc)... par langue.
id, nom et description.

Une table de prix par catégorie.
id, prix, disponibilité (s'il n'y a plus de xxx, inutile de supprimer la ligne dans toutes les tables)
Lien: id

Une table des libellé par langue.

Une table ordre des catégorie.
Table unique pour l'application, elle ne contient qu'une partie du nom des tables, PHP recréera le nom complet.

Exemples de noms.
Table des potages en français:    br_cat_potages_fr_tbl
Table des potages en allemand:  br_cat_potages_de_tbl
Prix des potages:                       br_prix_potages
libellés en français:                    br_libelles_fr
libellés en allemand:                  br_libelles_de
ordre des catégories:                 br_ordre

br_ pour brasserie, puisque certains FAI n'autorisent qu'une seule DB (le mien, gratuit, n'en permet aucune, donc, je ferai les tests sur une machine stand-alone).
br_ordre n'a qu'un champs, lu de la première à la dernière ligne: bieres, aperos, vins, potages, desserts.
il sera simple de créer le nom complet de la page avec PHP.


"Plein d'options sont envisageables en fonction du critère de dynamisme que tu souhaites. Est-ce qu'il faut faire un "back-office" propre pour gérer le contenu, etc ?"

A y réfléchir, le front-office est assez simple. créer les CSS peut être intéressant et instructif (screen, print, "téléphone", A, AA ou AAA). S'occuper du back-office est plus complet , aussi bien pour MySQL que pour PHP. Donc, même si on n'arrive pas à une application web professionnelle, je pense qu'on doit pouvoir aller loin.
-modifier un prix
-modifier un nom / description
-ajout d'un article
-ajout d'une catégorie
-ajout d'une langue
La création de la table des menus du jour ne se fera pas en un jour. Puisque le menu peut être décidé en semaine, il faudra enregistrer le travail, le vérifier une dernière fois, le mettre en ligne.

Oui, on peut aller loin en back-office.
Et là, ça ne dépend pas que de moi.
--
Désireux d'apprendre MySQL, PHP, HTML5 et CSS3, tout un programme.
Hors ligneBrischri Le 01/03/2010 à 08:07 Profil de Brischri Configuration de Brischri

Comment je vois la page "carte".

    $langref='fr'
/* la langue est dans le nom des tables. Si une table n'existe pas dans une langue (inutile ou oubliée) $langref impose le français.
Inutile: la Belgique est un pays multilingue, beaucoup d'endroits sont légalement bilingues. Les renseignements qui concernent la brasserie se retrouveront fr-nl, fr-de ou l'inverse. Même si l'utilisateur préfère it ou en, les nom et l'adresse resteront fr.
*/

    $lang= ??
/* gestion des cookies: pas de cookie, $lang=$langref, sinon, $lang=langue du cookie.
*/

    lire br_ordre_tbl, recopier dans une array (ordre_a)
/* liste, dans l'ordre, des tables à afficher. Au lieu de mettre le nom des catégories de produit (plus clair mais plus long), la table ordre ne contiendrait que 3 caractères alphanumériques. 36^3=46656 possibilités. largement suffisant.
Un second champs: disponible (y/n). Le champs permet de supprimer temporairement une catégorie de produits sans avoir à la supprimer de la table, et donc, sans avoir à la remettre à sa place plus tard. Cela doit faciliter le travail back-office.
*/

    lire br_libelles_.$lang._tbl, ne recopier dans une array (libelles_a) que ce qui est nécessaire (en fonction du contenu de br_ordre_tbl)

boucler sur ordre_a
    lire br_cat_.ordre->nom._tbl, ne recopier dans une array (cat_a) que ce qui est disponible
    si il y a au moins un produit disponible
        lire br_.ordre.prix_tbl, recopier dans une array (prix_a)
        imprimer libelles_a[i]
            boucler sur prix_a
                imprimer prix_a[j]
                imprimer cat_a->nom correspondant (en fonction de id)
                              cat_a->description correspondant
            finboucle
     finsi
     suivant ordre_a
finboucle

Si vous voyez autre chose ou autrement.
Petit détail, il est possible que j'ai quelques problèmes à me connecter cette semaine. Même si je ne passe pas chaque jour, je n'oublie pas ce sujet.

Christian
--
Désireux d'apprendre MySQL, PHP, HTML5 et CSS3, tout un programme.
Hors ligneBrischri Le 12/03/2010 à 11:32 Profil de Brischri Configuration de Brischri

 

Un peu plus loin.
Mais pas encore en route. En cause un problème avec la commande 'echo'.
Mais nous y arriverons.
 
*/ *****************************
*  D'abord créer les tables:
*/ *****************************
 
br_ordre_tbl ordre d'affichage des catégories
br_cat_fr_tbl nom des catégories
br_prix_001_tbl prix de la cat 001
br_art_001_fr_tbl articles de la cat 001 (bières au tonneau - en français)
 
create table br_ordre_tbl (
id_ord char(3) not null,
dispo_ord tinyint default 1,
tri_ord smallint unsigned primary key
)
 
create table br_cat_fr_tbl (
id_cat char(3) not null,
libelle_cat varchar(80) not null
)
 
create table br_prix_001_tbl (
id_prix char(3) not null,
dispo_prix tinyint default 1,
prix_prix decimal(5,2) not null
)
 
create table br_art_001_fr_tbl (
id_art char(3) not null,
nom_art varchar(80) not null,
desc_art varchar(80),
ordre_art smallint
)
 
*/ *****************************
*  Ensuite, entrer un minimum de données:
*/ *****************************
 
insert into br_art_001_fr_tbl
values
("001", "Jupiler 25cl", "", 1),
("002", "Jupiler 33cl", "", 1),
("010", "Mazout 25cl", "Jupiler ou Stella et Coca", 8),
("012", "Jupiler 50cl", "", 1)
 
 
insert into br_prix_001_tbl(id_prix, prix_prix)
values
("001", 1.60),
("002", 1.90),
("010", 1.60),
("012", 3.00)
 
insert into br_cat_fr_tbl
values ("001", "Bières au tonneau")
 
insert into br_ordre_tbl(id_ord, tri_ord)
values ("001",1)
 
*/ *****************************
*  Un peu de HTML
*/ *****************************

*/ *****************************
   br_fr.php

<!doctype html>    
<html>  
<head>  
    <title>La Brasserie</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
</head>  
<body>  

<header>
    <hgroup> 
        <h1>La Brasserie</h1> 
        <h2>le resto bistrot du quartier</h2>
    </hgroup>
</header>

<nav>
    <ul>
        <li><a href="#">Accueil</a></li>
        <li><a href="#">Carte</a></li>
        <li><a href="#">Menu du jour</a></li>
        <li><a href="#">Soirées à thème</a></li>
    </ul>
</nav>

<?php
echo "<p>C'est ici que se retrouvera la page carte</p>";
?>

<footer>
    <section id="apropos">
        <header>
            <h3>&Agrave; propos</h3>
        </header>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco <a href="#">laboris nisi ut aliquip</a> ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
    </section>
    <section id="liens">
        <header>
            <h3>Liens utiles</h3>
        </header>
        <ul>
            <li><a href="http://www.inbev.be/FR/index.htm">InBev Belgium</a>
            <li><a href="http://www.breweryvisits.com/home.php?age=1&lng=1">Visites de brasseries</a>
        </ul>
    </section>
    <section id="quartier">
        <header>
            <h3>Le quartier</h3>
        </header>
        <ul>
            <li><a href="http://www.lesmarolles.be/quartier">Les Marolles</a>
            <li><a href="http://www.kmkg-mrah.be/newfr/index.asp?id=506">La Porte de Hal</a>
            <li><a href="#">Lien 3</a>
            <li><a href="#">Lien 4</a>
        </ul>
    </section>
</footer>
</body>
</html>
 
 
 
 
Le résultat obtenu n'est pas celui auquel je m'attendais. Et tant que je n'arriverai pas à afficher convenablement une ligne (echo xxx), il me sera difficile d'aller plus loin.
 
EasyPHP 2.0.0.0
 
Print screen partiel de la page carte
 
Comment garder l'indentation du fichier d'origine? (notepad++)
 
Si vous pensez qu'il devrait être possible d'améliorer quelque chose, n'hésitez pas, je suis ouvert à la discussion. Pas toujours disponible, mais ouvert.
 
Christian
 
édit: mauvais nom d'une table: br_art_001_fr_tbl
--
Désireux d'apprendre MySQL, PHP, HTML5 et CSS3, tout un programme.
Hors ligneAnthony Le 12/03/2010 à 21:41 Profil de Anthony Configuration de Anthony

Admin

Pour la partie XHTML il y a des balises inexistantes :

 

<header>
<hgroup>

<footer>

 

tout ceci n'existe pas en XHTML ;) il vaut mieux utiliser des <div id="header">[...]</div> par exemple ;)

Pour la partie PHP :

<?php
echo "<p>C'est ici que se retrouvera la page carte</p>";
?>

Il est préférable de séparer toutes les pages, mettons par exemple une page "carte.php", une page "menu_du_jour.php", etc ;) chacune des pages PHP traitera ainsi une seule action et il sera plus simple de coder smiley

--

Hors ligneBrischri Le 13/03/2010 à 14:35 Profil de Brischri Configuration de Brischri

Les balises header, footer, etc, sont les balises de html5. Elles sont déjà reconnues par mozilla, chrome, safari et d'autres, mais par aucune version de IE. IE9 devrait régler ce problème.

<?php
echo "<p>C'est ici que se retrouvera la page carte</p>";
?>

N'est mis que pour montrer mon problème avec easyphp, ce qui suit le </p> est affiché. Si je n'avais pas ce problème, j'aurais tenté de mettre un peu de code :)

Quand la page sera terminée, il faudra encore l'adapter (div, class, etc) pour créer le fichier css, alors, on pourra la découper en morceaux. Entête, qui reprendra peut-être header et nav et pied qui ne reprendra que footer. Et nous pourrons passer au travail de bureau... qui est la partie principale du travail je pense.

--
Désireux d'apprendre MySQL, PHP, HTML5 et CSS3, tout un programme.
Hors ligneBrischri Le 15/03/2010 à 12:25 Profil de Brischri Configuration de Brischri

J'ai réinstaller EasyPHP (version 5.3.2 au lieu de 5.3.0), la fin de l'instruction qui me dérengeait a disparu.

Quelques modifications apportées aux tables:
- un nom incorrect ne l'est plus
- un index sur la table CAT
- des données supplémmentaires dans la table CAT.

Je remets le fichier complet, désormais, je ne remettrai plus que la partie "PAGE CARTE", sauf nécessité.

Christian

 

 

*/ *****************************
*  D'abord créer les tables:
*/ *****************************

br_ordre_tbl        ordre d'affichage des catégories
br_cat_fr_tbl        nom des catégories
br_prix_001_tbl        prix de la cat 001
br_art_001_fr_tbl    articles de la cat 001 (bières au tonneau)

create table br_ordre_tbl (
    id_ord char(3) not null,
    dispo_ord tinyint default 1,
    tri_ord smallint unsigned primary key
)

create table br_cat_fr_tbl (
    id_cat char(3) not null,
    libelle_cat varchar(80) not null
)
ALTER TABLE `br_cat_fr_tbl` ADD INDEX ( `id_cat` )

create table br_prix_001_tbl (
    id_prix char(3) not null,
    dispo_prix tinyint default 1,
    prix_prix decimal(5,2) not null
)

create table br_art_001_fr_tbl (
    id_art char(3) not null,
    nom_art varchar(80) not null,
    desc_art varchar(80),
    ordre_art smallint
)

*/ *****************************
*  Ensuite, entrer un minimum de données:
*/ *****************************

insert into br_art_001_fr_tbl
    values
    ("001", "Jupiler 25cl", "", 1),
    ("002", "Jupiler 33cl", "", 1),
    ("010", "Mazout 25cl", "Jupiler ou Stella et Coca", 8),
    ("012", "Jupiler 50cl", "", 1)


insert into br_prix_001_tbl(id_prix, prix_prix)
    values
    ("001", 1.60),
    ("002", 1.90),
    ("010", 1.60),
    ("012", 3.00)

insert into br_cat_fr_tbl
    values ("001", "Bières au tonneau"),
            ("003", "Bières bouteilles"),
            ("009", "Apéros")

insert into br_ordre_tbl(id_ord, dispo_ord, tri_ord)
    values ("001", 1, 1),
            ("003", 0, 3),
            ("009", 0, 9)

*/ *****************************
*  Un peu de HTML
*/ *****************************

*/ *****************************
   br_fr.php

<!doctype html>    
<html>  
<head>  
    <title>La Brasserie</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
</head>  
<body>  

<header>
    <hgroup> 
        <h1>La Brasserie</h1> 
        <h2>le resto bistrot du quartier</h2>
    </hgroup>
</header>

<nav>
    <ul>
        <li><a href="#">Accueil</a></li>
        <li><a href="#">Carte</a></li>
        <li><a href="#">Menu du jour</a></li>
        <li><a href="#">Soirées à thème</a></li>
    </ul>
</nav>

<?php
echo "<p>******************************  Ici débute la page carte</p>";

/********************
   définition des constantes
*/
define ('LANG_REF','fr');            // invariable
define ('HOTE', 'localhost');        // à adapter
define ('NOM', 'root');                // à adapter
define ('PASSE', '');                // à adapter
define ('DB', 'brasserie');            // mettre le nom de votre base de données
define ('TORDRE', 'br_ordre_tbl');    // la seule table dont le nom ne change pas!

/********************
   définition des variables
*/
$lang = 'fr';                    // à modifier: gestion des cookies
$tcat = 'br_cat_fr_tbl';        // le nom changera avec la langue
$tprix = 'br_prix_001_tbl';        // le nom changera en fonction de la catégorie
$tart = 'br_art_001_fr_tbl';    // le nom changer en fonction de l'article et de la langue

/************** lire br_ordre_tbl et br_cat_??_tbl */
$tcat = 'br_cat_'.$lang.'_tbl';
mysql_connect(HOTE,NOM,PASSE) or die ('Erreur de connexion à la base');
mysql_select_db(DB) or die('Selection de la base impossible');
$query = "SELECT ".TORDRE.".id_ord, ".TORDRE.".dispo_ord, ".$tcat.".libelle_cat FROM ".TORDRE.", ".$tcat." where ".TORDRE.".id_ord = ".$tcat.".id_cat";
$result = mysql_query($query) or die('Échec de la requête : ' . mysql_error());
mysql_close();
// Affichage des résultats en HTML
echo "<table>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
    echo "\t<ul>\n";
    foreach ($line as $col_value) {
        echo "\t\t<li>$col_value</li>\n";
    }
    echo "\t</ul>\n";
}
echo "</table>\n";

// Libération des résultats
mysql_free_result($result);



echo "<p>******************************  Fin de la page carte</p>";
?>

<footer>
    <section id="apropos">
        <header>
            <h3>&Agrave; propos</h3>
        </header>
        <p>Pour vos réservations ou pour proposer un thème de soirée, n'hésitez pas à contacter <a href="#">La Brasserie</a> par mail ou par téléphone: 02 123 45 67</p>
    </section>
    <section id="liens">
        <header>
            <h3>Liens utiles</h3>
        </header>
        <ul>
            <li><a href="http://www.inbev.be/FR/index.htm">InBev Belgium</a>
            <li><a href="http://www.breweryvisits.com/home.php?age=1&lng=1">Visites de brasseries</a>
        </ul>
    </section>
    <section id="quartier">
        <header>
            <h3>Le quartier</h3>
        </header>
        <ul>
            <li><a href="http://www.lesmarolles.be/quartier">Les Marolles</a>
            <li><a href="http://www.kmkg-mrah.be/newfr/index.asp?id=506">La Porte de Hal</a>
            <li><a href="#">Lien 3</a>
            <li><a href="#">Lien 4</a>
        </ul>
    </section>
</footer>
</body>
</html>
 

Extrait de la page carte

--
Désireux d'apprendre MySQL, PHP, HTML5 et CSS3, tout un programme.
Hors ligneBrischri Le 18/03/2010 à 09:58 Profil de Brischri Configuration de Brischri

Une version plus récente est en ligne, mais pas accessible avec IE

--
Désireux d'apprendre MySQL, PHP, HTML5 et CSS3, tout un programme.
Hors ligneBrischri Le 21/03/2010 à 16:00 Profil de Brischri Configuration de Brischri

--
Désireux d'apprendre MySQL, PHP, HTML5 et CSS3, tout un programme.
Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels