Как получить параметры модуля внутри вспомогательной функции и как получить параметры внутри настраиваемого типа поля поля?

Часть 1:

Как получить параметры модуля внутри вспомогательной функции?

Я пытаюсь получить те же параметры модуля внутри вспомогательного файла.

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

И затем вызов метода getFoo () в другом файле:

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

Сообщает мне Non-static method ModTestHelper::getFoo() should not be called statically, хотя он перечисляет результат для $this.

Но если я использую статическую функцию:

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 голоса | спросил Bhojendra Nepal 1 J000000Friday16 2016, 09:26:18

3 ответа


5

1. Как получить параметры модулей внутри функции помощника

Вы ошибаетесь в этом.

Во-первых, вы не можете использовать $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);

Примечание:

Очевидно, вам нужно вызвать свой статический метод из контекста, где существуют параметры $ module /$ param, например mod_module.php.

б. Создание объекта вашего 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.
ответил FFrewin 1 J000000Friday16 2016, 09:47:06
5

Я предпочитаю использовать подход ООП. Это то, что я использую в одном из моих расширений. Это 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();

Update:

Чтобы получить параметры в пользовательском поле формы, вы можете использовать следующее:

поля /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();
    }
}
ответил Lodder 1 J000000Friday16 2016, 12:42:10
4

В файле основного файла и файла шаблона будет указана переменная $params, созданная Joomla! ядро.

Если у вас есть статические методы, передайте эту функцию для вызова функции:

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


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

Но если вы хотите использовать ООП:

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();
ответил Rene Korss 1 J000000Friday16 2016, 09:43:39

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132