it-swarm.com.de

Wie erhält man Modulparameter in der Hilfsfunktion und wie erhält man Parameter in einem benutzerdefinierten Formularfeldtyp?

Teil 1:

Wie bekomme ich Modulparameter in die Hilfsfunktion?

Ich versuche, die gleichen Modulparameter in der Hilfsdatei zu erhalten.

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

Und dann die getFoo () -Methode in einer anderen Datei aufrufen:

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

Sagt mir Non-static method ModTestHelper::getFoo() should not be called statically, obwohl es das Ergebnis für $this Auflistet.

Aber wenn ich statische Funktion benutze:

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

Dann würde es mir natürlich undefinierte Variable $this Sagen. Sorry selbst auch nicht.

Ich habe es auch mit einer neuen Instanz anstelle von ModTestHelper::getFoo() versucht, aber kein Glück.

Teil 2:

Wie erhalte ich Modulparameter innerhalb des benutzerdefinierten Formularfeldtyps meines Moduls?

Ich versuche, die Hilfsmethode in Feldern zu verwenden:

mod_test/models/fields/foo.php


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

Also, ich denke, es gibt einen anderen Weg, um die Parameter des Moduls in die Hilfedatei zu bekommen.

4

1. So erhalten Sie die Modulparameter in der Hilfefunktion

Damit machst du alles falsch.

Erstens können Sie $this Nicht innerhalb einer statischen Methode verwenden, da sie unabhängig von instanziierten Objekten sind. Statische Methoden können aufgerufen werden, ohne ein Objekt zu instanziieren, so dass keine $this Referenz enthalten ist.

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

Der Vollständigkeit halber können Sie self::yourClassMethod(); verwenden, um andere Methoden Ihrer Klasse innerhalb Ihrer statischen Methode aufzurufen.

Außerdem befindet sich Ihre Methode in Ihrer eigenen Klasse, die Sie dort erstellen. Was du dir wünschst, das $this würde dir durch die Verwendung in deiner helperClass das $module Instanz.

ein. Mit einer statischen Methode:

Um auf die Parameter des Moduls für Ihre statische Funktion zuzugreifen, verwenden Sie einfach den $params Als Parameter Ihrer Methode und übergeben Sie den $params Beim Aufruf an Ihre Methode.

In Ihrer Helferklasse:

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

Dann rufen Sie Ihre statische Methode auf:

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

Hinweis :

Offensichtlich müssen Sie Ihre statische Methode aus einem Kontext aufrufen, in dem das $ module/$ params existiert, wie z. B. mod_module.php.

b. Instanziieren eines Objekts Ihrer HelperClass

In den Antworten von @ Lodder und @ Rene finden Sie Beispiele zur Verwendung Ihrer Methode, wenn diese nicht statisch ist.


2. So greifen Sie auf Modulparameter in Ihrem benutzerdefinierten Formularfeldtyp zu.

Wenn Sie sich in Ihrem benutzerdefinierten Formularfeld befinden, befinden Sie sich innerhalb des Formulars Ihres Moduls. Sie können auf das Formular zugreifen mit:

$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

Ich bevorzuge den Ansatz OOP. Dies ist das, was ich in einer meiner Erweiterungen verwende. Es basiert auf Ajax, daher habe ich eine separate Funktion, um die Parameter abzurufen.

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

Aktualisieren:

Um die Parameter in einem benutzerdefinierten Formularfeld abzurufen, können Sie Folgendes verwenden:

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

Ihre Hauptmoduldatei und Vorlagendatei haben $params Variable erstellt von Joomla! Ader.

Wenn Sie statische Methoden haben, übergeben Sie diese Variable an den Funktionsaufruf:

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


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

Aber wenn Sie OOP verwenden möchten:

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