Système de Gestion-Affichage de Nouvelles

Avec éditeur WYSIWYG, photo et fichier joint

Date de publication : 19 juin 2009. Date de mise à jour : 6 septembre 2011.

Par Jérôme Réaux
 

PHP - Système de Gestion-Affichage de Nouvelles (Articles, Actualités...) :

Ce système de Nouvelles avec photo et fichier joint vous permettra de gérer vous-même votre news, actualité, info... et devrait s'intégrer facilement dans votre site.
La possibilité d'ajouter une photo, de joindre un fichier et la mise en forme grâce à un éditeur WYSIWYG sont des plus !
126 commentaires Donner une note à l'article (4.5)

Viadeo Twitter Google Bookmarks ! Facebook Digg del.icio.us MySpace Yahoo MyWeb Blinklist Netvouz Reddit Simpy StumbleUpon Bookmarks Windows Live Favorites      



1. Avant-Propos
2. Fichiers nécessaires
2-A. Télécharger l'archive, tester la démonstration
2-B. Principe
2-C. Tutoriels en rapport avec le sujet
3. 1- CONFIGURATION
4. 2- PROTECTION / IDENTIFICATION
5. 3- GESTION / ADMINISTRATION
5-A. Listing des News
5-B. Ajouter
5-C. Modifier
5-D. Supprimer
6. 4- PHOTO
6-A. Traitement de la photo
6-B. Fonctions de redimensionnement d'images
7. 5- FICHIER JOINT
8. 6- AFFICHAGE
8-A. Liste des articles : affichage d'un résumé et lien "Lire la suite"
8-B. Fiche de l'article : affichage complet
8-C. Fonctions de troncature du texte : résumé "brut" ou résumé "HTML"
9. Conclusion, remerciements
9-A. Télécharger l'archive, tester la démonstration
9-B. Conclusion
9-C. Remerciements


1. Avant-Propos

infoCette source est parfaitement fonctionnelle en l'état. (tester la démo)
Néanmoins, quelques adaptations seront nécessaires pour bonne intégration dans votre site :
- styles CSS à adapter à votre design ;
- intégration dans votre(vos) page(s)...
Ces fichiers sont open source, vous pouvez donc les modifier à votre convenance.
ideaCette source est aussi un tutoriel.
Les fichiers contiennent de nombreux commentaires et explications, qui ont aussi une valeur pédagogique : « copier-coller, c'est bien, comprendre, c'est mieux ».
N'hésitez pas à télécharger l'archive, et à jeter un œil au code !

2. Fichiers nécessaires


2-A. Télécharger l'archive, tester la démonstration

TÉLÉCHARGEZ l'ARCHIVE zip  
PHP - Système de Gestion-Affichage de Nouvelles avec photo + fichier joint (version 4) PHP-GESTION-NEWS-v4.zip ( miroir )
Testez la démonstration Démo
Vous pouvez déposer vos commentaires ou poser vos questions sur cette source 126 commentaires Donner une note à l'article (4.5)

2-B. Principe

PRINCIPE  
1- CONFIGURATION -> Configurer vos paramètres personnels (table des News, connexion à la base de données, style CSS...)
2- PROTECTION / IDENTIFICATION -> Création d'un dossier news_ADMIN
dans lequel on met ses pages d'administration de la News
3- GESTION / ADMINISTRATION Dans le dossier news_ADMIN :
-> Ajouter / Modifier / Supprimer une News
-> Editeur WYSIWYG : aucun / tinymce / fckeditor (au choix)
-> Ajouter / Supprimer une photo
-> Ajouter / Supprimer un fichier joint
4- PHOTO -> Création d'un dossier news_photos, pour stocker les photos
Ce dossier doit être déprotégé en écriture (chmod : 777)
-> Possibilité d'uploader une photo
-> Redimensionnement automatique des photos
5- FICHIER JOINT -> Création d'un dossier news_fichiers, pour stocker les fichiers
Ce dossier doit être déprotégé en écriture (chmod : 777)
-> Possibilité d'uploader un fichier (joint à l'article)
6- AFFICHAGE -> Afficher le listing des News (résumé avec pagination),
-> Afficher la fiche de chaque News

