it-swarm.com.de

Joomla 3.x-Bibliotheksdatei bearbeiten (um Fehlermeldungen zur Formularüberprüfung anzupassen)

Ich möchte einige Zeilen in der Joomla 3.6.5-Bibliotheksdatei ändern:

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

Ich habe viele Stellen durchsucht, um herauszufinden, wie das geht, aber leider gibt es keine eindeutige Antwort, die Schritt für Schritt erklärt, wie ich diese Bibliotheksdatei in meiner Vorlage überschreiben kann.

Das einzige, was ich gefunden habe, ist, dass es möglich ist, Bibliotheksdateien zu überschreiben, aber es hat seine Nachteile (Sicherheitsbedrohungen nach Upgrades).

Wenn ich diese Bibliotheksdatei bearbeite, ändere ich die Meldungen, die nach Fehlern bei der Formularüberprüfung angezeigt werden.

Joomla zeigt nur "invalid field: field label ", aber ich möchte es ändern und es erzwingen, klar zu erklären, was an dem Feld falsch ist, damit der Benutzer verstehen kann, was er/sie falsch eingibt.

Nachdem ich das obige Problem gelöst habe, möchte ich wissen, wie ich die Fehlermeldung jedes Felds unter dem Eingabefeld anzeigen kann. Mir gefällt Joomlas Standardmethode nicht, bei der alle Fehler in einem Div über dem Formular angezeigt werden.

Bitte hilf mir.

Es gibt keine Website, auf der ich nicht nach dem zu lösenden Problem gesucht habe.

1
user9658

Sie können die JForm-Klasse auf zwei Arten mit Ihrer eigenen Version überschreiben:

System Plugin

Über ein System-Plugin, das onAfterInitialise () auslöst:

/**
* 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');
}

Zum Zeitpunkt des Aufrufs von onAfterInitialise () sind jedoch bereits viele Kernklassen initialisiert worden, sodass diese Methode nicht funktioniert. Ich weiß nicht, ob JForm in diese Kategorie fällt oder nicht. Möglicherweise müssen Sie es versuchen und herausfinden. Wenn es in diese Kategorie fällt, ist Ihre einzige Route über einen Core-Hack ...

Core Hack

Erstens sind Core-Hacks offensichtlich böse. Aber ich habe noch keine funktionierende Lösung gefunden, wenn die Plugin-Methode nicht funktioniert (wenn die Klasse initialisiert wurde, bevor onAfterInitialise () aufgerufen wird).

Ändern Sie /ROOT/index.php und/oder /ROOT/administrator/index.php (je nachdem, ob Sie diese Änderung für Back-End- oder Front-End-Ausführungen benötigen). Gib diesen Code ein:

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

direkt vor:

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

(beide index.php Dateien haben diese Zeile)

Erstellen Sie /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;
    }
}

Dann erstelle /libraries/core-overrides/jform.php

Das wird Ihre modifizierte JForm-Klasse enthalten:

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

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

jimport('joomla.filesystem.path');

class JForm
{
    ...
}

Das Erstellen anderer Überschreibungen von Bibliotheken ist so einfach wie das Erstellen zusätzlicher jclassname.php-Dateien in demselben Ordner.

WARNING Unabhängig davon, welche Lösung für Sie funktioniert, denken Sie daran, dass beide ein Wartungsproblem verursachen. Mit der Core-Hack-Lösung können Joomla-Updates den Core-Hack rückgängig machen, sodass Sie Ihre index.php-Dateien nach jedem Joomla-Update (yuck) überprüfen müssen. Zweitens besteht bei beiden Lösungen die Möglichkeit, dass die ursprüngliche JForm mit einem Joomla-Update aktualisiert wird. Dies wirkt sich nicht auf Ihre geänderte Version aus, Sie müssen jedoch weiterhin prüfen, was in der Kern-JForm geändert wurde, und möglicherweise Ihre geänderte Version mit denselben Änderungen aktualisieren. Das letzte, was Sie möchten, sind Site-Fehler oder Sicherheitslücken, da Ihre leicht geänderte Version von JForm mehrere Versionen hinter der Kern-JForm enthält.

2
Drew G

Leider können Sie die Standard-Überprüfungsmeldungen von Joomla nicht überschreiben. Wenn Sie jedoch die Javascript-Meldungen ändern möchten, können Sie die Datei media/system/js/validate.js hacken. (Mach das erst, wenn du es wirklich willst).

0
aMoL Thite