web-dev-qa-db-fra.com

Comment obtenir les paramètres de module dans la fonction d'assistance et comment obtenir les paramètres dans un type de champ de formulaire personnalisé?

Partie 1:

Comment obtenir les paramètres du module dans la fonction d'assistance?

J'essaie d'obtenir les mêmes paramètres de module dans le fichier d'assistance.

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

Et en appelant la méthode getFoo () dans un autre fichier:

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

Me dit Non-static method ModTestHelper::getFoo() should not be called statically bien que le résultat pour $this Soit indiqué.

Mais si j'utilise une fonction statique:

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

Ensuite, il serait évidemment me dire variable non définie $this. Désolé moi aussi ne fonctionne pas.

J'ai aussi essayé avec une nouvelle instance au lieu de ModTestHelper::getFoo() mais pas de chance.

Partie 2:

Comment obtenir des paramètres de module dans le type de champ de formulaire personnalisé de mon module?

J'essaie d'utiliser la méthode d'assistance à l'intérieur des champs:

mod_test/models/fields/foo.php


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

Donc, je pense qu’il existe un autre moyen d’obtenir les paramètres du module dans le fichier auxiliaire.

4
Bhojendra Rauniyar

1. Comment obtenir les paramètres de modules dans la fonction Helper

Vous vous trompez.

Tout d'abord, vous ne pouvez pas utiliser $this À l'intérieur d'une méthode statique , car ils sont indépendants de tout objet instancié. Les méthodes statiques peuvent être appelées sans instancier un objet, il n'y a donc pas de référence $this.

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

Juste pour la complétude des choses, vous pouvez utiliser self::yourClassMethod(); pour appeler d'autres méthodes de votre classe à l'intérieur de votre méthode statique.

De plus, votre méthode est dans votre propre classe, celle que vous construisez là-bas. Ce que vous souhaitez que le $this vous donne en l'utilisant dans votre helperClass, n'est pas et ne pourrait pas être le $module instance.

une. En utilisant une méthode statique:

Pour accéder aux paramètres du module de votre fonction statique, utilisez simplement le paramètre $params, Puis transmettez le $params À votre méthode lors de son appel.

Dans votre aide Classe:

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

Ensuite, vous appelez votre méthode statique:

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

Remarque :

Évidemment, vous devez appeler votre méthode statique depuis un contexte dans lequel les paramètres $ module/$ existent, comme le fichier mod_module.php.

b. Instanciation d'un objet de votre HelperClass

Voir les réponses de @ Lodder et @ Rene, elles contiennent toutes deux des exemples d'utilisation de votre méthode si elle n'est pas statique.


2. Comment accéder aux paramètres de module dans votre type de champ de formulaire personnalisé.

Lorsque vous êtes dans votre champ de formulaire personnalisé, vous êtes dans le formulaire de votre module. Vous pouvez accéder au formulaire avec:

$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

Je préfère de loin l’approche OOP. C’est ce que j’utilise dans l’une de mes extensions. Elle est basée sur Ajax, de sorte que j’ai une fonction distincte pour obtenir les paramètres.

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

Mise à jour:

Pour obtenir les paramètres dans un champ de formulaire personnalisé, vous pouvez utiliser les éléments suivants:

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

Votre fichier de module principal et votre fichier de modèle auront $params variable créée par Joomla! coeur.

Si vous avez des méthodes statiques, transmettez cette variable à l'appel de fonction:

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


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

Mais si vous voulez utiliser la POO:

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