Présentation, téléchargements et documentation : https://99ko.tuxfamily.org/

Auteur Sujet: erreur 404  (Lu 69 fois)

stratego

  • Néophyte
  • *
  • Messages: 11
    • Voir le profil
erreur 404
« le: 03 septembre 2020 à 09:37:27 »
Bonjour,

Quelles est la bonne méthode pour personnalier la page 404 sous 99ko?

Merci

MaxK

  • Modérateur Global
  • Membre Junior
  • *****
  • Messages: 57
    • Voir le profil
Re : erreur 404
« Réponse #1 le: 03 septembre 2020 à 10:46:48 »
Hello,

Pour le moment la bonne méthode est de modifier le fichier 'theme/nom_du_theme/404.php'.
Tu peux t'aider du fichier header.php et footer.php (respectivement haut et bas de page) afin de bien l'intégrer dans le contexte de ton thème.

@99ko : On pourrait par défaut rajouter le menu, bannière et footer dans cette page 404, non ? Qu'en penses-tu ?

99ko

  • Administrateur
  • Membre Junior
  • *****
  • Messages: 72
    • Voir le profil
Re : erreur 404
« Réponse #2 le: 03 septembre 2020 à 13:39:22 »
Oui en effet on pourrait.
Je ne sais plus pourquoi c'est fait comme ça, faut que je remette dedans  :)

99ko

  • Administrateur
  • Membre Junior
  • *****
  • Messages: 72
    • Voir le profil
Re : erreur 404
« Réponse #3 le: 03 septembre 2020 à 21:44:08 »
J'ai fait quelques recherches, je me suis rappelé que cette gestion d'erreur était un casse tête, voilà pourquoi la page 404 est sans header et footer  :D ;D

Dans l'index si le plugin recherché existe pas je lançe une méthode qui appelle la template 404 :
if(!$runPlugin || $runPlugin->getConfigVal('activate') < 1) $core->error404($core);
Dans cette méthode je viens tout simplement de tenter d'y insérer header et footer :
    public function error404(){
            header("HTTP/1.1 404 Not Found");
            header("Status: 404 Not Found");
            include_once(THEMES.$this->getConfigVal('theme').'/header.php');
            include_once(THEMES.$this->getConfigVal('theme').'/404.php');
            include_once(THEMES.$this->getConfigVal('theme').'/footer.php');
            die();
    }

J'obtient une erreur fatale :
Call to a member function getTitleTag() on boolean in show.class.php

Normal, car ligne 79 de ce fichier j'ai ça :
echo $runPlugin->getTitleTag().' - '.$core->getConfigVal('siteName');
Sauf que si j'appelle une URL qui ne fait pas référence à un plugin existant, $runPlugin n'existe pas, et les templates header et footer en ont besoin.

Voilà le pourquoi du comment.
Ma seule piste et de virer la gestion de la 404 du core et de créer un plugin qui gère cette page 404 ainsi que la détection de mauvaise URL.
En cas de mauvaise URL, le plugin 404 le détecterais (, il annulerait l'appel du plugin n'existant pas pour s'appeler lui même, je sais pas si c'est bien clair ? ???

MaxK

  • Modérateur Global
  • Membre Junior
  • *****
  • Messages: 57
    • Voir le profil
Re : erreur 404
« Réponse #4 le: 03 septembre 2020 à 22:05:02 »
Oui j'ai cherché vite fait aussi cette après-midi.
Mes conclusions sont les suivantes ^^ :
 - Il ne faut pas utiliser $runPlugin
 - A la place de $core, il faut utiliser la variable $this.

J'ai fait une page perso 404 pour un thème, en voilà le code (brouillon mais fonctionnel) :
<?php
defined
('ROOT') OR exit('No direct script access allowed');
include_once(
THEMES $this->getConfigVal('theme') . '/functions.php');
?>

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>404</title>
        <base href="<?php show::siteUrl(); ?>/" />
        <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1" />
        <link rel="icon" href="<?php show::themeIcon(); ?>" />
        <script src="https://code.iconify.design/1/1.0.7/iconify.min.js"></script>
        <link type="text/css" rel="stylesheet" href="<?php echo THEMES $this->getConfigVal('theme'?>/css/materialize.min.css"  media="screen,projection"/>
        <link type="text/css" rel="stylesheet" href="<?php echo THEMES $this->getConfigVal('theme'?>/styles.css"  media="screen,projection"/>
    </head>
    <body>
        <script type="text/javascript" src="<?php echo THEMES $this->getConfigVal('theme'?>/js/materialize.min.js"></script>
        <div id="container">
            <nav id="header">
                <div id="header_content">
                    <div class='nav-wrapper'>
                        <a href="<?php show::siteUrl(); ?>" class="brand-logo"><?php show::siteName(); ?></a>
                        <a href="#" data-target="mobile-menu" class="sidenav-trigger"><span class="iconify" data-icon="mdi:menu" data-inline="false"></span></a>
                        <ul class="right hide-on-med-and-down" id="navigation">
                            <?php
                            show
::mainNavigation();
                            echo 
materialNavbarDisplaySocial();
                            
?>

                        </ul>
                    </div>
                    <ul class="sidenav" id="mobile-menu">
                        <?php show::mainNavigation(); ?>
                        <li><div class="divider"></div></li>
                        <?php echo materialSidenavDisplaySocial(); ?>
                    </ul>
                </div>
            </nav>
        </div>
        <div id="body" class='card container error404'>
            <img src="<?php echo THEMES $this->getConfigVal('theme'?>/404.png" alt="Erreur 404"/>
            <h1>Page introuvable</h1>
            <p>La page que vous recherchez est introuvable. Elle pourrait avoir été supprimée, déplacée
                ou même ne jamais avoir existé.</p>
            <a href="<?php echo $this->getConfigVal('siteUrl'); ?>" class="button">Retour au site</a>
        </div>
        <footer id="footer" class="page-footer">
            <div id="footer_content" class="container">
                <?php $this->callHook('footer'); ?>
            </div>
            <div class="footer-copyright">
                <div class="container">
                    <p>
                        <a target='_blank' href='https://github.com/99kocms/'>Just using 99ko</a> - Thème <?php show::theme(); ?> - <a rel="nofollow" href="<?php echo ADMIN_PATH ?>">Administration</a>
                    </p>
                    <?php $this->callHook('endFooter'); ?>
                </div>
            </div>
        </footer>

        <?php $this->callHook('endFrontBody'); ?>
    </body>
</html>

NB : Certains élément ne sont pas inclus dans le thème d'origine, mais tout le code genre '$this->getConfigVal('siteUrl')' est fonctionnel dans le thème défaut et les autres.

Ci-joint le rendu en image.
« Modifié: 03 septembre 2020 à 22:09:53 par MaxK »

99ko

  • Administrateur
  • Membre Junior
  • *****
  • Messages: 72
    • Voir le profil
Re : erreur 404
« Réponse #5 le: 03 septembre 2020 à 22:09:53 »
Entre temps je viens de créer un plugin 404 vite fait (dans la partie privé).

A voir, les deux idées sont gérables

stratego

  • Néophyte
  • *
  • Messages: 11
    • Voir le profil
Re : erreur 404
« Réponse #6 le: 19 septembre 2020 à 20:41:21 »
comment tester ce plugin?

99ko

  • Administrateur
  • Membre Junior
  • *****
  • Messages: 72
    • Voir le profil
Re : erreur 404
« Réponse #7 le: 20 septembre 2020 à 21:12:06 »
Il faut juste attendre un chouillat la prochaine mise à jour qui permetra d'intervenir sur la template de la page 404 ;)