ヘルパーファイル内で同じモジュールパラメーターを取得しようとしています。
_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()
の代わりに新しいインスタンスも試してみましたが、うまくいきませんでした。
フィールド内でヘルパーメソッドを使用しようとしています。
_mod_test/models/fields/foo.php
//I have called require statement for helper
// file before class declaration
public function getInput()
{
//helper method here
}
_
したがって、ヘルパーファイルでモジュールのパラメーターを取得する別の方法があると思います。
あなたはこれですべて間違っています。
まず、インスタンス化されたオブジェクトから独立しているため、静的メソッド内で$this
を使用することはできません。オブジェクトをインスタンス化せずに静的メソッドを呼び出すことができるため、内部に$this
参照はありません。
http://php.net/manual/en/language.oop5.static.php
完全を期すために、self::yourClassMethod();
を使用して、静的メソッド内でクラスの他のメソッドを呼び出すことができます。
また、あなたのメソッドはあなたがそこに構築しているあなた自身のクラスの中にあります。 $this
を使用して、helperClass内で使用すると、$module
インスタンスにはなりません。
モジュールのパラメーターに静的関数にアクセスするには、メソッドのパラメーターとして$params
を使用し、それを呼び出すときに$params
をメソッドに渡します。
ヘルパークラス:
public static function getFoo ($params) {
return $params;
}
次に、静的メソッドを呼び出します:
$paramsAgain = ModTestHelper::getFoo($params);
明らかに、mod_module.phpのように、$ module/$ paramsが存在するコンテキスト内から静的メソッドを呼び出す必要があります。
@Lodderと@Reneの回答を参照してください。どちらにも、静的メソッドでない場合のメソッドの使用例が含まれています。
カスタムフォームフィールドでは、モジュールのフォーム内にいます。次の方法でフォームにアクセスできます。
$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.
私は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();
}
}
メインモジュールファイルとテンプレートファイルには$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();