2-C. Tutoriels en rapport avec le sujet


3. 1- CONFIGURATION

1- CONFIGURATION  
fonctions/_connexion.php Configuration de vos paramètres personnels pour la connexion à la base de données
fonctions/news_config.php Configuration des paramètres pour la News (table, dossier photo, éditeur...)
dossier news_photos Dossier de stockage des photos (déprotégé : chmod 777)
dossier news_fichiers Dossier de stockage des fichiers (déprotégé : chmod 777)
dossier utilitaires/fckeditor,
ou dossier utilitaires/tinymce
Éditeur WYSIWYG (au choix) : mise en forme du contenu de la News
infoConfigurez ici :
- vos paramètres personnels pour la connexion à la base de données ;
- le nom de la table des News (par défaut : TABLE_NEWS) ;
- le nom du dossier pour les photos (par défaut : news_photos/) ;
- le nom du dossier pour les fichiers (par défaut : news_fichiers/) ;
- le choix de l'éditeur WYSIWYG (par défaut : fckeditor).
news_config.php

<?php
// ***************************************************************
// NEWS : PARAMÈTRES de CONFIGURATION
// ***************************************************************
// (création : juin 2009 par Jérôme Réaux) http://j-reaux.developpez.com/
// ***************************************************************
// PARAMÈTRES pour la table des NEWS
// ---------------------------------------------------------------
// ==> définir le nom de la table de la base de données :
   $TABLE_NEWS         = 'TABLE_NEWS';
// -----------------------------
//    ==> Création et Structure de la table `TABLE_NEWS` :
//    CREATE TABLE `TABLE_NEWS` (
//     `news_id` int(11) NOT NULL auto_increment,
//     `news_titre` varchar(255) NOT NULL default '' COMMENT 'titre de la news',
//     `news_contenu` text NOT NULL default '' COMMENT 'contenu de la news',
//     `news_date` varchar(50) NOT NULL default '' COMMENT 'timestamp (pour affichage date et heure)',
//     `news_photo` varchar(255) NULL COMMENT 'nom de la photo jointe',
//     `news_fichier` varchar(255) NULL COMMENT 'nom du fichier joint',
//     `news_publier` int(2) NOT NULL default '1' COMMENT '1=oui 0=non',
//     PRIMARY KEY (`news_id`)
//    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
// ***************************************************************
// PARAMÈTRES POUR LES PHOTOS jointes
// ---------------------------------------------------------------
// ==> Choix du dossier de stockage des photos (ce dossier doit être déprotégé en écriture : chmod 777)
   define('REP_NEWS_PHOTO',     'news_photos/');        // partie publique (site)
   define('REP_NEWS_PHOTOAdm',    '../news_photos/');        // partie privée (administration)
   // taille maxi des images
   define('FILE_SIZEMAX_PHOTO',     3000000);            // 3Mo
   // extensions acceptées (images)
   define('FILE_EXTENSION_PHOTO',     '" .jpg .jpeg .png .gif"'); // (NB: l espace avant .jpg est important)
// ***************************************************************
// PARAMÈTRES POUR LES FICHIERS joints
// ==> Choix du dossier de stockage des fichiers (ce dossier doit être déprotégé en écriture : chmod 777)
   define('REP_NEWS_FICHIER',     'news_fichiers/');            // partie publique (site)
   define('REP_NEWS_FICHIERAdm',     '../news_fichiers/');    // partie privée (administration)
// ==> Restrictions sur les fichiers
   // taille maxi des fichiers
   define('FILE_SIZEMAX_FICHIER',     3000000);                // 3Mo
   // extensions acceptées (fichiers)
   define('FILE_EXTENSION_FICHIER',     '" .pdf"');         // (par défaut : fichiers pdf uniquement)
