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.
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.
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.
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);
Évidemment, vous devez appeler votre méthode statique depuis un contexte dans lequel les paramètres $ module/$ existent, comme le fichier mod_module.php.
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.
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.
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();
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();
}
}
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();