it-swarm.it

Come ottenere i parametri del modulo all'interno della funzione di supporto e come ottenere i parametri all'interno di un tipo di campo modulo personalizzato?

Parte 1:

Come ottenere i parametri del modulo all'interno della funzione di supporto?

Sto cercando di ottenere gli stessi parametri del modulo all'interno del file helper.

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

E quindi chiamando il metodo getFoo () in un altro file:

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

Dimmi Non-static method ModTestHelper::getFoo() should not be called statically sebbene elenca il risultato per $this.

Ma se uso la funzione statica:

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

Quindi mi direbbe ovviamente una variabile indefinita $this. Mi dispiace anche se non funziona.

Ho anche provato con una nuova istanza invece di ModTestHelper::getFoo() ma senza fortuna.

Parte 2:

Come ottenere i parametri del modulo nel tipo di campo del modulo personalizzato del mio modulo?

Sto cercando di utilizzare il metodo helper all'interno dei campi:

mod_test/models/fields/foo.php


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

Quindi, penso che ci sia un altro modo per ottenere i parametri del modulo nel file helper.

4

1. Come ottenere i parametri dei moduli all'interno della funzione Helper

Stai sbagliando tutto in questo.

Primo, tu non puoi usare $this All'interno di un metodo statico , perché sono indipendenti da qualsiasi oggetto istanziato. I metodi statici possono essere richiamati senza creare un'istanza di un oggetto, quindi non è presente alcun riferimento $this all'interno.

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

Solo per completezza delle cose, puoi usare self::yourClassMethod(); per chiamare altri metodi della tua classe all'interno del tuo metodo statico.

Inoltre, il tuo metodo è all'interno della tua classe, quella che stai costruendo lì. Quello che desideri che $this ti darebbe usandolo nella tua helperClass, non è e non potrebbe essere il $module istanza.

un. Utilizzando un metodo statico:

Per accedere ai parametri del modulo alla tua funzione statica, usa semplicemente $params Come parametro del tuo metodo, quindi passa $params Al tuo metodo quando lo chiami.

Nella tua classe di aiuto:

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

Quindi chiami il tuo metodo statico:

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

Nota :

Ovviamente devi chiamare il tuo metodo statico all'interno di un contesto in cui esistono $ module/$ params, come mod_module.php.

b. Creare un'istanza di un oggetto della tua HelperClass

Vedi le risposte di @ Lodder e @ Rene, entrambe contengono esempi su come usare il tuo metodo se non è statico.


2. Come accedere ai parametri del modulo nel tipo di campo del modulo personalizzato.

Quando ci si trova nel campo del modulo personalizzato, ci si trova all'interno del modulo del modulo. Puoi accedere al modulo 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

Preferisco di gran lunga optare per l'approccio OOP. Questo è quello che uso in una delle mie estensioni. È basato su Ajax, quindi ho una funzione separata per ottenere i parametri.

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

Aggiornare:

Per ottenere i parametri in un campo modulo personalizzato, è possibile utilizzare quanto segue:

campi/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

Il file del modulo principale e il file modello avranno $params variabile creata da Joomla! nucleo.

Se hai metodi statici, passa quella variabile per chiamare la funzione:

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


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

Ma se vuoi usare 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