CMS Automne
http://www.automne-cms.org/forum/

Une 404 dans Automne
http://www.automne-cms.org/forum/viewtopic.php?f=5&t=417
Page 1 sur 1

Auteur:  Chrys [ Jeu Déc 11, 2008 12:07 pm ]
Sujet du message:  Une 404 dans Automne

Il est possible de personnaliser la page 404 en créant une page 404.html. Cette dernière sera automatiquement affichée, si elle existe, sinon se sera le contenu html de la page 404.php.
Je rappelle que l'erreur 404 est provoquée lorsque l'on tente d'atteindre une ressource qui n'existe pas et que votre fichier .htaccess contient la configuration du traitement de cette erreur :
Code :
ErrorDocument 404 /404.php


Le défaut est que cette page 404.html ne profite pas de la puissance du CMS automne (utilisation des balises <atm_... >)
Je propose un scénario permettant de mettre en place votre page 404 géré par le CMS moyennant quelques adaptations. Ces adaptations pourront être appliquées à la page 403. J'ai bon espoir que la solution proposée sera intégré dans les prochaines versions d'Automne ;-)

Chrys.

Auteur:  Chrys [ Jeu Déc 11, 2008 12:08 pm ]
Sujet du message: 

Première étape : Le modèle
Créez votre modèle comme tout autre modèle standard

Chrys.

Auteur:  Chrys [ Jeu Déc 11, 2008 12:08 pm ]
Sujet du message: 

Deuxième étape : La page
Créez une page dont le nom DOIT commencé par 404, par exemple "404 Page non trouvée".
Validez cette page.
Vous avez donc maintenant une page dont l'URL est http://mon_site/web/nn-404-page-non-trouvee.php
nn est la valeurs numérique de l'identifiant de votre page

Chrys.

Auteur:  Chrys [ Jeu Déc 11, 2008 12:10 pm ]
Sujet du message: 

Troisième étape : Le script 404.php
Vous trouverez ce script à la racine du site.
C'est ce script qui est responsable de la recherche d'une page par son numéro et de l'affichage de la 404.html le cas échéant.
Trouvez dans ce script le code suivant qui se trouve vers la ligne 70
Code :
//do redirection to page if founded
if ($redirectTo) {
   header('HTTP/1.x 301 Moved Permanently', true, 301);
   header('Location: '.$redirectTo.($_SERVER['REDIRECT_QUERY_STRING'] ? '?'.$_SERVER['REDIRECT_QUERY_STRING'] : ''));
   exit;
}


Placez juste avant le code suivant
Code :
// Search 404 page...
if (!$redirectTo) {
   $path = $_SERVER["DOCUMENT_ROOT"].'/web';
   $pattern404 = "#^([0-9]+)-404-#U";
   $directory = openDir($path);
   while ($file = readDir($directory)) {
      if (!is_dir($path.'/'.$file)) {
         preg_match($pattern404, $file, $requestedPageId);
         if (sensitiveIO::IsPositiveInteger($requestedPageId[1])) {
            //include needed classes
            require_once(PATH_PACKAGES_FS."/workflow/resource.php");
            require_once(PATH_PACKAGES_FS."/workflow/resourcestatus.php");
            require_once(PATH_PACKAGES_FS."/common.php");
            require_once(PATH_PACKAGES_FS."/tree/tree.php");
            require_once(PATH_PACKAGES_FS."/tree/page.php");
            require_once(PATH_PACKAGES_FS."/tree/website.php");
            require_once(PATH_PACKAGES_FS."/tree/websitescatalog.php");
            
            //try to instanciate the requested page
            $page = new CMS_page($requestedPageId[1]);
            if (!$page->hasError()) {
               //get page file
               $pageURL = $page->getURL(false , false, PATH_RELATIVETO_FILESYSTEM);
               if (file_exists($pageURL)) {
                  $redirectTo = $page->getURL(false);
               } else {
                  //try to get direct html file
                  $pageURL = $page->getHTMLURL(false , false, PATH_RELATIVETO_FILESYSTEM);
                  if (file_exists($pageURL)) {
                     $redirectTo = $page->getHTMLURL(false);
                  }
               }
            }
         }
      }
   }
}

Il s'inspire grandemant de l'existant en parcourant le répertoire /web/ à la recherche de cette page 404-xxx.php

Chrys.

Auteur:  Chrys [ Jeu Déc 11, 2008 12:13 pm ]
Sujet du message: 

Quatrième étape : A vous de jouer...
Amusez-vous à dépublier la page 404, et votre page 404.html réapparaitra (si vous en aviez une)
Comme d'habitude ce tuto est perfectible, notemment pour ceux qui aurait des sites en plusieurs langues.
N'hésitez pas à me retourner vos remarques...
Pensez à ajouter dans le fichier /automne/UPDATE.DENY la ligne suivante
Code :
/404.php
pour ne pas qu'une mise à jour d'Automne n'écrase votre travail.

Page 1 sur 1 Le fuseau horaire est UTC [Heure d’été]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/