Klassen und extends Klassen einbinden

Dieses Thema im Forum "Entwicklerforum" wurde erstellt von etron770, 10. Aug. 2013.

  1. etron770

    etron770 Member

    Hallo Till,
    wenn ich das richtig sehe so kann man zusätzliche Klassen so einbinden dass die Datei mit dem gleichen Namen + .inc.php in dem Verzeichnis admin/lib/classes liegt, sie wird dann automatisch zur Laufzeit eingebunden.
    Wo sollte einen Datei angelegt werden wenn ich eine Klasse aus dem Ordner admin/web/sites erweitern will und wie muss der Dateiname lauten, oder muss ich zwangsweise die php datei der Klasse ändern?

    Grüße Knut
     
  2. Till

    Till Administrator

    Ja.

    In dem Verzeichnis gibt es keine erweiterbaren Klassen da dort die dateien liegen auf die Du sozusagen als Endpunk per http zugreifst und keine Libraries. Wenn Du Funktionen in solch eine Datei ändern willst dann musst Du die Datei selbst ändern.
     
  3. etron770

    etron770 Member

    Hallo Till,
    danke für die Antwort,
    noch eine Frage,
    wie geht es wenn ich nun in einer selbst geschriebenen Klasse
    tpl.inc.php -> getVar und setVar benutzen möchte?
    $app->tpl->getVar(...) ist dort ja nicht verfügbar, zumindestens wenn die klassen aus einer tform.php als datasource aufgerufen werden.

    Grüße Knut
     
  4. Till

    Till Administrator

    Wenn Du in Deiner Funktion ein:

    global $app;

    hast, dann ist $app->tpl->getVar(...) dort verfügbar. Aus einer datasource sollte man das aber nicht aufrufen, datasources sind Datenquellen für Formulare, die sollten das formular nicht per variable ändern.
     
  5. etron770

    etron770 Member

    Hallo Till,

    global $app; hab ich dort denn andere Dinge kann ich aufrufen wie z.B global $app->tform . aber z.B die Strings der languag files in den "private $_vars". und die funktionen getvar und setvar sind zwar vorhanden können aber nicht auf die benötigten language files zugreifen.
    ich benötige dort einen übersetzbaren Text, der je nach Inhalt eines Datenbankfeldes verschieden ist, also eigentlich schon einen Datenquelle, die aber je nach Inhalt, mit übersetzbarem Text überschrieben wird. z.B aus 0/1 yes/no oder ja/nein usw.
     
    Zuletzt bearbeitet: 13. Aug. 2013
  6. Till

    Till Administrator

    Nimm zum übersetzen die globale language Funktion in app:

    $app->lng();

    wenn Dein string nicht im Modul gesetzt ist, kannst Du auch De´die form language Datei laden mit:

    $app->load_language_file(....)

    bevor Du $app->lng verwendest.
     
  7. etron770

    etron770 Member

    die $app-> lng() greift ja entweder auf die lib/lang files oder auf die $_SESSION['s']['module']['name'] zu. Wenn ich jetzt eine module aus sites brauche, kann hatte ich versucht die $_SESSION['s']['module']['name'] temporär auf z.B.: sites/ftp_user_edit zu setzten. Da hat aber auch nicht geklappt da ja lng() dann nur auf z.B de.lng oder en.lng zugreift.

    Ich habe es jetzt so gelöst das ich mir in der neuen klasse einen eigene lng() geschrieben habe, bei der ich all language files laden kann
     
  8. Till

    Till Administrator

    Benutz doch einfach ie load funktion wie ich es oben beschrieben habe. Damit kannst du jede beliebige language datei laden.
     
  9. etron770

    etron770 Member

    Hab ich ja aber die lng() hat nicht darauf zugegriffen,
    also habe ich sie in der neuen klasse selber definiert , sodass ich das wordbook angeben kann. Eventuell habe ich etwas falsch verstanden aber mein Problem ist erst einmal gelöst.

    Danke
     
  10. etron770

    etron770 Member

    Sorry wenn ich da nochmal nachfrage

    in der app.inc.php function lng(..

    steht doch immer ... '.$language.'.lng');

    sprich es werden nur die allgemeinen language files benutzt, nicht aber spezielle mit der syntax '.$language.'_igend_etwas.lng');
     
  11. Till

    Till Administrator

    Die $app->lng Funktion verwendet das Array $this->_wb[] um einen Text zu übersetzen und mit der Funktion $app->load_language_file() kannst Du jede beliebige Language datei zusätzlich in dieses Array laden.
     
  12. etron770

    etron770 Member

    Irgendwo habe ich einen Denkfehler: Dass gibt mir limit_shell_user_txt aus anstatt den übersetzten text
    PHP:
    class ownclass {
    function 
    own_function($field$field_value) {
            global 
    $app,$conf;    
            
    $app->load_language_file (ISPC_ROOT_PATH'/web/sites/lib/lang/' $conf ["language"] . '_shell_user.lng' );
            echo 
    $app->lng 'limit_shell_user_txt');
      }      
    }
        
    der Pfad der zusammengebaut wird, ist /var/..../admin/web/sites/lib/lang/de_shell_user.lng und ein cat /var/..../admin/web/sites/lib/lang/de_shell_user.lng zeigt mir auch die Datei an
     
  13. florian030

    florian030 Member

    ich würde das so machen:

    Code:
    function get_error($errmsg) {
        global $app;
        if(isset($app->tform->wordbook[$errmsg])) {
            return $app->tform->wordbook[$errmsg]."<br>\r\n";
        } else {
            return $errmsg."<br>\r\n";
        }
    }
    
    Und die Funktion dann aufrufen. Z.B. so:

    Code:
    if (empty($field_value)) return $this->get_error($validator['errmsg']);
     

Diese Seite empfehlen