mmofacts.com

Instanz unabhängige methode erstellen

gepostet vor 15 Jahre, 7 Monate von BlackScorp

Hi leute wie kann ich in meiner template klasse eine methode erstellen, die für alle instanzen der klasse gleich bleibt? also ich will eine methode erstellen setCharset($charset) und setTeplateDir($dir). zur zeit mache ich das folgendermaßen:

$masterTemplate = new Template('tpldir/','utf-8');
$leftTemplate = new Tempalte('tpldir/','utf-8');
$mainTemplate = new Template('tpldir/','utf-8');
$leftTemplate->setFile('lefttpl.html');
$mainTemplate->setFile('maintpl.html')
$masterTemplate->setFile('mastertpl.html');
$masterTemplate->setVariables('{left}','{middle}','{right}');
$masterTemplate->setValues($leftTemplate->show(),$mainTemplate->show(),$rightTemplate->show());
echo 
$masterTemplate->show();
wie könnte ich das jetzt so machen dass ich mit einer methode das template verzeichnis und charset fordefeniere und es dann in allen instanzen gleich bleib ohne dass ich das jedesmal neu im construct setzen muss
MFG

gepostet vor 15 Jahre, 7 Monate von DrakeL

Hi,

indem du statische Variablen und statische Methoden nutzt? :)

PHP:

class Template()
{
private static $charset = '';
private static $templatedir = '';
public static setCharset($charset)
{
self::$charset = $charset;
}
public static setTemplatedir($templatedir)
{
self::$templatedir = $templatedir;
}
}

Innerhalb der Instanzmethoden kannst dann per "self::$charset" und "self::$templatedir" darauf zugreifen.

gepostet vor 15 Jahre, 7 Monate von BlackScorp

ich habe das jetzt mit construct und standartwerten gelöst scheint auch zu klappen

public function __construct($tpldir = 'layout/',$charset = 'utf-8',$delimeter=array('{','}') )
{
$this->templateDir = $tpldir;
$this->charset = $charset;
$this->delimeter[0] = $delimeter[0];
$this->delimeter[1] = $delimeter[1];
}

somit kann ich dann auf wunsch die variablen verändern oder macht man es so nicht??

gepostet vor 15 Jahre, 7 Monate von DrakeL

Musst du doch wissen was du willst. Bei statischen Variablen kannst du die Vorgaben für ALLE Instanzen ändern. Bei Defaultwerten können zwei Instanzen verschiedene Vorgaben haben. Sind zwei völlig unterschiedliche Verhaltensweisen, welche du davon brauchst musst du wissen.

gepostet vor 15 Jahre, 7 Monate von BlackScorp

naja ok also ich brauche da meine methode da es manchmal sein kann dass sich html files mal wo anders befinden(zb das admin pannel) auf jedenfall danke für die antwort

MFG

gepostet vor 15 Jahre, 7 Monate von Redrick

glaube du machst dir das unnötig kompliziert

1. wie oft kommt es vor dass du charset und  marker-delimeter ändern musst? IMHO wäre die feste standard in der template klasse selbst abolut ausreichend

2. für den fall, dass du deine vorlagen aus mehreren ordners auslesen muss gebe es mehrere elegantere lösungen

zb du setzt das $tpldir einfach eben höher dann musst du zwar längere pfade bei fetch() angeben (z.B. "layout/game_index.tpl" und halt "admin/user.tpl" im Fall des Admin interfaces)  aber wie oft kommt das schon vor

oder auch du modifizierst die fetch, dass die einen einen optionalen parameter dazu packst ($admin=false) und diesen im flal der admin vorlagen übergibst, damit die fetch dann klassenintern den pfad switcht

Ich hoffe du findest in diesen tipps deine inspiration

gepostet vor 15 Jahre, 7 Monate von BlackScorp

irgendwie hast du recht ich habe das so gemacht wie du es beschrieben hast also layoutdir gesetzt. aber mal ne andere frage. ich habe eine Page klasse in der seiten deklariert sind mit ihren include pfade und nötigen rechte um die anzeigen zu lassen und in der page klasse soll geprüft werden exestiert die seite, exesteiert die php datei und habe ich die nötigen rechte. die rechte sind in session abgespeichert und ich möchte halt vergleichen ob ein array im anderen exestiert zz sieht das ganze so aus:

private function checkRights($rights)
{
$pageRights = $rights;// da steht zb array('user') oder array('admin')
$userRights = $_SESSION['group']; // hier steht array('guest','user','mod')
foreach($userRights as $uRights)
{
    foreach($pageRights as $pRights)
    {
        if($uRights == $pRights){
            return true;
        }else{
            return false;
        }
    }
}

und irgendwie funktioniert es nicht so habe ich wiedermal um 10 ecken gedacht??

MFG

gepostet vor 15 Jahre, 7 Monate von Redrick

 Original von BlackScorp

habe ich wiedermal um 10 ecken gedacht??

 also das mit pagerights hätte ich wohl mit kopf zugenickt

aber eigentlich müsste dein konstrukt funktionieren zumidnest mit den beispieldaten von dir müsste true mal ausschlagen

ganz nebenbei schau dir mal die array-funktionen von php an , sowas wie in_array oder auch mal array_intersect usw, die ersparen dir jede  menge code

gepostet vor 15 Jahre, 7 Monate von BlackScorp

naja mit in_array habe ich schon probiert und es hat auch nicht funktioniert das sah so aus:

$_SESSION['group'] = array('guest','user','admin');

$pageRights = array('user');

private function checkRights()

return in_array($pageRights, $_SESSION['group']);

wahrscheinlich habe ich irgendwo anders im script ein fehler ich werde mir das mal genauer anschauen

gepostet vor 15 Jahre, 7 Monate von Redrick

will nix sagen aber bist du dir sicher dass $_SESSION['group'] denn auch wirklich was drinsteht, wenn abgleich stattfindet?

gepostet vor 15 Jahre, 7 Monate von BlackScorp

ja aber anscheinend kann ich mit in_array nur in dem array nach einem string durchsuchen und nicht nach nem ganzen array. als ich $pageRight = 'user'; gemacht habe, hat es so funktioniert wie ich es wollte

gepostet vor 15 Jahre, 7 Monate von Snake

Also in deinem Fall würde ich die Schnittmenge der Arrays(array_intersect) mit $pageRight vergleichen.

Wenn die beiden gleich sind hast du dein TRUE.

Auf diese Diskussion antworten