IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

Système de tags pour catégoriser des textes


Sujet :

EDI, CMS, Outils, Scripts et API PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Par défaut Système de tags pour catégoriser des textes
    Bonjour,

    Je suis en train de voir quel système je pourrais mettre en place afin de "catégoriser" les textes de mon site de rêves, la Boîte à rêves.

    Je penche pour un système de tags, qui permet une plus grande souplesse qu'un système de catégories prédéfinies et plus rigide : on ne pourrait attribuer qu'une catégorie pour chaque rêve, mieux vaut donner la possibilité d'attribuer plusieurs critères pour un même rêve et donc utiliser un système de tags un peu modifié avec une restriction des tags possibles. Par "restriction des tags possibles" je veux dire que je veux proposer une liste de tags possibles (liste cependant) assez large pour satisfaire les besoins.

    N'étant pas un pro en programmation je recherche donc une base pour élaborer un petit système de tags.

    En connaissez-vous des bon, bien codés et facilement modifiable (donc simples) ?

  2. #2
    Membre éclairé Avatar de hisy
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    377
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 377
    Par défaut
    Gutten tag ...

    Excuse mon ignorance mais qu'est-ce que tu entends par tag ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Par défaut
    http://www.neokraft.net/ (blog du système de blogs DotClear) par exemple les utilise depuis peu, mais on retrouve les tags dans tous les projets "récents" : blogmarks, flickr, ...

  4. #4
    Membre émérite Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Par défaut
    Il doit s'agir d'un plugin. Demande à Olivier Meunier.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Par défaut
    Oui oui c'est sans doute un plugin de DC 2, mais il n'est pas encore disponible (DC 2 n'est pas encore sorti et il s'agit là d'un blog de "test")...

  6. #6
    Membre émérite Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Par défaut
    Dotclear (même si j'aime pas) est hyper bien foutu, et il serait étonnant que tu ne parviennes pas à bidouiller le code pour parvenir assez rapidement à tes fins.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Par défaut
    Moui, mais le système de tags de DotClear n'est pas encore disponible !! Et je demandais s'il existe un petit script générique uniquement pour créer un petit système de tags ?

  8. #8
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DREAMS(id, title, ...)
    TAGS(id, label)
    TAGS_DREAMS(dream_id, tag_id)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="text" name="tag[]" />
    <input type="text" name="tag[]" />
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $tags = get_tags_from_request();
    //link tag with dream
    foreach($tags as $tag)
    {
       $sql = "SELECT id FROM tags WHERE label = '".quote_smart($tag)."'";
       $req = mysql_query($sql);
       if (mysql_numrows($req) > 0)
       {
          $tag_id = mysql_result($req, 0, 0);
       }
       else 
       {  //create new tag
          $sql = "INSERT INTO tags (label) VALUES ('".quote_smart($tag)."')";
          $req = mysql_query($sql);
          $tag_id = mysql_insert_id();
       }
     
       //Link tag with dream
       $sql = "INSERT INTO tags_dreams (dream_id, tag_id) VALUES ('". $dream_id ."', '". $tag_id ."')";
       $req = mysql_query($req);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function search_dreams_by_tag($tag)
    {
       $sql = "SELECT d.id FROM dreams d, tags t, tags_dreams td WHERE t.label = '".$tag."' t.id = td.tag_id and td.dream_id = d.id";
       $req = mysql_query($sql);
       ...
    }
    etc. etc.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Par défaut
    Merci pour ta réponse Mr N.

    Par contre comment prendrais-tu en compte le fait qu'il puisse y avoir plusieurs tags sur un même rêve ? Il y aurait plusieurs "lignes" correspondant au rêve dans la table TAGS_DREAMS ? Question performances c'est le mieux (je ne m'y connais pas, c'est une simple question de curiosité et d'intérêt en tant que webmaster) :- ?

  10. #10
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    C'est tout l'intéret d'avoir une table tags_dreams : permettre à un reve d'avoir plusieurs tags. Si un reve n'avait qu'un tag, il aurait fallu rajouter une colonne 'tag' dans la table dreams.

    Et ca n'a rien à voir avec les performance, c'est une question de principe: les relations multivaluées se mettent dans des tables à part.

  11. #11
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Citation Envoyé par Mr N.
    Et ca n'a rien à voir avec les performance, c'est une question de principe: les relations multivaluées se mettent dans des tables à part.
    Complètement d'accord. En analyse, cela se traduit par les cardinalités "1,1 / 0,N" ou "1,1 / 1,N".

  12. #12
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Citation Envoyé par Kirkis
    Citation Envoyé par Mr N.
    Et ca n'a rien à voir avec les performance, c'est une question de principe: les relations multivaluées se mettent dans des tables à part.
    Complètement d'accord. En analyse, cela se traduit par les cardinalités "1,1 / 0,N" ou "1,1 / 1,N".
    Là je suis pas tout à fait d'accord
    Si j'ai la relation suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    +-------+ 1,1              0,n +-------+
    |   A   |----------------------|   B   |
    +-------+                      +-------+
    Alors ma bd sera comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    A(id, ...)
    B(id, ..., a_id)
    Pour moi une table à part ce fait principalement quand on a des relations n-n

  13. #13
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    +-------+ 0,n              0,n +-------+
    |   A   |----------------------|   B   |
    +-------+                      +-------+
    Cela donne lieu à une table de jointure.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    +-------+ 1,1              0,n +-------+
    |   A   |----------------------|   B   |
    +-------+                      +-------+
    Cela donne lieu à une clef étrangère de A dans B, comme tu l'as dit.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    +-------+ 1,1              1,1 +-------+
    |   A   |----------------------|   B   |
    +-------+                      +-------+
    C'est une erreur de modélisation : les deux tables devraient être fusionées.


    Me trompé-je ?

  14. #14
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Ehhhh y'a copyright sur les dessins ascii

    Je ne suis pas d'accord pour la dernière. Ce n'est pas une erreur de modélisation.
    Une voiture possède un moteur. Un moteur n'appartient qu'à une seule voiture.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    voiture(immatriculation, couleur, ..., moteur_numero_serie)
    moteur(numero_serie, type_carburant, ...)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    voiture(immatriculation, couleur, ...)
    moteur(numero_serie, type_carburant, ..., voiture_immatriculation)
    Ne commencerait-on pas à être hors-sujet là ?

  15. #15
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Conceptuellement, ton moteur n'appartient pas à la voiture. C'est bien une entité à part qui peut exister de son côté, sans voiture.
    Tu n'as pas une relation 1,1 / 1,1 pour l'histoire moteur / voiture car chaque moteur a des caractéristiques communes à tous les moteurs de sa série. Ne confonds pas "entité conceptuelle" et "tuple"...

    Dans la mesure où l'auteur du sujet a posé une question de modélisation, je ne crois pas que nous soyions hors sujet ^^


    Désolé pour le copyright, c'était pour que nous parlions de la même chose de la même manière

  16. #16
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Tu n'as pas une relation 1,1 / 1,1 pour l'histoire moteur / voiture car chaque moteur a des caractéristiques communes à tous les moteurs de sa série.
    J'ai mal pris mon exemple en donnant un mauvais identifiant au moteur.

    Bon je prend un autre exemple.

    Un paiement règle une vente.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    +--------------+ 1          règle   1 +-----------+
    |   Paiement   |----------------------|   Vente   |
    +--------------+                      +-----------+
    | montant      |                      + date      +
    |              |                      + heure     +
    +--------------+                      +-----------+
    Dans mon modèle, à tout instant t, une Vente est règlée par un Paiement et un Paiement règle une Vente.
    Je ne vais pas fusionner mes deux objets car j'aimerais plus tard avoir PaiementChèque, PaiementCarteBancaire et donc avoir des informations supplémentaires propres au paiement en question et non pas à la vente.
    Mais encore une fois, tout dépend du contexte, mais juste pour dire qu'une relation 1-1 est possible est correcte.

    T'inquiète pour le copright, c'est sous license LGPL

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Par défaut
    Citation Envoyé par Mr N.
    C'est tout l'intéret d'avoir une table tags_dreams : permettre à un reve d'avoir plusieurs tags. Si un reve n'avait qu'un tag, il aurait fallu rajouter une colonne 'tag' dans la table dreams.

    Et ca n'a rien à voir avec les performance, c'est une question de principe: les relations multivaluées se mettent dans des tables à part.
    Ok. Non mais j'imaginais que dans certains cas on pouvait avoir un table avec par exemple :
    id_reve = 68; id_tags = 1,5,9

    Les 1,5,9 étant dans le même champ et devant être traités pour séparer les valeurs des différents tags, pour aller ensuite chercher leurs labels dans une autre table.

    Mais c'est peu-être un peu plus tordu ;- ?

    Sinon à propos de ton code j'ai quelques questions :

    1°) A quoi servent les [ ] dans le name="tag[ ]" ?
    2°) A quoi servent les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $tags = get_tags_from_request();
    //link tag with dream
    foreach($tags as $tag)
    Je ne comprends pas leur fonctionnement. J'en suis aux très basiques boucles while pour les requêtes .
    Où est fénifie la fonction get_tags_from_request() ? et à que veut dire le "$tags as $tag :- ?

    ps : concernant vos discussions techniques, comme je n'y comprends rien du tout je ne peux qu'espérer pouvoir être de l'avis de l'un ou de l'autre un jour ...

  18. #18
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Citation Envoyé par yazerty
    Ok. Non mais j'imaginais que dans certains cas on pouvait avoir un table avec par exemple :
    id_reve = 68; id_tags = 1,5,9

    Les 1,5,9 étant dans le même champ et devant être traités pour séparer les valeurs des différents tags, pour aller ensuite chercher leurs labels dans une autre table.

    Mais c'est peu-être un peu plus tordu ;- ?
    Je t'invite à jeter loin, très loin, cette idée. C'est tordu, non maintenable, moche, lent, ... si je puis me permettre
    1°) A quoi servent les [ ] dans le name="tag[ ]" ?
    A recevoir, du coté du serveur, les tags sous forme de tableau. Ex :
    $_REQUEST['tag'][0] = 'voiture';
    $_REQUEST['tag'][1] = 'cheval';
    (Tu peux remplacer _REQUEST par _POST ou _GET suivant ton cas)
    2°) A quoi servent les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $tags = get_tags_from_request();
    //link tag with dream
    foreach($tags as $tag)
    A récupérer les tags qui ont été rentré par l'utilisateur. Voir la réponse à propos de [] ci-dessus.
    Où est fénifie la fonction get_tags_from_request() ?
    Elle est féfinie nulle part. C'est juste pour te donner une idée.
    et à que veut dire le "$tags as $tag :- ?
    A que ca veut dire "tu prends chaque element du tableau $tags, un par un, et tu me les mets dans la variable $tag". Plus d'info : http://fr.php.net/foreach

    Note que ma proposition n'était qu'un guide vers une des multiples solutions possibles. A toi de faire selon tes envies, tes compétences et tes besoins.

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Par défaut
    Oki, je jette cette idée alors ;-) !
    Merci pour tes réponses. Je vais réfléchir à tout ça pour voir comment je fais la chose...

    Bonne soirée 8) .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Système de découpage de texte html pour créer des pages
    Par heretik25 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 19/01/2012, 16h00
  2. tag pour transfomer des objets java en objets javascript
    Par aminaoussaleh dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 04/12/2009, 18h34
  3. Réponses: 0
    Dernier message: 28/01/2009, 10h12
  4. Système de plugins pour charger des modules au runtime
    Par simon.brandhof dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 21/08/2008, 12h13
  5. Creer une requéte access pour choisir des textes word
    Par mariekero dans le forum Access
    Réponses: 1
    Dernier message: 16/01/2006, 10h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo