Page 1 sur 2

Page de tutoriel en php

Posté : 24 févr. 2008, 13:53
par djtec
Bonjour,

Voilà je voudrais créer des pages de tutoriaux mais le truc c'est que je ne sais comment faire pour que si le tuto est trop long il se mette sur plusieur pages et je voudrais aussi faire des pages comme sur le siteduzero.com donc une page sommaire qui donne vers d'autre page mais tout ceci en php.

Donc quelqu'un aurait-il une idée de la bdd et du script qu'il faudrait pour faire ceci?

Merci d'avance

Posté : 24 févr. 2008, 15:25
par Cyrano
:shock: Soit dit sans méchanceté aucune : j'espère que ce ne sont pas des tutos sur le PHP ?

Et sinon, peut-être ne te poses-tu pas les bonnes questions. Sur un plan global, comment vois-tu la chose ?

Posté : 24 févr. 2008, 15:36
par djtec
non non ce ne sont pas des tutos sur le php.

En faites si un tuto est trop long et je voudrais qu'il soit sur plusieur page je pensais que le script comptrait le nombre de caractère qu'il y a dans le tuto et qu'il le mettrai en plusieur page s'il depassait le nombre de caractères maxi.
Mais je ne sais pa si c'est la bonne solution peut-être qu'il y en a une autre meilleur.

Pour la 2eme chose c'est un script qui donnerai le même résultat que sur le site du zéro:
c'est a dire une page sommaire du tuto avec des liens qui redirige vers les pages correspondante

voici un exemple de page: http://www.siteduzero.com/tuto-3-2549-0 ... ieces.html

ceci est la page sommaire qui redirige vers les pages correspondantes et je cherche si possible a faire un script en php qui pourrai faire ce genre de chose.

Ceci pour éviter d'avoir des tutos qui sont long et que l'on passe 5min a ariver en bas de la page en lisant.

Posté : 24 févr. 2008, 15:40
par Cyrano
Ok, donc ton tuto est divisé en rubriques. Première piste : comment vas-tu enregistrer tout ça ?

Posté : 24 févr. 2008, 15:58
par djtec
ben justement je ne sais pas du tout c'est ça que je demande

Posté : 24 févr. 2008, 16:22
par Genova
Bonjour,
le genre de choses que tu souhaites faire est généralement ce qui est le plus fait en PHP :
- Un formulaire d'ajout de texte (tutoriel dans ton exemple), d'édition et de suppression
- La récupération des différentes entrées de textes (des différents tutoriels)
- La pagination des tutoriels en plusieurs pages, dynamiquement

Si tu ne vois pas comment faire ça, je te conseil objectivement d'apprendre les bases de PHP ou de les réviser.

Néanmoins quelques pistes pour t'aider :
  1. Une table tutoriels dans ta base de donnée, avec comme champs :
    • tutoriel_id (INT, PRIMARY_KEY, AUTO_INCREMENT)
    • tutoriel_title (VARCHAR)
    • tutoriel_content (TEXT ou LONGTEXT)
    • tutoriel_date (INT si c'est un timestamp, DATETIME sinon)
  2. Il te faut un formulaire HTML, et que tu récupères en PHP les informations que tu as écrites (voir la variable $_POST)
  3. Lorsque tu insères le tutoriel dans ta base de donnée, faire une requête SQL de type INSERT
  4. Lorsques tu édites ton tutoriel, faire une requête SQL de type UPDATE
  5. Pour ton système de pagination, tu peux utiliser la clause LIMIT de MySQL. Par exemple :

    Code : Tout sélectionner

    SELECT * FROM tutoriel LIMIT 0, 3
    va te récupérer 3 tutoriels à partir de la ligne 0

    Code : Tout sélectionner

    SELECT * FROM tutoriel LIMIT 3, 3
    va te récupérer 3 tutoriels à partir de la ligne 3 (donc les 3 suivants). Ainsi tu peux voir que la variables ici c'est le premier argument de LIMIT. Il te suffit donc d'avoir une variable $page que tu trimbales de pages en pages via l'URL (voir $_GET pour la récupérer), et que tu utilises dans ta requête SQL, dans la clause LIMIT.
Voilà grossomodo les étapes à suivre pour la réalisation de ton système.

Posté : 24 févr. 2008, 16:50
par djtec
se nest pas pour afficher un certain nombre de tutoriel sur une page mais pour diviser un tutoriel en plusieur page

Posté : 24 févr. 2008, 19:36
par Cyrano
Subdivise tes données : tu as au premier niveau des tutos, et au niveau en dessous des rubriques. Chaque rubrique est rattachée à un tuto particulier, mais un tuto peut comporter plusieurs rubriques.

Donc, l'enregistrement de tes tutos devra se faire une rubrique à la fois. Est-ce que cette façon de voir t'éclaire un peu mieux ?

@Genova : ce point central de la subdivision ne peut pas être convenablement résolu avec une seule table, donc le modèle que tu proposes, sans être mauvais pour autant, est incomplet. ;)

