it-swarm-es.com

¿Cómo obtener los parámetros del módulo dentro de la función auxiliar y cómo obtener parámetros dentro de un tipo de campo de formulario personalizado?

Parte 1:

¿Cómo obtener los parámetros del módulo dentro de la función auxiliar?

Estoy tratando de obtener los mismos parámetros del módulo dentro del archivo auxiliar.

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

Y luego llamando al método getFoo () en otro archivo:

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

Me dice Non-static method ModTestHelper::getFoo() should not be called statically aunque enumera el resultado para $this.

Pero si uso la función estática:

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

Entonces, obviamente, me diría una variable indefinida $this. Lo siento, yo tampoco trabajo.

También probé con una nueva instancia en lugar de ModTestHelper::getFoo() pero no tuve suerte.

Parte 2:

¿Cómo obtener los parámetros del módulo dentro del tipo de campo de formulario personalizado de mi módulo?

Estoy tratando de usar el método auxiliar dentro de los campos:

mod_test/models/fields/foo.php


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

Entonces, creo que hay otra forma de obtener los parámetros del módulo en el archivo auxiliar.

4
Bhojendra Rauniyar

1. Cómo obtener los parámetros de los módulos dentro de la función auxiliar

Estás yendo todo mal con esto.

Primero, usted no puede usar $this Dentro de un método estático , porque son independientes de cualquier objeto instanciado. Los métodos estáticos se pueden invocar sin crear instancias de un objeto para que no haya $this referencia dentro.

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

Solo por lo completo de las cosas, puede usar self::yourClassMethod(); para llamar a otros métodos de su clase dentro de su método estático.

Además, su método está dentro de su propia Clase, la que está construyendo allí. Lo que desea que $this le daría al usarlo dentro de su helperClass, no es ni podría ser el $module instancia.

a. Usando un método estático:

Para acceder a los parámetros del módulo a su función estática, simplemente use $params Como parámetro de su método, y luego pase el $params A su método cuando lo llame.

En su clase auxiliar:

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

Entonces llama a su método estático:

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

Nota :

Obviamente, debe llamar a su Método estático desde un contexto donde existen los $ module/$ params, como mod_module.php.

si. Crear instancias de un objeto de su HelperClass

Vea las respuestas de @ Lodder y @ Rene, ambas contienen ejemplos sobre cómo usar su método si no es estático.


2. Cómo acceder a los parámetros del módulo en su tipo de campo de formulario personalizado.

Cuando está en su campo de formulario personalizado, está dentro del formulario de su módulo. Puede acceder al formulario con:

$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

Prefiero utilizar el enfoque OOP. Esto es lo que uso en una de mis extensiones. Está basado en Ajax, así que tengo una función separada para obtener los parámetros.

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();

Actualizar:

Para obtener los parámetros en un campo de formulario personalizado, puede usar lo siguiente:

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

El archivo del módulo principal y el archivo de plantilla tendrán $params variable creada por Joomla! núcleo.

Si tiene métodos estáticos, pase esa variable a la función call:

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


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

Pero si quieres usar 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