web-dev-qa-db-ja.com

ヘルパー関数内のモジュールパラメーターを取得する方法とカスタムフォームフィールドタイプ内のパラメーターを取得する方法?

パート1:

ヘルパー関数内のモジュールパラメーターを取得する方法?

ヘルパーファイル内で同じモジュールパラメーターを取得しようとしています。

_class ModTestHelper
{
    public function getFoo () {
        return $this;
    }
}
_

次に、別のファイルでgetFoo()メソッドを呼び出します。

_$result = ModTestHelper::getFoo();
print_r($result);
_

_$this_の結果を一覧表示しますが、Non-static method ModTestHelper::getFoo() should not be called staticallyを教えてくれます。

しかし、静的関数を使用する場合:

_public static function getFoo () {
    return $this;
}
_

次に、未定義の変数_$this_を明らかに教えてくれます。申し訳ありませんが自分も動作しません。

ModTestHelper::getFoo()の代わりに新しいインスタンスも試してみましたが、うまくいきませんでした。

パート2:

モジュールのカスタムフォームフィールドタイプ内のモジュールパラメーターを取得する方法

フィールド内でヘルパーメソッドを使用しようとしています。

_mod_test/models/fields/foo.php


//I have called require statement for helper 
// file before class declaration
public function getInput()
    {
        //helper method here
    }
_

したがって、ヘルパーファイルでモジュールのパラメーターを取得する別の方法があると思います。

4

1.ヘルパー関数内のモジュールパラメーターを取得する方法

あなたはこれですべて間違っています。

まず、インスタンス化されたオブジェクトから独立しているため、静的メソッド内で$thisを使用することはできません。オブジェクトをインスタンス化せずに静的メソッドを呼び出すことができるため、内部に$this参照はありません。

http://php.net/manual/en/language.oop5.static.php

完全を期すために、self::yourClassMethod();を使用して、静的メソッド内でクラスの他のメソッドを呼び出すことができます。

また、あなたのメソッドはあなたがそこに構築しているあなた自身のクラスの中にあります。 $thisを使用して、helperClass内で使用すると、$moduleインスタンスにはなりません。

a。静的メソッドを使用する:

モジュールのパラメーターに静的関数にアクセスするには、メソッドのパラメーターとして$paramsを使用し、それを呼び出すときに$paramsをメソッドに渡します。

ヘルパークラス:

public static function getFoo ($params) {
    return $params;
}

次に、静的メソッドを呼び出します:

$paramsAgain = ModTestHelper::getFoo($params);

注意 :

明らかに、mod_module.phpのように、$ module/$ paramsが存在するコンテキスト内から静的メソッドを呼び出す必要があります。

b。 HelperClassのオブジェクトをインスタンス化する

@Lodderと@Reneの回答を参照してください。どちらにも、静的メソッドでない場合のメソッドの使用例が含まれています。


2.カスタムフォームフィールドタイプのモジュールパラメータにアクセスする方法。

カスタムフォームフィールドでは、モジュールのフォーム内にいます。次の方法でフォームにアクセスできます。

$moduleFormObject = $this->form;
$moduleParams = $this->form->getValue('params');
$moduleID = $this->form->getValue('id');
$moduleTitle = $this->form->getValue('title');
$moduleParamsMyField = $this->form->getValue('MyField', 'params'); // * params is the container of where the MyField is sitting.
6
FFrewin

私はOOPアプローチに行くのを好みます。これは私の拡張機能の1つで使用しています。これはAjaxベースなので、パラメーターを取得するための別の関数を持っています。

helper.php:

class ModSomethingHelper
{
    private $params = null;

    public function __construct($title)
    {
        $this->params = $this->getParams($title);
    }

    public function getParams($title = null)
    {
        jimport('joomla.application.module.helper');
        $module = JModuleHelper::getModule('mod_something', $title);
        $moduleParams = new JRegistry;
        $moduleParams->loadString($module->params);
        return $moduleParams;
    }

    public function test()
    {
        return $this->params->get('something');
    }
}

mod_something.php:

// Include the helper
require_once dirname(__FILE__) . '/helper.php';

// Get the title of the module to pass through the constructor
$title = $module->title;

// Initiate the helper
$helper = new ModSomethingHelper($title);

Echo result from the test() function
echo $helper->test();

更新:

カスタムフォームフィールドのパラメーターを取得するには、以下を使用できます。

fields/myfield.php:

class JFormFieldMyfield extends JFormField
{
    protected $type = 'Myfield';

    protected function getInput()
    {
        $input = JFactory::getApplication()->input;

        // Get and initiate helper
        require_once dirname(__FILE__) . './../helper.php';
        $helper = new ModSomethingHelper($input->get('id'));

        // Get params object
        $params = $helper->getParams();
    }
}
6
Lodder

メインモジュールファイルとテンプレートファイルには$params Joomla!によって作成された変数芯。

静的メソッドがある場合は、その変数を関数呼び出しに渡します。

class ModTestHelper
{
    public static function getFoo ($params) {
        return $notthis; // whatever your return
    }
}


$result = ModTestHelper::getFoo($params);

しかし、OOPを使用したい場合:

class ModTestHelper
{
    // Holds params
    public $params = null;

    public function __construct($params) {
        $this->params = $params;
    }

    public function getFoo () {
        // Params
        $someParam = $this->params->get('paramName');

        return $notthis; // whatever your return
    }
}


$helper = new ModTestHelper($params);
$result = $helper->getFoo();
4
Rene Korss