Article 404 personnalisé

Réduire
X
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • fredjouan
    a crée un sujet [RÉGLÉ] Article 404 personnalisé

    Article 404 personnalisé

    Bonjour,
    Pour créer une page 404 personnalisée, j'ai utilisé le mode d'emploi suivant :
    https://docs.joomla.org/Creating_a_C..._Error_Page/fr
    Mais à l'affichage, j'ai le message suivant :
    if (($this->error->getCode()) == '404') { header('Location: /index.php?option=com_content&view=article&id=202') ; exit; }
    Une idée ?
    Merci d'avance,
    Fred
    Dernière édition par fredjouan à 12/10/2018, 09h30

  • Eddy.vh
    a répondu
    Bonjour.

    Je viens de buter sur une page perso pour un site multilingue.
    En effet, pour avoir une URL propre et réécrite, si on indique l'URL comme précédemment, on se retrouve sur une page qui ne correspond pas forcément à la langue du visiteur.
    J'ai donc fouiné un peu et ai trouvé une solution fonctionnelle en obtenant une URL réécrite dirigée vers la langue utilisateur.

    Prenons en exemple un site français / anglais.
    1. Créons 2 modules de contenus personnalisés contenant chacun ce que l'on souhaite afficher au visiteur, l'un en anglais, l'autre en français.
    2. Affectons ces deux modules à leur langue respective.
    3. Créons la page d'erreur personnalisée et n'y insérons que les deux modules préalablement créés comme suit {loadmodule mod_custom,moduleFR} {loadmodule mod_custom,ModuleEN} (Les noms dépendent de vos créations de modules bien sûr)
    4. Comme langue de la page, sélectionnons "Toutes" afin qu'elle puisse s'afficher dans les deux langues. Le fait d'avoir paramétré le module FR pour la langue française ne lui permettra de s'afficher que sur la partir française du site et vice et versa pour le module anglais.
    5. Créons maintenant un lien masqué vers la page d'erreur et relevons son alias.
    6. Rendons-nous sur la page d'erreur du template et faisons-en une copie sous un autre nom au cas où…
    7. Dans la page error.php, entrons ce qui suit :
    Code PHP:
    <?php
    /**
     * @package     Joomla.Site
     * @subpackage  Template.system
     *
     * [USER="64686"]Copyright[/USER]   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
     * @license     GNU General Public License version 2 or later; see LICENSE.txt
     */

    defined('_JEXEC') or die;

    /** @var JDocumentError $this */

    if (!isset($this->error))
    {
        
    $this->error JError::raiseWarning(404JText::_('JERROR_ALERTNOAUTHOR'));
        
    $this->debug false;
    }

    $app JFactory::getApplication();
    if ((
    $this->error->getCode()) == '404') {
    header('Location: ' .$this->baseURL '404.html'); // dans l'exemple ici, l'alias de l'article est 404, suivi de l'extension html si elle est utilisée dans vos paramètres.
    exit;
    }
    ?>
    Et voilà, on a une page d'erreur personnalisée avec une belle URL réécrite et fonctionnant peu importe la langue du site.

    Testé avec succès sur un site au template créé par TemplateCreator CK et un autre au template HelixUltimate.

    En espérant que ça puisse aider les webmestres gérant des sites multilingues…

    Laisser un commentaire:


  • Eddy.vh
    a répondu
    Mais on peut appeler n'importe quelle URL normalement.

    Laisser un commentaire:


  • GraphiqueDesign
    a répondu
    Envoyé par fredjouan Voir le message
    Salut Eddy,
    Je confirme, l'adresse "https://www.domaine.fr/page-d-erreur-404.html" fonctionne aussi bien que "index.php?com_content..."
    Merci du tuyau !
    Fred
    On peut même appeler une page montée dans SPPB en lieu et place d'un article Joomla !

    Laisser un commentaire:


  • fredjouan
    a répondu
    Salut Eddy,
    Je confirme, l'adresse "https://www.domaine.fr/page-d-erreur-404.html" fonctionne aussi bien que "index.php?com_content..."
    Merci du tuyau !
    Fred

    Laisser un commentaire:


  • Eddy.vh
    a répondu
    GraphiqueDesign

    Le code que j'ai donné ci-dessus fonctionne parfaitement pour moi, je l'ai testé également sur Helix Ultimate et il est opérationnel également.

    J'ai même remplacé l'url par le nom du lien de menu et tout roule…
    Dernière édition par Eddy.vh à 12/10/2018, 13h29

    Laisser un commentaire:


  • chabi01
    a répondu
    Merci

    Laisser un commentaire:


  • fredjouan
    a répondu
    chabi01 : Le fil a été passé sur "Réglé" immédiatement après le problème résolu
    Le petit tuto "Méthode" vient d'être complété pour ne pas indexer et cacher ce lien de menu

    Laisser un commentaire:


  • GraphiqueDesign
    a répondu
    Si quelqu'un (@daneel ?) a réussi a faire cette manipulation sur hélix Ultimate, je suis super intéressé d'en parler avec lui car visiblement, ce n'est pas possible. D'avance, merci.

    Laisser un commentaire:


  • chabi01
    a répondu
    Super
    Passe le sujet en "réglé" si le problème est résolu
    Cordialement,

    Laisser un commentaire:


  • fredjouan
    a répondu
    Bonjour,
    C'est la ligne de code suggérée par Chabi qui fonctionne :
    Code PHP:
      header('Location: ' JRoute::_("index.php?option=com_content&view=article&id=202&itemid=300"false)); 
    Mais en adaptant le script d'Eddy avec la ligne ci-dessus, on obtient le même résultat. C'est la solution que j'ai choisie et le résultat est parfait.
    Je vous remercie infiniment tous les deux pour votre sens du partage.
    Fred

    La méthode :
    - Créer un article "404" avec votre texte personnalisé et une image (optionnelle)
    - Dans cet article, dans l'onglet "Publication", régler "Robots" sur Noindex.
    - Créer un lien de menu "404" pointant sur votre article
    - Dans les paramètres du lien de menu, dans l'onglet "Type de lien", il faut mettre "Afficher dans le menu" sur "non". Votre lien sera "caché".
    - Créer un fichier error.php en indiquant l'ID de votre lien de menu à la place de xxx :
    Code PHP:
     <?php
    /**
     * @package     Joomla.Site
     * @subpackage  Template.system
     *
     * [USER="64686"]Copyright[/USER]   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
     * @license     GNU General Public License version 2 or later; see LICENSE.txt
     */

    defined('_JEXEC') or die;

    /** @var JDocumentError $this */

    if (!isset($this->error))
    {
        
    $this->error JError::raiseWarning(404JText::_('JERROR_ALERTNOAUTHOR'));
        
    $this->debug false;
    }

    $app JFactory::getApplication();
    if ((
    $this->error->getCode()) == '404') {
    header('Location: ' JRoute::_("index.php?option=com_content&view=article&id=xxx"false));exit; // Remplacer les XX par l'ID de l'article erreur 404…
    exit;
    }
    ?>
    - Placer ce fichier à la racine de votre template.
    Faire un test sur une page ou un fichier obsolète.

    PS : petite astuce trouvée par Eddy, en laissant le lien de menu visible quelques instants, vous pouvez récupérer l'URL de la page pour la remplacer par l'adresse de type "index.php?option=com_content&view=article&id=xxx" . Vous aurez ainsi une adresse de type "https://www.domaine.fr/page-erreur-404.html".
    Merci à lui,
    Fred
    Dernière édition par fredjouan à 13/10/2018, 10h45

    Laisser un commentaire:


  • Eddy.vh
    a répondu
    Salut Fred.

    Est-ce le contenu complet de ton fichier error.php ?
    Car j'utilise cette astuce sur un de mes sites et la page d'erreur fonctionne correctement.

    Voilà ce que dit mon fichier error.php entier afin que tu puisses comparer avec le tien.

    Code PHP:
    <?php
    /**
     * @package     Joomla.Site
     * @subpackage  Template.system
     *
     * [USER="64686"]Copyright[/USER]   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
     * @license     GNU General Public License version 2 or later; see LICENSE.txt
     */

    defined('_JEXEC') or die;

    /** @var JDocumentError $this */

    if (!isset($this->error))
    {
        
    $this->error JError::raiseWarning(404JText::_('JERROR_ALERTNOAUTHOR'));
        
    $this->debug false;
    }

    $app JFactory::getApplication();
    if ((
    $this->error->getCode()) == '404') {
    header('Location: /index.php?option=com_content&view=article&id=XX'); // Remplacer les XX par l'ID de l'article erreur 404…
    exit;
    }
    ?>

    Laisser un commentaire:


  • chabi01
    a répondu
    Ok, alors fais les manips suivantes.
    Tu as ton id d'article (ici, le 202)
    Tu vas créer un lien de menu vers ton article. Cela va te donner un élément de menu (imaginons l'élément avec l'id 300).
    Ok.

    Dans ton fichier, tu vas alors remplacer :
    Code:
    header('Location: /index.php?option=com_content&view=article&id=202');
    par
    Code:
    header('Location: /index.php?option=com_content&view=article&id=202&itemid=300');
    (tu remplaces par les id du menu et ton article).

    si cela ne fonctionne pas, tu remplaces alors toute la ligne (en adaptant encore les id) avec une autre écriture possible avec JRoute :
    Code:
    header('Location: ' . JRoute::_("index.php?option=com_content&view=article&id=202&itemid=300", false));
    Essaye...
    Cordialement,

    Laisser un commentaire:


  • fredjouan
    a répondu
    Merci de votre aide.
    Le code vient d'être modifié en ajoutant les balises PHP en début et en fin du fichier :
    Code PHP:
    <?php
    if (($this->error->getCode()) == '404') {
    header('Location: /index.php?option=com_content&view=article&id=202');
    exit;
    }
    ?>
    Le navigateur affiche maintenant une page d'erreur 404, mais pas la mienne ! C'est la page d'erreur par défaut du navigateur, avec le bandeau rouge.
    Le fichier n'est toujours pas conforme ?
    C'est un peu étonnant que la documentation Joomla fournisse un document incomplet.

    Laisser un commentaire:


  • RobertG
    a répondu
    C'est le texte de la doc que Fred a placé dans son fichier, manifestement, puisque dans la doc, cette ligne n'est pas présente.

    Laisser un commentaire:

Annonce

Réduire
1 sur 2 < >

C'est [Réglé] et on n'en parle plus ?

A quoi ça sert ?
La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
Comment ajouter la mention [Réglé] à votre discussion ?
1 - Aller sur votre discussion et éditer votre premier message :


2 - Cliquer sur la liste déroulante Préfixe.

3 - Choisir le préfixe [Réglé].


4 - Et voilà… votre discussion est désormais identifiée comme réglée.

2 sur 2 < >

Assistance au forum - Outil de publication d'infos de votre site

Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

UTILISER À VOS PROPRES RISQUES :
L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

Problèmes connus :
FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

Installation :

1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

Archive zip : https://github.com/AFUJ/FPA/zipball/master

2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
et remplacer www. votresite .com par votre nom de domaine


Exemples:
Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
Télécharger le script fpa-fr.php dans: /public_html/
Pour executer le script: http://www..com/fpa-fr.php

Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
Télécharger le script fpa-fr.php dans: /public_html/cms/
Pour executer le script: http://www..com/cms/fpa-fr.php

En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
Voir plus
Voir moins
Travaille ...
X