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

Langage PHP Discussion :

[Système] Génération automatique de sommaire


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 199
    Points : 91
    Points
    91
    Par défaut [Système] Génération automatique de sommaire
    Bonjour est il possible en php de parcourir le document, récupérer tous les titres entre les balises <Hn> et </Hn>
    et en faire un sommaire automatique ?

    si oui juste le nom de la fonction `me serait utile après j'espère pouvoir me débrouiller

    merci à vous

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all("#<hn>(.*)</hn>#ais", $mon_doc, $tab_reponse);
    et hop, les elements de $tab_reponse[1][1] a $tab_reponse[taille_tab][1] conteindront tes textes a mettre en sommaire
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 199
    Points : 91
    Points
    91
    Par défaut
    Tien j'ai trouvé ca qui est vraiment fort
    après bidouille et compagnie tu peux tout générer automatiquement.
    Tu fou ca en include et c'est beau

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    <?php
     
    ////creer un sommaire a partir de fichier dans un repertoire avec leur titre et le lien ////(dans un tableau)
     
    // on ouvre le répertoire contenant les fichiers a traiter
    $dir = opendir("monrepertoire/");
     
    // on initialise le compteur a 1 pour ne pas avoir zero d'afficher devant le premier fichier !
    $i = 1; 
     
    // on commence le tableau...
    echo "<table>\n\n"; 
     
     
    //on commence à contruire le fichiers. celui ci ! tel qu'il sera envoyer au "browser".
    $faire_fichier = "<table>\n<tr>\n";
     
    // lit le contenu du répertoire 
    while($file = readdir($dir)) 
     
     //on trie et élimine les résultats parasites
    if(eregi(".html",$file) || eregi(".htm",$file) || eregi(".txt",$file) || eregi(".php",$file))
    // on rajoute autant de "|| eregi("extension de fichier",$file))"que necessaire
    if(ereg("^\.?\.+$", $file) || ereg( "sommaire", $file)) 
    // les noms de fichiers contenant sommaire ne seront pas pris en compte ! inutile de s'autoindexer !
     
    {
    // on détruit $file quand devenue inutile !
    unset($file);
     
    }
    else // sinon on peut commencer a créer le contenu du tableau !
    {
     
     
    ////////////////on cherche le titre du fichier $file///////////c'etait mon soucis/////////////////////////
     
    //on ouvre le fichier
    $fichier = fopen ("$file", "r");                 
     // commentaire: "r" = ouverture en lecture seule
    if (!$fichier) {                                         
    //  ! = erreur, pas trouver le fichier, en principe la boucle s'est deja arreter et ce cas de figure ne devrait pas arriver 
        echo "<p>Impossible de lire la page.\n";         
    //  donc message d'avertissement 
        exit;
    }
    while (!feof ($fichier)) {
        $line = fgets ($fichier, 1024); 
    // commentaire:lecture des premier 1023 caracteres ca devrait suffire.sinon augmenter
    //Cela ne fonctionne que si les balises Title sont correctement utilisées et reinseignèes
     
    if (eregi ("<title>(.*)</title>", $line, $trouve)) {
            $title = $trouve[1];  
     
     
            break;     
    //break parceque pas d'autre (else) truc a faire a la place...
        }
    }
    // on ferme le fichier !
    fclose($fichier);
     
    //////////////c'est fait !//////on a le nom du fichier (et l'endroit ) et son titre////////////////////////////////
     
    {
     
    //construit une colonne du tableau
    $colonne = " <td valign='middle' align='center'>\n ".
     
    //la remplie
    "<a href='monrepertoire/$file'>$i - $trouve[1]</a>\n </td>\n";
     
    // la on prend le numero de fichier par curiosite et pour donner un nom au lien du fichier qui n'aurait pas de titre 
    {
     
    unset($trouve[1]);
    //on efface le titre pour qu'il ne soit reutiliser ou prochain fichier qui n'aurait,lui pas de titre !nous avons deja un numero.
     
    }
     
    // si le reste de $i / 3 (le nombre de colonnes désirées) égale 1 et  LA TU REMPLACE 3 PAR 2 ! ET TU AS 2 COLONNES !
    // que $i n'en est pas à sa première itération (pour éviter d'avoir une
    // ligne "<tr>" parasite au début, c'est que l'on peut commencer une ligne
    if ($i%3==1)
    {
    echo "\n<tr>\n"; // on commence une ligne du tableau
    $faire_fichier .= "\n<tr>\n"; 
    }
    if($i %3 !=1 OR $i %3 == 1)
    {
     
    echo "$colonne"; // on affiche une colonne
    $faire_fichier .="$colonne";
    }
    $i++; // on incrémente le compteur
     
     
    // puisque $i a été incrémenté une ligne plus haut, la condition
    // ci-dessous recevra une valeure de $i différente du début de la 
    // boucle, donc on peut fermer la ligne
    if ($i%3==1)
    {
    echo "\n</tr>\n";
    $faire_fichier .= "\n</tr>\n";
    }
    }
    }
    echo "\n</table>"; // on ferme le tableau
    $faire_fichier .= "\n</table>";
     
    closedir($dir); // on ferme le répertoire
    //on peut maintenant sauvegarder ce sommaire dans fichier pour le reutiliser en static
    if ($monsommaire = fopen("sommaire.html", "w+")) // creer ou reecrit le fichier
    {
    // on insert la variable $faire_fichier construite précédement dans le fichier html
     
    fputs($monsommaire, "$faire_fichier");
    // et voila le fichier est pret a etre utilisé
    }
    fclose($monsommaire);
     
    ///pour mieux comprendre ne pas hesiter a consulter les differents dico et exemple en ligne ,
    // on fini toujours par ce bricoler un truc simple qui  marche
     
    ?>
    votre avis

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    et allé, encore plus drole :
    imagine que t'ais des titre style <hn>1. blablabla blabla bla</hn>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all("#<hn>([0-9]{1,})\. (.*)</hn>#ais", $mon_doc, $tab_reponse);
    alors tu peux faire ton sommaire de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($tab_reponse as $val)
    {
       echo $val[1].' - '.$val[2].'<br>'
    }
    ce qui te donne en plus sous forme numérique ton index de sommaire
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 199
    Points : 91
    Points
    91
    Par défaut
    J'ai un document hyper super bête (des cours en fait) de la forme titre 1, titre 2, titre 3, du texte, un graphique (wahoo c'est dingue).

    Es ce que je peux générer des chiffre devant chaque titre pour avoir une sorte de structure, un peu comme dans word en fait. Faudrait que ca ait la tronche de 1. ; 1.1 ; 1.1.1. ...En plus avec ton système je peux les récupérer après pour générer mon sommaire.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 199
    Points : 91
    Points
    91
    Par défaut
    J'en rajoute encore, ...

    croix tu qu'il serait possible de générer des ancres automatiquement... ?

    Ca se complexifie la. En clair tu clic sur un élément de ton sommaire et tu vas directement au bon endroit dans ton document

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    Je rentrerai pas dans le détail mais affirmatif...
    la fonction preg_match_all peut recevoir en paramètre un flag qui permet de retourner dans la structure l'offset correspondant à chaque résultat. L'utilisation de ce flag (PREG_OFFSET_CAPTURE) modifie cependant la structure du tableau renvoyé (détail sur http://fr3.php.net/manual/fr/functio...match-all.php). Si tu peux récupérer l'offset, il ne reste plus qu'a insérer une balise <a> a cet endroit précis ^^

    Pour la récupération des sous niveau hiérarchique, il faut également adapter le masque. Je suis pas un expert en preg, mais a vu d'oeil, ça devrait ressembler a quelque chose comme ça :

    "#<hn>[([0-9]{1,})\.]{1,} (.*)</hn>#ais"

    ce qui est à confirmer, car j'ai des doutes sur le comportement du masque que je propose...
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 199
    Points : 91
    Points
    91
    Par défaut
    Bon en tout cas si je creuse, je pourrai trouver,
    des que j'ai un peu de temps je me lancerai la dedans...

Discussions similaires

  1. [VB.NET] Génération automatique Property (getter / setter)
    Par Husqvarna dans le forum Windows Forms
    Réponses: 7
    Dernier message: 23/07/2020, 11h55
  2. créer automatiquement un sommaire sous word
    Par donny dans le forum Word
    Réponses: 11
    Dernier message: 03/09/2006, 14h14
  3. XSL-fo : génération d'un sommaire dynamique
    Par La Bomba81 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 26/07/2005, 10h39
  4. [Plugin]Gestion de génération automatique de code
    Par Maggic dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 11/05/2004, 11h35

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