1

ここで説明されているように、joomla のフロントエンドの新しい記事に新しいフィールドを追加しようとしています: http://docs.joomla.org/Adding_custom_fields_to_the_article_component

ただし、フィールドはフォームに表示されません。誰か私に理由を説明できますか?

以下はプラグインファイルに書かれた私のコードです:

function onContentPrepareForm($form, $data)
{
    if (!($form instanceof JForm))
    {
        $this->_subject->setError('JERROR_NOT_A_FORM');
        return false;
    }

    // Add the extra fields to the form.
    // need a seperate directory for the installer not to consider the XML a package when "discovering"
    JForm::addFormPath(dirname(__FILE__) . '/rating');
    $form->loadFile('rating', false);
    return true;
}

私が観察したことの 1 つは、コンポーネント内の com_content フォルダーに固定コードが記述されていることです。これが、フィールドが表示されない理由です。次のファイルを変更しても問題ありませんか: \components\com_content\views\form\tmpl

4

2 に答える 2

2

少なくとも私のバージョンの Joomla 2.5.14 に関して、チュートリアルに別のバグがあることがわかりました。

/rating/rating.xml (マニフェストではなくフォームの説明) で、"

<fields name="rating">

<fields name="attribs">

プラグインが機能するために「attribs」名を使用することには特別なことがあります。

于 2013-11-20T11:43:03.513 に答える
0

上記のコメントの会話に基づいて、チュートリアルの作成が不十分であると思います。ドキュメントにはこれが記載されていません。実際には、CMS が関数を適切に呼び出すために、この関数をクラスにラップする必要があります。

クラス ラッパーがなくても、ファイルは CMS に読み込まれるため、関数の外側にdieorexitステートメントを配置すると、機能することがわかります。関数に入れても、関数は呼び出されないため、呼び出されません。

完全なプラグインは、チュートリアルの下部で参照するチュートリアルから、またはhttp://joomlacode.org/gf/download/trackeritem/28771/75013/plg_content_rating-2.5.0.zipからダウンロードできます。これを見ると、これが実際に機能するために必要な追加の部品が表示されます。以下にも含めています。

他の関数もすべてクラスに入れる必要があります。また、プラグインの名前を変更した場合は、クラス名も更新する必要があります。命名規則は非常に厳密で、プラグイン名 ( rating) とプラグイン グループ ( content) の両方が正しい必要があるため、これはかなり注意が必要です。

コード:

class plgContentRating extends JPlugin
{
    function onContentPrepareForm($form, $data)
    {
        if (!($form instanceof JForm))
        {
            $this->_subject->setError('JERROR_NOT_A_FORM');
            return false;
        }

        // Add the extra fields to the form.
        // need a seperate directory for the installer not to consider the XML a package     when "discovering"
        JForm::addFormPath(dirname(__FILE__) . '/rating');
        if (!$form->loadFile('rating', false)) {
            die('No Form');
        }
        return true;
    }
}

*UPDATE: わかりました。欠落しているクラスだけではありませんでしたが、他の誰かに役立つ場合に備えて残しています。

上記のコードを更新して、loadFile が機能しているかどうかを確認しました。

于 2013-09-11T06:52:04.467 に答える