// ***************************************************************
// DOSSIER des ICÔNES (administration)
   define('REP_ADM_ICONES',     'adm_icones/');
// DOSSIER des ICÔNES (site)
   define('REP_IMG_ICONES',     'template/img/icones/');
// ***************************************************************
// PARAMÈTRES POUR L'ÉDITEUR WYSIWYG
// ==> Choix de l'éditeur
   define('EDITEUR_WYSIWYG',     'fckeditor');    // fckeditor
//    define('EDITEUR_WYSIWYG',     'tinymce');        // tinymce
//    define('EDITEUR_WYSIWYG',     '');             // rien (pour du texte brut)
// ---------------------------------------------------------------
?>

4. 2- PROTECTION / IDENTIFICATION

2- PROTECTION / IDENTIFICATION  
news_ADMIN/fonctions_adm/_protect.php
Configuration de vos identifiant et mot de passe pour la partie Administration
news_ADMIN/fonctions_adm/_protectpage.php Protection des pages
news_ADMIN/fonctions_adm/_deconnexion.php Déconnexion
news_ADMIN/index.php Page d'identification pour la partie Administration
infoLes fichiers permettent, pour la partie "Administration" (dossier news_ADMIN) :
- de configurer vos identifiant et mot de passe ;
- de vous connecter (formulaire d'identification) ;
- de protéger vos pages d'administration ;
- de vous déconnecter en sécurité.

5. 3- GESTION / ADMINISTRATION

3- GESTION / ADMINISTRATION  
news_ADMIN/news_admin.php Listing des News + boutons Ajouter / Modifier / Supprimer une News
news_ADMIN/news_formuler.php
news_ADMIN/news_formulerfckeditor.php
news_ADMIN/news_formulertinymce.php
Formulaire Ajouter / Modifier / Supprimer une News
(en fonction de l'éditeur WYSIWYG choisi : aucun / fckeditor / tinymce)
news_ADMIN/news_traiter.php Traitement Ajouter / Modifier / Supprimer
news_ADMIN/news_ADM_style.CSS Style CSS utilisé (dans news_ADMIN ; à adapter à votre site)
infoListing des News + Ajouter / Modifier / Supprimer

En fonction de l'éditeur WYSIWYG que vous aurez choisi, vous utiliserez :
- news_formuler.php : aucun éditeur (texte brut) ;
- news_formulerfckeditor.php : éditeur fckeditor, version "simplifié" (Toolbar personnalisée, modifiable dans le fichier utilitaires/fckeditor/fckconfig.js) ;
- news_formulertinymce.php : éditeur tinymce, version "simplifié" (options masquées).
Les éditeurs WYSIWYG permettent une "mise en forme" du contenu de la News :
Téléchargez les dossiers nécessaires (ps : déjà présents dans l'archive) : Éditeurs WYSIWYG (FCKeditor, TinyMCE).

news_ADM_style.CSS : configurez le style CSS à utiliser pour la partie "Administration".

Ces captures d'écran montrent son utilisation avec l'éditeur FCKeditor.

5-A. Listing des News


5-B. Ajouter


5-C. Modifier


5-D. Supprimer


6. 4- PHOTO

4- PHOTO  
news_ADMIN/news_photo.php Traitement automatique de la photo : Ajouter(upload) / Supprimer la photo
fonctions/fctredimimage.php Fonction de "redimensionnement physique proportionnel" automatique d'image

6-A. Traitement de la photo

infoTraitement de la photo :
- upload, avec gestion d'erreur ;
- redimensionnement automatique si nécessaire ;
- enregistrement du nom dans la base de données + de la photo dans le dossier "news_photos" ;
- suppression éventuelle de l'ancienne photo.

news_photo.php contient un script de modification du nom des photos avant enregistrement dans le dossier
(ex. : "Les Nénuphars.JPEG" -> "les-nenuphars.jgp").

6-B. Fonctions de redimensionnement d'images

infoVoir : Fonctions de redimensionnement d'image

7. 5- FICHIER JOINT

5- FICHIER JOINT  
news_ADMIN/news_fichier.php Traitement du fichier joint : Ajouter(upload) / Supprimer le fichier
infoTraitement du fichier :
- upload, avec gestion d'erreur ;
- enregistrement du nom dans la base de données + du fichier dans le dossier "news_fichiers" ;
- suppression éventuelle de l'ancien fichier.

8. 6- AFFICHAGE

6- AFFICHAGE  
(news_liste.php et news_fiche.php peuvent être intégrés dans une autre page)  
news_liste.php Listing des News (avec résumé du contenu + pagination)
template/CSS/news_style.CSS Style CSS utilisé pour la News (à adapter à votre site)
news_liste2.php
+ template/CSS/news_CSS2.php
Variante avec affichage sur deux colonnes
news_fiche.php Fiche pour chaque News : titre, date, contenu, photo
fonctions/fct_resume_brut.php
fct_resume_html.php
Fonctions permettant d'afficher le "résumé" du contenu :
soit brut, soit formaté (avec mise en forme HTML) (au choix)

8-A. Liste des articles : affichage d'un résumé et lien "Lire la suite"

infonews_liste.php : vous pouvez configurer l'affichage de la liste des News :
- nombre par page (+ pagination) ;
- choix d'un "résumé" du contenu : brut ou formaté,
- le nombre de caractères du résumé ;
- la taille de la photo de prévisualisation (picto).

news_liste2.php : variante, avec affichage sur deux colonnes.
news_style2.CSS : portion de style CSS à ajouter pour l'affichage sur deux colonnes.
1- Avec résumé "brut" : le résumé est affiché sans formatage.

2- Avec résumé "HTML" : le résumé est affiché formaté, en conservant la mise en forme HTML du contenu.

3- Affichage sur deux colonnes.


8-B. Fiche de l'article : affichage complet

news_fiche.php : affichage complet pour chaque News : titre, date, contenu, photo.


8-C. Fonctions de troncature du texte : résumé "brut" ou résumé "HTML"

infofct_resume_brut.php, avec résumé "brut" : le résumé est affiché sans formatage.
- Suppression des balises html ;
- pour ne pas couper un mot, on va à l'espace suivant ;
- on renvoie le résumé "brut" du texte sans formatage.
fct_resume_brut.php

<?php
// ****************************************************************
// RÉSUMÉ BRUT d'un texte htmlHTML : SUPPRESSION des balises html
// ****************************************************************
// Création : juin 2009 en collectif : Xunil, jreaux62, s.n.a.f.u., FoxLeRenard, Doksuri, Patouche
// http://www.developpez.net/forums/d757484-8/php/langage/contribuez/discussion-reparer-code-html/

// $texte : le texte formaté (avec des balises html)
// $nbreCar : le nombre de caractères texte à afficher (sans compter les balises html)
// $nbreCar (minimum) : pour ne pas couper un mot, le compte s'arrêtera à l'espace suivant
// --------------------------------
function texte_resume($texte, $nbreCar)
{
   // **********************************
   // SUPPRESSION des balises html
   // **********************************
   $texte = strip_tags($texte);
   // Explication strip_tags : voir http://fr.php.net/manual/fr/function.strip-tags.php

   // **********************************
   // COUPE DU TEXTE pour le RÉSUMÉ
   // **********************************
   // ajout d'un espace de fin au cas ou le texte n'en contiendrait pas...
   $texte .= ' ';
   // ----------------------------------
   $longueur = strlen($texte);
   // pour ne pas couper un mot, on va a l espace suivant
   $texte = substr($texte, 0, strpos($texte, ' ', $longueur > $nbreCar ? $nbreCar : $longueur));

   // ----------------------------------
   // On renvoie le résumé du texte correctement formaté.
   return $texte;
}
?>
infofct_resume_html.php : le résumé est affiché "formaté", en conservant la mise en forme HTML du contenu :
- les balises html sont conservées (ce qui permet aussi d'afficher les smileys),
- pour ne pas couper un mot, on va à l'espace suivant,
- on ajoute [...] à la fin (facultatif !), - on renvoie le résumé "HTML" du texte correctement formaté.
Attention néanmoins à éviter une mise en forme du contenu trop complexe (table...).

Fonction de "résumé HTML", Création juin 2009 en collectif : Xunil, jreaux62, s.n.a.f.u., FoxLeRenard, Doksuri, Patouche,
suite à une discussion fort intéressante concernant la "réparation de code HTML".
fct_resume_html.php

<?php
// ****************************************************************
// RÉSUMÉ d'un texte html + réparation des balises html
// ****************************************************************
// Création : juin 2009 en collectif : Xunil, jreaux62, s.n.a.f.u., FoxLeRenard, Doksuri, Patouche
// http://www.developpez.net/forums/d757484-8/php/langage/contribuez/discussion-reparer-code-html/

// $texte : le texte formaté (avec des balises html)
// $nbreCar : le nombre de caractères texte à afficher (sans compter les balises html)
// $nbreCar (minimum) : pour ne pas couper un mot, le compte s'arrêtera a l espace suivant
// --------------------------------
function texte_resume($texte, $nbreCar)
{
   // longueur du texte brut sans html
   $LongueurTexteBrutSansHtml = strlen(strip_tags($texte));
   // **********************************
   // MASQUE de l'expression régulière
   // **********************************
   $MasqueHtmlSplit = '#</?([a-zA-Z1-6]+)(?: +[a-zA-Z]+="[^"]*")*( ?/)?>#';
   $MasqueHtmlMatch = '#<(?:/([a-zA-Z1-6]+)|([a-zA-Z1-6]+)(?: +[a-zA-Z]+="[^"]*")*( ?/)?)>#';
   // ----------------------------------
   // Explication du masque : recherche de TOUTES les balises html
   // ---------------
   // détail : </?([a-zA-Z1-6]+)
   // recherche de chaines commençant par un < 
   // suivi optionnellement d'un / (==> balises "fermantes")
   // suivi de (caractères alphabétiques (insensible à la casse) ou numériques (1 à 6)) au moins une fois
   // Suivi optionnellement (0, 1fois ou plus) par un ou plusieurs attributs et leur valeur :
   // ---------------
   // détail : (?: +[a-zA-Z]+="[^"]*")*
   // caractère espace une fois ou plus [space]+
   // suivi d'au moins un caractère alphabétique [a-zA-Z]+
   // suivi d'un =
   // suivi d'une paire de guillemets contenant optionnellement (0, 1fois ou plus) tout caractère autre que guillemet "[^"]*"
   // ---------------
   // détail : ( ?/)?
   // caractère espace optionnel [space]?
   // suivi optionnellement d'un slash / (==> balises "orphelines")
   // NB : un :? suivant une parenthèse ouvrante signifie que l'on ne capture pas la parenthèse

   // **********************************
   // RECHERCHE DU TEXTE DU RÉSUMÉ
   // **********************************
   // ajout d'un espace de fin au cas ou le texte n'en contiendrait pas...
   $texte .= ' ';
   // ----------------------------------
   // Capture de tous les bouts de texte (en dehors des balises html)
   $BoutsTexte = preg_split($MasqueHtmlSplit, $texte, -1,  PREG_SPLIT_OFFSET_CAPTURE | PREG_SPLIT_NO_EMPTY);
   // ----------------------------------
   // Explication preg_split : voir http://fr.php.net/manual/fr/function.preg-split.php
   // => on obtient un tableau (array) :
   // $BoutsTexte[xx][0] : le bout de texte
   // $BoutsTexte[xx][1] : sa position (dans la chaine)
   // ----------------------------------
   // Nombre d'éléments du tableau
   $NombreBouts = count($BoutsTexte);

   // **********************************
   // CALCUL de la POSITION de la coupe
   // **********************************
   // Si seulement un seul élément dans l'array, c'est que le texte ne contient pas de balises :
   // on renvoie directement le texte tronqué
   if( $NombreBouts == 1 )
   {
       $longueur = strlen($texte);
       // pour ne pas couper un mot, on va à l espace suivant
       return substr($texte, 0, strpos($texte, ' ', $longueur > $nbreCar ? $nbreCar : $longueur));
   }
   // ----------------------------------
   // Variable contenant la longueur des bouts de texte
   $longueur = 0;
   // ----------------------------------
   // (position du dernier élément du tableau $chaines)
   $indexDernierBout = $NombreBouts - 1;
   // ----------------------------------
   // Position par défaut de la césure au cas  la longueur du texte serait inférieure au nombre de caractères à sélectionner
   // La position de la césure est égale à sa position [1] + la longueur du bout de texte [0] - 1 (dernier caractère)
   $position = $BoutsTexte[$indexDernierBout][1] + strlen($BoutsTexte[$indexDernierBout][0]) - 1;
   // ----------------------------------
   $indexBout = $indexDernierBout;
   $rechercheEspace = true;
   // ----------------------------------
   // Boucle parcourant l'array et ayant pour fonction d'incrémenter au fur et à mesure la longueur des morceaux de texte, 
   // et de calculer la position de césure de l'extrait dans le texte
   foreach( $BoutsTexte as $index => $bout )
   {
       $longueur += strlen($bout[0]);
       // Si la longueur désirée de l'extrait à obtenir est atteinte
       if( $longueur >= $nbreCar )
       {
           // On calcule la position de césure du texte (position de chaîne + sa longueur -1 )
           $position_fin_bout = $bout[1] + strlen($bout[0]) - 1;
           // calcul de la position de césure
           $position = $position_fin_bout - ($longueur - $nbreCar);
           // On regarde si un espace est présent après la position dans le bout de texte
           if( ($positionEspace = strpos($bout[0], ' ', $position - $bout[1])) !== false  )
           {
               // Un espace est détecté dans le bout de texte APRÈS la position
               $position = $bout[1] + $positionEspace;
               $rechercheEspace = false;
           }
           // Si on ne se trouve pas sur le dernier élément
           if( $index != $indexDernierBout )
               $indexBout = $index + 1;
           break;
       }
   }
   // ----------------------------------
   // Donc il n'y avait pas d'espace dans le bout de texte  la position de césure sert de référence
   if( $rechercheEspace === true )
   {
       // Recherche d'un espace dans les bouts de texte suivants
       for( $i=$indexBout; $i<=$indexDernierBout; $i++ )
       {
           $position = $BoutsTexte[$i][1];
           if( ($positionEspace = strpos($BoutsTexte[$i][0], ' ')) !== false )
           {
               $position += $positionEspace;
               break;
           }
       }
   }
   // **********************************
   // COUPE DU TEXTE pour le RÉSUMÉ
   // **********************************
   // On effectue la césure sur le texte suivant la position calculée
   $texte = substr($texte, 0, $position);

   // **********************************
   // RECHERCHE DES BALISES HTML
   // **********************************
   // Récupération de toutes les balises du texte et de leur position (PREG_OFFSET_CAPTURE)
   preg_match_all($MasqueHtmlMatch, $texte, $retour, PREG_OFFSET_CAPTURE);
   // ----------------------------------
   // Explication preg_match_all : voir http://fr.php.net/manual/fr/function.preg-match-all.php
   // $retour[0][xx][0] contient la balise html entière
   // $retour[0][xx][1] contient la position de la balise html entière
   // $retour[1][xx][0] contient le nom de la balise html fermante$rechercheEspace
   // $retour[2][xx][0] contient le nom de la balise html ouvrante
   // $retour[3][xx][0] contient le slash de fermeture de balise unique (cette variable n'existe pas si la balise n'est pas unique)
   // ----------------------------------
   // Array destiné à enregistrer les noms de balises ouvrantes
   $BoutsTag = array();
   // ----------------------------------
   foreach( $retour[0] as $index => $tag )
   {
       // Si on se trouve sur une balise unique, on passe au tour suivant
       if( isset($retour[3][$index][0]) )
       {
           continue;
       }
       // Si le caractère slash n'est pas détecté en seconde position dans la balise entière, on est sur une balise ouvrante
       if( $retour[0][$index][0][1] != '/' )
       {
           // On empile l'élément en début de l'array
           array_unshift($BoutsTag, $retour[2][$index][0]);
       }
       // Donc balise fermante
       else
       {
           // suppression du premier élément de l'array
           array_shift($BoutsTag);
       }
   }
   // **********************************
   // RÉPARATION des balises html
   // **********************************
   // Il reste des tags à fermer ?
   // balises ouvertes, mais non fermées : on ajoute les balises fermantes a la fin du texte
   if( !empty($BoutsTag) )
   {
       foreach( $BoutsTag as $tag )
       {
           $texte .= '</' . $tag . '>';
       }
   }
   // ----------------------------------
   // si le texte brut est plus long que $nbreCar : on ajoute [...] a la fin
   if ($LongueurTexteBrutSansHtml > $nbreCar) {
       $texte .= ' [......]';
       // si on a une balise fermante (/p ou /ul ou /div) a la fin :
       $texte =  str_replace('</p> [......]', ' ... </p>', $texte);
       $texte =  str_replace('</ul> [......]', ' ... </ul>', $texte);
       $texte =  str_replace('</div> [......]', ' ... </div>', $texte);
   }
   // ----------------------------------
   // On renvoie le résumé du texte correctement formaté.
   return $texte;
}
?>

9. Conclusion, remerciements


9-A. Télécharger l'archive, tester la démonstration

TÉLÉCHARGEZ l'ARCHIVE zip  
PHP - Système de Gestion-Affichage de Nouvelles avec photo + fichier joint (version 4) PHP-GESTION-NEWS-v4.zip ( miroir )
Testez la démonstration Démo
Vous pouvez déposer vos commentaires ou poser vos questions sur cette source 126 commentaires Donner une note à l'article (4.5)

9-B. Conclusion

infoCe système de Nouvelles avec photo et fichier joint devrait vous apporter satisfaction...
N'hésitez pas à télécharger l'archive ou à tester la démonstration.

Toutes remarques, corrections, ajouts, permettant d'améliorer ou d'étoffer ce tutoriel seront les bienvenus.
Cette source est parfaitement fonctionnelle en l'état. (tester la démo)
Néanmoins, quelques adaptations seront nécessaires pour une bonne intégration dans votre site :
- styles CSS à adapter à votre design ;
- intégration dans votre(vos) page(s)...
Ces fichiers sont open source, vous pouvez donc les modifier à votre convenance.
infoErreurs courantes :
- Bibliothèque GD : vérifiez qu'elle est bien activée (traitement des photos).
- Chez free.fr : il faut créer un dossier sessions à la racine du site pour que ça fonctionne.

9-C. Remerciements

ideaUn grand remerciement à tous les participants :
Fonction de "résumé HTML", Création juin 2009 en collectif : Xunil, jreaux62, s.n.a.f.u., FoxLeRenard, Doksuri, Patouche,
suite à une discussion fort intéressante concernant la "réparation de code HTML".

Remerciements à Claude Leloup pour sa relecture.

"Special Thanks" à ma chienne Candy, qui a posé pour les photos !


               Version PDF (Miroir)   Version hors-ligne (Miroir)

Valid XHTML 1.0 TransitionalValid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Jérôme Réaux. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC. Cette page est déposée.

 
 
 
 
Partenaires

Hébergement Web