Eigene Erweiterung, Wert aus der tmpl/default mitgeben an die funktion

  • Joomla Version
    5.0.0
    PHP Version
    PHP 8.1.x
    Hoster
    local

    Hallo Joomla Gemeinde.

    Bin am Neuaufbau einer Komponente für joomla 4.4 - 5.0.0.


    Es geht um darum dass ich in der Datei Administrator/components/com_girls/tmpl/schedule/default.php bei der Ausgabe einen Wert (Zahl) an die Funktion mitgeben möchte. Lösche ich die Variable $nwoche und ebenso die Klammer mit dem Wert so bekomme ich die Woche ausgegeben. Wie um himmelswillen kann ich in der Ausgabe eine Zahl mitgeben. Habe schon vieles versucht.

    Das müsste doch eigentlich simpel einfach sein.


    Administrator/components/com_girls/tmpl/schedule/default.php


    PHP
    <?php  echo $this->woche(0) ;?>
    unter Joomla 3 bis Joomla 4.3 konnte ich das so lösen, die Funktion war identisch.
    <?php echo HotGirlsModelSchedule::getWoche(0);?>

    Administrator/components/com_girls/src//Model/ScheduleModel.php:


    Code
    public  function getWoche($nwoche)
    {
    $woche = date("W") + $nwoche;
    return $woche;
    }

    Administrator/components/com_girls/src//View/Schedule/HtmlView.php

    Code
    public function display($tpl = null)
    {
    ......
    $this->woche = $model->getWoche();
    
    ....
    }

    Fehlermeldung:


    Ich hoffe mir kann geholfen werden X/


    Liebe Grüsse aus der Schweiz

    Beat

  • PS: in diesem Fall, schlecht gewähltes Beispiel, mache ich es natürlich einfach ganz einfach, jedoch geht es mir primär darum, wie kann ich Werte in Funktionen einspeisen??

    PHP
    <?php  echo ($this->woche)+1 ;?>
    <?php  echo ($this->woche)+2 ;?>
    usw..
  • Nebenfund: Das erste was mir auffällt, ist das du im ersten Code die Methode/Funktion statisch aufrufst, sie aber nicht statisch deklariert ist, was so aussähe

    Code
    public static function getWoche($nwoche)

    Und im 2. Code, die bzgl. obigen Problems OK ist bzgl. deines Beispiels 3, weil du sie nicht statisch aufrufst, fehlt halt ein Defaultwert, wenn du

    Code
    $this->woche = $model->getWoche();

    auch ohne Werteübergabe verwenden willst, was du ja in Code 3 tust.

    Code
    public  function getWoche($nwoche = 0)

    Falls du keinen anderen Wert übergibst, wird 0 genommen und du erhälst die pure Woche.


    Das bemängelt die PHP-Meldung jedenfalls.

  • Hallo Meister

    Habe es mal so versucht:

    In der Administrator/components/com_girls/src//Model/ScheduleModel.php:

    Code
    public  function getWoche($nwoche = 0)
    {
    $woche = date("W") +$nwoche;
    return $woche;
    }

    Hier: Administrator/components/com_girls/src//View/Schedule/HtmlView.php

    Administrator/components/com_girls/tmpl/schedule/default.php

    PHP
    <?php   echo $this->woche(2) ;?>

    Dann kommt wieder diese da:

    0 Call to undefined method Joomla\Component\Girls\Administrator\View\Schedule\HtmlView::woche()

    Der Pfad finde ich sonderbar, müsste das nicht lauten lauten, Joomla\Administrator\components\com_girls\src\view\schedule\HtmlView.php



    PHP
    <?php   echo $this->woche ;?> so greift der standard 0 und die Woche (46) wird korrekt ausgegeben.

    Ich krieg einfach keine Werte in die Funktion. Da stimmt vermutlich etwas grundsätzlich nicht. Die Klasse wird gefunden, die Funktion ebenso. Aber nene sie will nix annehmen. Was mache ich bloss falsch, werde noch Irre :) oder bin es schon. Mit Joomla 4.3 klappte alles, nach dem Update auf 4.4 Crash im Backend weil JViewLegacy Mode abgeschnitten wurde.

  • Code
    $this->woche = $model->getWoche();

    wird nicht dazu führen, dass du dann im Layout /tmpl/default.php eine Funktion(!!!!) woche() verwenden kannst. Du müsstest schon auch dort das $model bekannt machen.


    Keine Ahung ohne davor sitzen, ob im Layout auch $model = $this->getModel() funktioniert und dann $model->getWoche(2)???


    Auch keine Ahnung, ob man in der HtmlView.php

    ein $this->model = $model; reinbasteln darf und dann im Layout $this->model->getWoche(2)???


    Für mich gaaanz persönlich gehört so eine Methode auch eher in einen Helper, der dann sowohl in der HtmlView.php als auch im Layout verwendet werden kann.

    0 Call to undefined method Joomla\Component\Girls\Administrator\View\Schedule\HtmlView::woche()

    Der Pfad finde ich sonderbar, müsste das nicht lauten lauten, Joomla\Administrator\components\com_girls\src\view\schedule\HtmlView.php

    Das in erster Zeile ist der Namespace des Views und nicht der Serverpfad zum View. Schon richtig so. Man sieht ggf. auch gleich, ob man bei den Namespaceangaben gemurxt hat.

  • :S:):S

    Hallo Volli,

    danke vielmals. Genau so lässt es sich bewerkstelligen. Wahrscheinlich gäbe es elegantere Methoden aber so kann ich endlich mit den anderen Funktionen arbeiten die ich noch brauche.

    Die Funktionen in Administrator/components/com_girls/src//Model/ScheduleModel.php
    Beispiel

    Code
    public  function getWoche($nwoche = 0)
    {
    $woche = date("W") +$nwoche;
    return $woche;
    }

    Administrator/components/com_girls/src//View/Schedule/HtmlView.php

    Code
    public function display($tpl = null)
    {
        $this->woche = $model->getWoche();
    .......

    Im Layout: Administrator/components/com_girls/tmpl/schedule/default.php hier bekannt machen wie du es gesagt hast


    PHP
    /* Funktionen bekanntmachen im Kopfbereich */
    $woche = $this->getModel();
    
    
    /// und dann kann mit der Funktion gearbeitet werden, im Beispiel wird die Zahl der nächsten 
    <?php echo $woche->getWoche() // 0 also diese Woche;?> 
    
    <?php echo $woche->getWoche(1) // 1 nächste Woche;?> 

    Diese Funktion ist lediglich ein Beispiel, Ziel erreicht, so kann ich die Funktionen welche ich in der Komponente für damals Joomla 2.5 in Joomla5 nutzen.

    Wenn jemand findet ganz doof, die Funktionen gehören in den Helper weil schneller, besser übersichtlicher sicherer dann bin ich froh um Infos, danke.


    Herzlichen Dank an Volli , GHSVS.de


    Beat

    webgeist.ch