web-dev-qa-db-fra.com

Éditez le fichier de bibliothèque Joomla 3.x (pour personnaliser les messages d'erreur de validation de formulaire)

Je souhaite modifier certaines lignes du fichier de bibliothèque 3.6.5 de Joomla:

C:\xampp\htdocs\joomla\libraries\joomla\form\form.php

J'ai cherché dans de nombreux endroits pour savoir comment faire cela, mais malheureusement, il n'y a pas de réponse claire qui explique étape par étape comment remplacer ce fichier de bibliothèque dans mon modèle.

La seule chose que j'ai constatée, c'est qu'il est possible de remplacer les fichiers de la bibliothèque, mais présente des inconvénients (menaces de sécurité après les mises à niveau).

En modifiant ce fichier de bibliothèque, mon objectif est de modifier les messages affichés après les erreurs de validation du formulaire.

Joomla ne montre que "invalid field: field label ", mais je veux le changer et le forcer à expliquer clairement ce qui ne va pas dans le champ pour que l’utilisateur puisse comprendre ce qu’il a mal saisi.

Après avoir résolu le problème ci-dessus, je souhaite savoir comment afficher le message d'erreur de chaque champ sous sa zone de saisie. Je n'aime pas la méthode par défaut de Joomla, qui affiche toutes les erreurs contenues dans un div au-dessus du formulaire.

Aidez-moi, s'il vous plaît.

Il n'y a pas de site Web que je n'ai pas cherché pour résoudre ce problème.

1
user9658

Vous pouvez remplacer la classe JForm par votre propre version de deux manières:

plugin système

Via un plugin System qui déclenche onAfterInitialise ():

/**
* Registers core library overrides.
*
* @return   void
*/
public function onAfterInitialise()
{
    // Override /libraries/joomla/form/form.php 
    JLoader::register('JForm', JPATH_LIBRARIES . '/core-overrides/joomla/form/form.php');
}

Cependant, au moment où onAfterInitialise () est appelée, de nombreuses classes de base ont déjà été initialisées et cette méthode ne fonctionnera donc pas. Je ne sais pas si JForm entre dans cette catégorie ou non. Vous devrez peut-être essayer et découvrir. Si cela tombe dans cette catégorie, votre seul itinéraire est via un hack fondamental ...

Core Hack

Premièrement, évidemment, les piratages sont mauvais. Mais je n'ai pas encore trouvé de solution efficace lorsque la méthode du plugin ne fonctionne pas (lorsque la classe a été initialisée avant l'appel de onAfterInitialise ()).

Modifiez /ROOT/index.php et/ou /ROOT/administrator/index.php (selon si vous avez besoin de cette modification pour les exécutions en back-end ou front-end). Mettez ce code:

require_once JPATH_LIBRARIES . '/core-overrides/coreOverrideAutoloader.php';
spl_autoload_register('CoreOverrideAutoloader::loader', true, true);

directement avant:

require_once JPATH_BASE . '/includes/framework.php';

(les deux fichiers index.php ont cette ligne)

Créez /libraries/core-overrides/coreOverrideAutoloader.php:

<?php
class CoreOverrideAutoloader
{

    public static $requested = array();
    public static $filesLoaded = array();
    public static $filesNotLoaded = array();

    public static function loader($class)
    {
        CoreOverrideAutoloader::$requested[] = $class;

        $filename = __DIR__ . '/' . strtolower($class) . '.php';
        $file=$filename;

        if (!file_exists($file))
        {
            CoreOverrideAutoloader::$filesNotLoaded[] = $file;
            return false;
        }
        include $file;
        CoreOverrideAutoloader::$filesLoaded[] = $file;
    }
}

Créez ensuite /libraries/core-overrides/jform.php

Cela tiendra votre classe JForm modifiée:

<?php
defined('JPATH_PLATFORM') or die;

use Joomla\Registry\Registry;
use Joomla\Utilities\ArrayHelper;

jimport('joomla.filesystem.path');

class JForm
{
    ...
}

Créer tout autre remplacement de bibliothèque est aussi simple que de créer des fichiers jclassname.php supplémentaires dans ce même dossier.

WARNING Quelle que soit la solution qui vous convient, rappelez-vous que les deux créent un problème de maintenance. Avec la solution de piratage de base, les mises à jour de Joomla peuvent annuler le piratage de base. Vous devrez donc vérifier vos fichiers index.php après chaque mise à jour de Joomla (beurk). Deuxièmement, avec l'une ou l'autre solution, il est possible que le formulaire JForm d'origine puisse être mis à jour avec une mise à jour Joomla. Cela n'affectera pas votre version modifiée, mais vous devez toujours vérifier ce qui a été modifié dans le formulaire principal JForm et éventuellement mettre à jour votre version modifiée avec ces mêmes modifications. La dernière chose que vous voulez, ce sont les erreurs de site ou les failles de sécurité, car votre version légèrement modifiée de JForm comporte plusieurs versions derrière le noyau de JForm.

2
Drew G

Malheureusement, vous ne pouvez pas remplacer les messages de validation par défaut de Joomla. Toutefois, si vous souhaitez modifier les messages javascript, vous pouvez pirater le fichier media/system/js/validate.js. (Ne fais pas ça tant que tu ne le veux pas vraiment).

0
aMoL Thite