Posté : 24 févr. 2008, 21:59
par Hywan
Si tu es à l'aise avec XML et XSLT, tu peux toujours utiliser DocBook, mais il ne faut pas avoir froid aux yeux pour avoir un résultat vraiment appréciable.
Je ne connais pas ton niveau, c'est pour ça que je précise : si et seulement si tu es à l'aise, j'entends par là : un bon niveau dans ce domaine :).
Avec DocBook, tu as un ou plusieurs fichiers XML, et lors de l'application successives des feuilles XSLT, il applique les feuilles chunk, c'est à dire qu'il va te créer des fichiers pour chaque chapitre, section etc. C'est plutôt configurable à ce niveau. Je te laisse explorer les possibilités de DocBook, mais reste à ton entière disposition si tu as des questions.

Sinon, écoute mes collèges, ils ont de bonnes idées ;-).

Posté : 24 févr. 2008, 23:30
par h0_noMan
Dans ton cas, je stockerais sois en fichiers, sois en BDD.

Pour separer les pages tu peux utiliser une expression specifique à ton application (ex: <NEWPAGE/>) pour separer ton tuto en plusieurs pages.

Au moment de la recuperation des données, tu compteras combien il y a de <NEWPAGE/> et tu sauras ainsi combien de page il y a et avec les REGEXP (ou toute autre méthode) tu pourras recupérer les données pour une page precise.

Posté : 24 févr. 2008, 23:32
par Hywan
Ou un commentaire, ce serait plus propre :

Code : Tout sélectionner

<h3>Un titre de profondeur 3</h3> <p>Bla bla bla bla bla</p> <!-- --newpage-- --> <h1>Nouveau chapitre</h1>
Les possibilités sont vastes :).
Le plus efficace serait d'avoir un document, que tu éclates, et que tu enregistres pour ne pas à avoir à l'éclater à chaque fois. Ce serait une règle d'or.

Posté : 25 févr. 2008, 00:57
par djtec
Cyrano

La méthode que tu me propose me parait la mieux mais ce que je vois pas c'est le genre de table qu'il faudrait et aussi le script php nécessaire pour l'utiliser.

Mais le truc c'est que si je crée une page avec des subdivision il faut aussi que cette page me serve pour des tutoriels normaux qui n'aurez pas de sous-rubrique.

Merci d'avance.

Posté : 25 févr. 2008, 07:19
par Cyrano
Je dirais ceci : avant de penser au codage en PHP, pense en terme de données. Il te faut d'abord établir le modèle de données pour concevoir la base avec par exemple la méthode MERISE. On peut dans un premier temps distinguer deux entités : "tutos" et "pages" où 1 tuto comporte 1:n pages et 1 page correspond à 1:1 tuto.

Ça donne quelque chose comme ceci :

Code : Tout sélectionner

+----------------+ +------------------+ | tutos | __________ | pages | +-----------+----+ 1:n / comporte \ 1:1 +-------------+----+ | tut_id | PK |-----|----------|-----| pag_id | PK | | tut_titre | | \__________/ | tut_id | FK | | tut_date | | | pag_sstitre | | +-----------+----+ | pag_texte | | +-------------+----+
Planche un peu là dessus et va faire un tour sur les tutos de developpez.com, il y a un tuto sur MERISE dans la rubrique SGBD très intéressant :)

Posté : 25 févr. 2008, 14:45
par djtec
Donc je dois faire une BDD comme ceci:

Code : Tout sélectionner

Table tuto - id_tuto - titre - page (yes or no) - texte - date - view Table cat_page - id_cat - id_tuto - titre - view - date Table page - id - id_cat - id_tuto - ss_titre - texte
C'est ce genre de table que je dois créer?

Posté : 25 févr. 2008, 14:55
par Cyrano
Pourquoi une catégorie sur les pages ? C'est le tuto qui entre dans une catégorie alors que la page se rattache à un tuto directement. Tu ne crois pas ?

Ne penses pas en terme de tables et de colonnes pour l'instant : tu tries et catégories des données sous forme de regroupement d'entités et de propriétés de ces entités.

Tuto est une entité, page aussi, alors que titre par exemple sera une propriété de tuto. Ensuite, établis les relations : Une donnée de l'entité X est liée à 0:1 (ou bien 1:1, 0:n ou 1:n) donnée(s) de l'entité Y. Dans l'exemple que j'ai montré précédement, une page est liée à 1:1 tuto (un et un seul) tandis qu'un tuto comporte 1:n pages (1 à n pages). C'est ce qu'on appelle les cardinalités. Définis ces cardinalités et ensuite reviens avec ton modèle, ce sera plus efficace pour avancer :)