+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Methode nicht verfügbar - wieso???

  1. #1
    Neu an Board
    Registriert seit
    05.05.2010
    Beiträge
    59
    Bedankte sich
    1
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Frage Methode nicht verfügbar - wieso???

    So, da bin ich wieder

    Nachdem ich das Zusammenspiel der Dateien innerhalb der Module einigermaßen geschnackelt habe, wollte ich mein erstes Modul fertig stellen.

    Dieses liest aus einem Ordner X (wird im Backend festgelegt) die vorhandenen Bilder und stellt diese in bestimmter Form für ein JS zur Verfügung, das daraus eine Slideshow bastelt.

    Habe den php Code erst ohne Joomla getestet und wollte ihn dann portieren.

    Die helper.php:
    PHP-Code:
    <?php
    defined
    ('_JEXEC') or die( 'Restricted access' ); 
      
    class 
    modSlideshowHelper{

      function 
    getText($params){
      
        global 
    $mainframe;
        
        
    $text $params->get('dertext');
        
        
    $ordner $params->get('derordner');
        
        
    $blubb $text '=Text<br/>' $ordner '=Ordner';
        
        return 
    $blubb;
        
      }
      
      public function 
    wosinddiebilder($params) {
              
    $ordner $params->get('derordner')
              
            
    /*if(!is_dir($ordner)) {
                return false; 
            }*/
            
    $files = array();
            
    $handle opendir($ordner);
            while (
    false !== ($filename readdir($handle))) {
                if(
    $filename != '.' && $filename != '..') {
                    
    $files[] = $filename;
                }
            }
            
            return 
    $files;
        }
        
        public function 
    baueliste($params) {
            
    $bilderordner $params->get('derordner');
            
    $ordner_full $params->get('fullsize')
            
    $fileArray $this->wosinddiebilder($bilderordner);
            if(
    $fileArray) {
                
    $fileArray[] = $bilderordner;
                
    $fileArray[] = $ordner_full;
            }
            return 
    $fileArray;
        }
        
    }
    ?>
    Als Fehlermeldung kommt:
    Fatal error: Call to undefined method JDocumentRendererModule::wosinddiebilder() in /Applications/MAMP/htdocs/www.exil.de/modules/mod_slideshow/helper.php on line 40
    Aufruf in der mod_slideshow.php sieht so aus:
    PHP-Code:
    $slideshow modSlideshowHelper::baueliste($params); 
    Verstehe ich nicht - die Methode ist in der Klasse doch vorhanden. Oder geht der Aufruf mit $this->function(); nicht?

    Habe leider keine Infos gefunden ...

    Danke und sonnige Grüße,

    Tom

  2. #2
    Verbringt hier viel Zeit
    Registriert seit
    24.01.2006
    Beiträge
    594
    Bedankte sich
    108
    Erhielt 359 Danksagungen
    in 203 Beiträgen

    Standard

    Bilder liest man in Joomla! mit JFolder::files aus:

    PHP-Code:
    $path ='pfad/zu/den/bildern';
    $filter '\.png$|\.gif$|\.jpg$|\.bmp$|\.ico$';
    $images JFolder::files($path$filter); 
    Helpermethoden ruft man statisch auf. Da in $this das Modulobjekt und nicht das Helperobjekt steht. Hilfreich sind in solchen Fällen auch immer print_r und get_class_methods.

    Und ich habs dir schon im anderen Thread verlinkt: schau dir das Beispieltutorial für Module an. Da siehst du, wie man Helper Dateien einbindet und nutzt.

    global $mainframe; etc. sollte man z.B. auch nicht mehr nutzen. Das ist böses PHP 4, braucht kein Mensch mehr heutzutage.

  3. #3
    Neu an Board
    Registriert seit
    05.05.2010
    Beiträge
    59
    Bedankte sich
    1
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Unglücklich ... ich schnall es nicht

    Hola,

    lang ist's her, nun wage ich mich mal wieder an mein erstes Modul. Ich habe hier und da gelesen, auch natürlich in der genannten Wiki ...

    Aber um es kurz zu machen: Es funzt immer noch nicht und ich verstehe einfach nicht warum!

    Unabhängig davon, ob die Joomla! API Funktionen zum auslesen eines Ordners zur Verfügung stellt oder nicht, dass Problem taucht schon viel früher auf und ist in meinen Augen nicht logisch nachzuvollziehen.

    Fehlermeldung:
    Fatal error: Call to a member function get() on a non-object in /Applications/MAMP/htdocs/www.exil.de/modules/mod_slideshow/helper.php on line 19
    In Zeile 19 steht nichts anderes als:
    PHP-Code:
    $ordner $params->get('derordner'); 
    Ich habe auch eine Kontrollfunktion, die die Parameter als Text ausgibt (s. Code unten). Dort benutze ich die selbe Zeile und es werden die im Backend eingetragenen Werte brav ausgegeben. Wie kann es sein, dass die selbe Zeile in der nächsten Funktion zu einem Fehler führt?

    helper.php:
    PHP-Code:
    <?php
    defined
    ('_JEXEC') or die( 'Restricted access' ); 
      
    class 
    modSlideshowHelper{

      public function 
    getText(&$params){
        
        
    $text $params->get('fullsize');
        
        
    $ordner $params->get('derordner');
        
        
    $blubb $text '=Text<br/>' $ordner '=Ordner';
        
        return 
    $blubb;
        
      }
      
      public function 
    wosinddiebilder(&$params) {
              
    $ordner $params->get('derordner');
            
    $files = array();
            
    $handle opendir($ordner);
            while (
    false !== ($filename readdir($handle))) {
                if(
    $filename != '.' && $filename != '..') {
                    
    $files[] = $filename;
                }
            }
            
            return 
    $files;
        }
        
        public function 
    baueliste(&$params) {
            
    $bilderordner $params->get('derordner');
            
    $ordner_full $params->get('fullsize');
            
    $fileArray modSlideshowHelper::wosinddiebilder($bilderordner);
            if(
    $fileArray) {
                
    $fileArray[] = $bilderordner;
                
    $fileArray[] = $ordner_full;
            }
            return 
    $fileArray;
        }
        
    }
    ?>
    mod_slideshow.php:
    PHP-Code:
    <?php
    defined
    ('_JEXEC') or die('Restricted access');

    // helper.php aufrufen
    JLoader::import('mod_slideshow.helper'JPATH_SITE.DS.'modules');

    //$test = modSlideshowHelper::getText($params);

    $slideshow modSlideshowHelper::baueliste($params);

    require(
    JModuleHelper::getLayoutPath('mod_slideshow'));
    ?>
    default.php:
    PHP-Code:
    <?php 
    defined
    ('_JEXEC') or die( 'Restricted access' );

    //echo $slideshow;
    $indizes count($slideshow) - 1;
    $bilderordner $slideshow[$indizes-1];
    $ordner_full $slideshow[$indizes];

    echo 
    '<h1>' $indizes '</h1>';
        
    $i 0;
    echo 
    '<ul id="mycarousel" class="jcarousel-skin-atlantica">';
    foreach(
    $slideshow as $file) {
        if(
    $i <= $indizes-2) {            
                echo 
    '<li><a href="' $bilderordner '/' $ordner_full '/' $file '" rel="gallery[Portfolio]">';
                echo 
    '<img src="' $bilderordner '/' $file '" />';
                echo 
    '</a></li>';
                
    $i++;
        }
    }
    echo 
    '</ul>';

    echo 
    '<h1>' $test '</h1>';

    ?>
    Wahrscheinlich ist die Lösung ganz einfach und ich beblöde mich einfach nur ... aber ich komm nicht drauf. Wäre toll, mich mich einer mit der Nase drauf stoßen könnte

    Sonnige Grüße,

    Tom

  4. #4
    Neu an Board
    Registriert seit
    05.05.2010
    Beiträge
    59
    Bedankte sich
    1
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Standard mmhhh

    Nabönd,

    keiner einer da draußen, der 'nen Tipp hat?

    Ich bin schon drauf und dran, den Code einfach in die Index des Templates zu schreiben ... wenn das denn überhaupt gehen würde. Dann kann halt kein Ordner ausgewählt werden. Was soll's, Hauptsache, funzt.

    Wobei - ich würde schon gern dieses simple Modul zum Laufen kriegen ... naja.

    Sonnige Grüße,

    Tom

  5. #5
    War schon öfter hier
    Registriert seit
    23.09.2009
    Beiträge
    235
    Bedankte sich
    0
    Erhielt 62 Danksagungen
    in 59 Beiträgen

    Standard

    Code:
    public function wosinddiebilder(&$params) {
    Code:
    $fileArray = modSlideshowHelper::wosinddiebilder($bilderordner);
    string != object
    Tell 'em what they want to hear. That will keep them coming back for more. I 've got some for everyone.

  6. #6
    Neu an Board
    Registriert seit
    05.05.2010
    Beiträge
    59
    Bedankte sich
    1
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Standard mmhhh

    Moin,

    ich möchte nicht unhöflich erscheinen, aber: Was soll mir das sagen?

    Das erklärt nicht wirklich, warum der Aufruf
    PHP-Code:
    $ordner $params->get('derordner'); 
    in der Kontrollfunktion getText funktioniert und in der Funktion wosinddiebilder zu einem Fehler führt. Das ist doch total unlogisch

    Sonnige Grüße,

    Tom

  7. #7
    War schon öfter hier
    Registriert seit
    23.09.2009
    Beiträge
    235
    Bedankte sich
    0
    Erhielt 62 Danksagungen
    in 59 Beiträgen

    Standard

    Fatal error: Call to a member function get() on a non-object in /Applications/MAMP/htdocs/www.exil.de/modules/mod_slideshow/helper.php on line 19
    Es soll dir sagen:
    Code:
    ...
      public function wosinddiebilder($params) {
              $ordner = $params->get('derordner')
    ...
    Hier wird das Modul Parameter Objekt erwartet.

    Code:
    $fileArray = $this->wosinddiebilder($bilderordner);
    Hier übergibst du der Funktion anscheinend einen String, den Ordnernamen oder Pfad?
    Es fragt sich nun, warum du 2x an unterschiedlicher Stelle $ordner = $params->get('derordner') benutzten möchtest.

    Auch ich will wirklich nicht unhöflich sein, jedoch beim nächsten Vorkommen einer solchen Fehlermeldung wirklich lesen was dort steht. Beherzige auch den Hinweis von Bembelimen, Verzeichnisse mittels der JFolder Klasse auszulesen.
    Geändert von Barnum (23.08.2010 um 11:35 Uhr)
    Tell 'em what they want to hear. That will keep them coming back for more. I 've got some for everyone.

  8. #8
    Neu an Board
    Registriert seit
    05.05.2010
    Beiträge
    59
    Bedankte sich
    1
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Standard

    Hola,

    ich dachte, $this->blubb() geht nicht - hat zumindest seinerzeit ebenfalls zu einem Fehler geführt und im Bsp. von Bembelimen erfolgt der Aufruf per :: - how ever.

    Ich werde das ganze Ding heute Abend neu schreiben ... auch mit den Api-Funktionen

    Bin mal gespannt.

    Erstmal Danke ... und ich melde mich

    Sonnige Grüße

  9. #9
    Verbringt hier viel Zeit
    Registriert seit
    24.01.2006
    Beiträge
    594
    Bedankte sich
    108
    Erhielt 359 Danksagungen
    in 203 Beiträgen

    Standard

    Ein bisschen Eigeninitiative wäre echt nicht schlecht...wenn du programmieren willst, solltest du die grundlegenden Debuggingmethoden schon kennen. Ich würde z.B. bei so einem Fehler einfach mal ein print_r auf das $params anwenden und schauen, ob die Variable auch das enthält was sie soll. Und ich kann dir sagen, dass tut sie nicht.

    Schau einfach mal, was die Methode wosinddiebilder($params) erwartet und was du ihr übergibst modSlideshowHelper::wosinddiebilder($bilderordner);

    Der statische Aufruf der Helpermethode ist schon richtig, aber du solltest dann die Methode auch als static deklarieren.

    Prinzipiell sollte beim Programmieren immer das ErrorReporting auf maximum sein und in Joomla! der Debug Modus eingeschaltet werden, dann würdest du bei deinem Fehler auch mehr Infos bekommen.

  10. #10
    Neu an Board
    Registriert seit
    05.05.2010
    Beiträge
    59
    Bedankte sich
    1
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Standard

    Hola,

    ganz ehrlich: Ich bin davon ausgegangen, dass $params schon das Richtige enthält. Wenn ich mit der Testfunktion getText per $ordner = $params->get('derordner') den im Backend ausgewählten Ordner richtig angegeben bekomme, bin ich davon ausgegangen, dass das in der 2. Methode genauso funktioniert.

    Aber wie schon gesagt: Werde das noch mal komplett neu aufsetzten und eure Ratschläge beherzigen

    Ich werde berichten ...

    THX,

    Tom

+ Antworten
Seite 1 von 2 1 2 LetzteLetzte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein