web-dev-qa-db-ja.com

Joomla 3.xライブラリファイルを編集する(フォーム検証エラーメッセージをカスタマイズするため)

このJoomlaの3.6.5ライブラリファイルのいくつかの行を変更します。

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

これを行う方法を見つけるために多くの場所を検索しましたが、残念ながら、テンプレートでこのライブラリファイルをオーバーライドする方法を段階的に説明する明確な答えはありません。

私が見つけた唯一のことは、ライブラリファイルを上書きできることですが、欠点があります(アップグレード後のセキュリティ上の脅威)。

このライブラリファイルを編集することで、フォーム検証エラーの後に表示されるメッセージを変更することが私の目的です。

Joomlaは "invalid field: field label "ですが、変更して、フィールドの何が間違っているのかを明確に説明して、ユーザーが間違った入力を理解できるようにしたいと考えています。

上記の問題を解決した後、入力ボックスの下に各フィールドのエラーメッセージを表示する方法を知りたいのですが、フォームの上のdivにすべてのエラーを表示するJoomlaのデフォルトの方法は好きではありません。

私を助けてください。

この問題を解決するために検索しなかったWebサイトはありません。

1
user9658

次の2つの方法のいずれかで、JFormクラスを独自のバージョンでオーバーライドできます。

システムプラグイン

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

ただし、onAfterInitialise()が呼び出されるまでに、多くのコアクラスがすでに初期化されているため、このメソッドは機能しません。 JFormがこのカテゴリに該当するかどうかはわかりません。あなたはそれを試してみて、見つける必要があるかもしれません。それがそのカテゴリに当てはまる場合、唯一のルートはコアハックを経由することです...

コアハック

まず、明らかに、ハックの核心は悪です。しかし、プラグインメソッドが機能しない場合(onAfterInitialise()が呼び出される前にクラスが初期化されている場合)には、まだ解決策が見つかりません。

/ROOT/index.phpまたは/ROOT/administrator/index.phpを変更します(バックエンドまたはフロントエンドの実行にこの変更が必要かどうかによって異なります)。このコードを入れてください:

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

直前:

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

(両方のindex.phpファイルにその行があります)

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

次に/libraries/core-overrides/jform.phpを作成します

変更したJFormクラスが保持されます。

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

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

jimport('joomla.filesystem.path');

class JForm
{
    ...
}

他のライブラリオーバーライドの作成は、同じフォルダに追加のjclassname.phpファイルを作成するのと同じくらい簡単です。

[〜#〜] warning [〜#〜]どちらのソリューションが機能するかに関係なく、どちらもメンテナンスの問題を引き起こすことを覚えておいてください。コアハックソリューションでは、Joomlaの更新によりコアハックが取り消される可能性があるため、Joomlaの更新(yuck)のたびにindex.phpファイルを確認する必要があります。次に、どちらのソリューションでも、元のJFormがJoomlaの更新で更新される可能性があります。これは変更後のバージョンには影響しませんが、コアJFormの変更点を確認し、変更後のバージョンを同じ変更で更新する必要がある場合があります。 JFormのわずかに変更されたバージョンがコアJFormの背後にある複数のバージョンであるため、最後に必要なのはサイトエラーまたはセキュリティの脆弱性です。

2
Drew G

残念ながら、Joomlaのデフォルトの検証メッセージを上書きすることはできません。ただし、JavaScriptメッセージを変更する場合は、media/system/js/validate.jsファイルをハッキングできます。 (本当に必要になるまでこれを行わないでください)。

0
aMoL Thite