ilch Forum » Ilch Clan 1.1 » Design und Templates » Template Ausgabe

Geschlossen
  1. #1
    User Pic
    Outi77 Mitglied
    Registriert seit
    31.03.2013
    Beiträge
    1.337
    Beitragswertungen
    143 Beitragspunkte
    Hallo zusammen,
    ich möchte gerne wissen, ob folgendes möglich ist:
    Code in Datei xxx.php
    $tpl = new tpl(yyy.htm);
    $tpl->set(pnr, $gAnz);

    Ich möchte gerne eine Variable, die in Datei xxx.php gefüllt wird,
    zusätzlich in einem anderen Template ausgeben, nämlich yyy.htm.
    Wie kann ich das bewerkstelligen?

    Danke für die Hilfe!
    Gruß Outi


    verwendete ilchClan Version: 1.1 P
    Die richtige Formulierung eines Problems ist nicht selten bereits die halbe Lösung.
    »Albert Einstein«
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.622
    Beitragswertungen
    1192 Beitragspunkte
    Man müsste schon ein bisschen mehr sehen.

    Nur als Aufbau-Beispiel:
    <?php 
    defined ('main') or die ( 'no direct access' );
    
    // Header definieren
    $title = $allgAr['title'].' :: Testseite';
    $hmenu = 'Testseite';
    $design = new design ( $title , $hmenu );
    $design->header();
    
    // Template definieren hier: include/templates/testtemplate.htm
    $tpl = new tpl ( 'testtemplate' );
    
    // Ausgabe bis zum ersten EXPLODE
    $gruss = 'Hallo Du, ';
    $tpl->set('gruss', $gruss);
    $tpl->out(0); 
    
    // Ausgabe nach dem ersten EXPLODE
    $variable = 'das ist ein Test.';
    $tpl->set('ausgabe', $variable);
    $tpl->out(1);
    
    // Ende
    $design->footer();
    ?>


    <p>{gruss}</p>
    {EXPLODE}
    <p>{ausgabe}</p>
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    Outi77 Mitglied
    Registriert seit
    31.03.2013
    Beiträge
    1.337
    Beitragswertungen
    143 Beitragspunkte
    OK also ich hatte Dich ja neulich nach der Anzahl neuer Posts gefragt
    und wie ich die in das Login-Panel übertragen kann. Da hatte ich einfach den query in
    der panel_login erneut ausgeführt.
    Problematik hierbei, dass die neuen Posts nicht korrekt gespeichert werden.
    Also habe ich mir den ilchBB-Forenmod hergenommen und diese Funktion versucht heraus-
    zunehmen. DB hab ich dementsprechend erweitert.
    In der include/contents/forum/search.php wird die Anzahl der neuen Beiträge ermittelt.
    Diese Variable $gAnz brauche ich jetzt in der panel_login.htm
    Gruß Markus
    Die richtige Formulierung eines Problems ist nicht selten bereits die halbe Lösung.
    »Albert Einstein«
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.622
    Beitragswertungen
    1192 Beitragspunkte
    Da ich jetzt nicht nachvollziehen kann, was Du miteinander verknüpft hast hier mal ein Beispiel für neue Forumbeiträge und neue Gästebucheinträge seit dem letzten Besuch.

    <?php 
    defined ('main') or die ( 'no direct access' );
     
    // Header definieren
    $title = $allgAr['title'].' :: Testseite';
    $hmenu = 'Testseite';
    $design = new design ( $title , $hmenu );
    $design->header();
     
    // Template definieren hier: include/templates/testtemplate.htm
    $tpl = new tpl ( 'testtemplate' );
    $tpl->out(0);
    
    // Ein Jahr zurück
    $maxTime = 3600 * 24 * 360;
    
    // Neue Forumeinträge seit letztem Login
    $NEWforum = db_result(db_query("SELECT COUNT(DISTINCT a.id) 
    					FROM prefix_topics a 
    					LEFT JOIN prefix_forums b ON b.id = a.fid
    					LEFT JOIN prefix_posts c ON c.tid = a.id
    					LEFT JOIN prefix_user d ON c.erstid = d.id
    					LEFT JOIN prefix_groupusers vg ON vg.uid = ". $_SESSION['authid'] ." AND vg.gid = b.view
    					LEFT JOIN prefix_groupusers rg ON rg.uid = ". $_SESSION['authid'] ." AND rg.gid = b.reply
    					LEFT JOIN prefix_groupusers sg ON sg.uid = ". $_SESSION['authid'] ." AND sg.gid = b.start
    					WHERE (((b.view >= ". $_SESSION['authright'] ." AND b.view <= 0) OR 
    							(b.reply >= ". $_SESSION['authright'] ." AND b.reply <= 0) OR
    							(b.start >= ". $_SESSION['authright'] ." AND b.start <= 0)) OR
    							(vg.fid IS NOT NULL OR rg.fid IS NOT NULL OR sg.fid IS NOT NULL OR ". $_SESSION['authright'] ." = -9))
    					AND c.time >= ". (time() - $maxTime) ." AND c.time >= ". $_SESSION['lastlogin']),0);
    					
    // Neue Gästebucheinträge seit letztem Login
    $NEWgbook = db_result(db_query("SELECT COUNT(DISTINCT id) 
    					FROM prefix_gbook WHERE time >= ". (time() - $maxTime) ." 
    					AND time >= ". $_SESSION['lastlogin']),0);
    
    // Ausgabe
    $tpl->set('neuforum', $NEWforum);
    $tpl->set('neugbook', $NEWgbook);
    $tpl->out(1); 
    
    // Ende
    $design->footer();
    ?>


    Was gibt es neues seit deinem letzten Besuch:
    {EXPLODE}
    <p>Forenbeiträge: {neuforum}</p>
    <p>Gästebuch: {neugbook}</p>


    Ansonsten müsste man mal den Code sehen!

    PS: Habe es nochmal geändert. Beispiel war erst nicht an der Standard-Ilchversion ausgerichtet.


    Zuletzt modifiziert von Lord|Schirmer am 18.09.2013 - 23:14:53
    rules :: doku :: faq :: linkus
    1 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Outi77 Mitglied
    Registriert seit
    31.03.2013
    Beiträge
    1.337
    Beitragswertungen
    143 Beitragspunkte
    Also das hier ist meine search.php:
    <?php
    
    defined ('main') or die ( 'no direct access' );
    
    // IlchBB Forum 3.1 :: Loader :: Start
    require_once ('include/contents/forum/loader.php');
    // IlchBB Forum 3.1 :: Loader :: Ende
    
    $such = $menu->get(1);
    
    if ($such == 'aeit') {
        if (isset($_POST['name'])) {
            $name = escape($_POST['name'],'string');
            $uid = @db_result(db_query("SELECT id FROM prefix_user WHERE name = BINARY '".$name."'"));
            if ($uid > 0) {
                $menu->set_url(2,$uid);
            }
        }
        if ($menu->get(2) >= 1 AND $menu->get(2) != $_SESSION['authid']) {
    		$uid = $menu->get(2);
    		$name = get_n($uid);
    		$mtitle = $lang['posts'].' '.$lang['from'].' '.$name;
        } else {
            $uid = $_SESSION['authid'];
            $mtitle = $lang['ownposts'];
            $name = '';
        }
    } elseif ($such == 'aubt') {
        $mtitle = $lang['topicwithnoreply'];
    } else {
        $mtitle = $lang['newtopicssincelastvisit'];
    }
    
    $title = $allgAr['title'].' :: Forum :: '.$mtitle;
    $hmenu  = $extented_forum_menu.'<a class="smalfont" href="index.php?forum">Forum</a><b> &raquo; </b> '.$mtitle;
    $design = new design ( $title , $hmenu, 1);
    $design->header();
    
    # mehrere seiten falls gefordert
    $limit = 25;  // Limit
    $page = ($menu->getE('p') > 0 ? $menu->getE('p') : 1 );
    $anfang = ($page - 1) * $limit;
    
    $s = "DISTINCT a.art, a.stat, a.rep, b.id as fid, a.name as titel, a.id as id, d.name as author";
    $q = "SELECT {SELECT}
      FROM prefix_topics a
        LEFT JOIN prefix_forums b ON b.id = a.fid
        LEFT JOIN prefix_posts c ON c.tid = a.id
        LEFT JOIN prefix_user d ON c.erstid = d.id
        LEFT JOIN prefix_groupusers vg ON vg.uid = ".$_SESSION['authid']." AND vg.gid = b.view
        LEFT JOIN prefix_groupusers rg ON rg.uid = ".$_SESSION['authid']." AND rg.gid = b.reply
        LEFT JOIN prefix_groupusers sg ON sg.uid = ".$_SESSION['authid']." AND sg.gid = b.start
      WHERE (((b.view >= ".$_SESSION['authright']." AND b.view <= 0) OR
                (b.reply >= ".$_SESSION['authright']." AND b.reply <= 0) OR
                (b.start >= ".$_SESSION['authright']." AND b.start <= 0)) OR
                (vg.fid IS NOT NULL OR rg.fid IS NOT NULL OR sg.fid IS NOT NULL OR ".$_SESSION['authright']." = -9))
         AND {WHERE}
      ORDER BY c.time DESC";
    $q2 = "SELECT DISTINCT a.art, a.stat, a.rep, b.id as fid, a.name as titel, a.id as id, MIN(c.id) AS firstnew, d.name as author
        FROM prefix_topics a
          LEFT JOIN prefix_forums b ON b.id = a.fid
          LEFT JOIN prefix_posts c ON c.tid = a.id
          LEFT JOIN prefix_user d ON c.erstid = d.id
          LEFT JOIN prefix_groupusers vg ON vg.uid = ".$_SESSION['authid']." AND vg.gid = b.view
          LEFT JOIN prefix_groupusers rg ON rg.uid = ".$_SESSION['authid']." AND rg.gid = b.reply
          LEFT JOIN prefix_groupusers sg ON sg.uid = ".$_SESSION['authid']." AND sg.gid = b.start
        WHERE (((b.view >= ".$_SESSION['authright']." AND b.view <= 0) OR
                (b.reply >= ".$_SESSION['authright']." AND b.reply <= 0) OR
                (b.start >= ".$_SESSION['authright']." AND b.start <= 0)) OR
                (vg.fid IS NOT NULL OR rg.fid IS NOT NULL OR sg.fid IS NOT NULL OR ".$_SESSION['authright']." = -9))
          AND {WHERE}
        GROUP BY b.id,a.id, a.name
        ORDER BY c.time DESC";
    $x = time() - (3600 * 24 * 360);
    if ($such == 'aubt') {
        $where = "c.time >= ". $x ." AND a.rep = 0";
        $gAnz  = @db_result(db_query(str_replace('{WHERE}',$where,str_replace('{SELECT}',' COUNT(DISTINCT a.id)',$q))),0);
        $q     = str_replace('{WHERE}',$where,str_replace('{SELECT}',$s,$q));
    } elseif ($such == 'augt') {
        /*$where = "c.time >= ". $x ." AND c.time >= ".$_SESSION['lastlogin'];*/
    	$where = "`a`.`id` IN (".$ilchBB->showNewTopics().")";
        $gAnz  = @db_result(db_query(str_replace('{WHERE}',$where,str_replace('{SELECT}',' COUNT(DISTINCT a.id)',$q))),0);
        $q     = str_replace('{WHERE}',$where,str_replace('{SELECT}',$s,$q2));
    } elseif ($such == 'aeit') {
        $where = "c.time >= ". $x ." AND c.erstid = ".$uid;
        $gAnz  = @db_result(db_query(str_replace('{WHERE}',$where,str_replace('{SELECT}',' COUNT(DISTINCT a.id)',$q))),0);
        $q     = str_replace('{WHERE}',$where,str_replace('{SELECT}',$s,$q));
    }
    $MPL = db_make_sites ($page , "", $limit , 'index.php?forum-'.$such.($such == 'aeit' ? '-'.$uid : '') , "" , $gAnz);
    
    $tpl = new tpl('forum/search');
    $q = db_query($q." LIMIT $anfang,$limit");
    $class = '';
    $tpl->set_out('gAnz',$gAnz,0);
    while($r = db_fetch_assoc($q) ) {
        $class = ($class == 'Cmite' ? 'Cnorm' : 'Cmite' );
        $r['class'] = $class;
        $r['ctime'] = db_result(db_query("SELECT MAX(time) FROM prefix_posts WHERE tid = ".$r['id']),0,0);
        $r['link'] = 'forum-showposts-'.$r['id'];
    
        // IlchBB Forum 3.1 :: Get Forum Status :: Start
        $ord = $ilchBB->checkNewTopics($r['fid'], $r['id']);
    
        // Sticky or Topic
        if ($r['art'] == 1) {
            $r['ORD'] = 'sticky';
            $r['TORD'] = 'Ank&uuml;ndigung';
        } else {
            $r['ORD'] = 'topic';
            $r['TORD'] = 'Thema';
        }
    
        // Unread or Read
        if ($ord === TRUE) {
            $r['ORD'] .= '_unread';
            $r['TORD'] .= ', neue Beitr&auml;ge';
            $r['NPOS'] = '<a href="index.php?forum-showposts-'.$r['id'].'-firstnew"><img src="include/images/ilchbb_forum/icon_topic_newest.gif" title="Neuster Beitrag" border="0" /></a> ';
        } else {
            $r['ORD'] .= '_read';
            $r['TORD'] .= ', keine neuen Beitr&auml;ge';
            $r['NPOS'] = '';
        }
    
        // Locked or Hot Topic?
        if ($r['stat'] == 0) {
            $r['ORD'] .= '_locked';
            $r['TORD'] .= ', geschlossen';
        } else if ($r['rep'] >= $allgAr['ilchbb_forum_hottopic'] AND $r['art'] == 0) {
            $r['ORD'] .= '_hot';
            $r['TORD'] .= ', viel diskutiert';
        }
        // IlchBB Forum 3.1 :: Get Forum Status :: Ende
    
        if ($menu->get(1) == 'aeit') {
            $r['author'] = '';
        } elseif ($such == 'aubt') {
            $r['author'] = ' '.$lang['from'].' '.$r['author'];
        } else {
            $r['author'] = ' '.$lang['newpost'].' '.$lang['from'].' '.$r['author'];
            $r['postsbefore'] = db_count_query('SELECT COUNT(id) FROM prefix_posts WHERE tid = '.$r['id'].' AND id < '.$r['firstnew']);
            $r['page'] = ceil(($r['postsbefore']+1)/$allgAr['Fpanz']);
            $r['link'] .= '-p'.$r['page'].'#'.$r['firstnew'];
        }
    
        $tpl->set_ar_out($r,1);
    }
    
    $tpl->set_out('MPL',$MPL,2);
    if ($such == 'aeit') {
        $tpl->set_out('name',$name,3);
    }
    
    $design->footer();
    ?>

    Ich würde jetzt gerne direkt nach Zeile 89 folgendes machen:
    //Anzahl neuer Posts für Login-Panel
    $tpl = new tpl('user/panel_login');
    $tpl->set('pnr', $gAnz);
    //

    Und in meiner include/templates/user/panel_login.htm:
    <div class="leftright">
    	<a href="index.php?forum-augt"><img src="include/designs/ilch_gs_template119/images/loginpanel/posts.png" title="neue Posts">{pnr}</a>
    </div>

    Beim testen passiert jetzt folgendes:
    Beim Einloggen sehe ich im Panel nur {pnr}.
    Deswegen bin ich der Annahme, dass das mit der Zuweisung / Ausgabe nicht
    ganz korrekt ist. Aber vielleicht liegt mein Fehler ja auch wo ganz anders?

    Grüße


    Zuletzt modifiziert von Outi77 am 18.09.2013 - 21:44:08
    Die richtige Formulierung eines Problems ist nicht selten bereits die halbe Lösung.
    »Albert Einstein«
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Lord|Schirmer Administrator
    Registriert seit
    21.03.2007
    Beiträge
    7.622
    Beitragswertungen
    1192 Beitragspunkte
    Du willst also eine Ausgabe für den Loginbar in der search.php definieren, eine Datei welche nur aufgerufen wird, wenn sie benötigt wird. Das kann nicht funktionieren.

    Du musst schon die notwendigen Funktionen in die php packen welche die Platzhalter der Loginbar (panel_login.htm) füllen und dass so in der Art, wie ich oben gepostet habe.
    rules :: doku :: faq :: linkus
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    Outi77 Mitglied
    Registriert seit
    31.03.2013
    Beiträge
    1.337
    Beitragswertungen
    143 Beitragspunkte
    Moin,
    ich habe jetzt die benötigten Funktionen in die panel_login.php eingebaut.
    Ein kleiner Erfolg, denn wenigstens wird mir ein neuer Beitrag angezeigt.
    Jetzt habe ich ein neues Problemchen, nämlich folgende Fehlermeldung bei Aufruf von index.php?forum-augt:
    Fatal error: Call to a member function showNewTopics() on a non-object in C:\xampp\htdocs\ilchClan11o\include\boxes\panel_login.php on line 53

    Zeile 53 in der panel_login.php sieht so aus:
    $where = "`a`.`id` IN (".$ilchBB->showNewTopics().")";

    Die function showNewTopics() steht in der ilchbb.php-Klasse,
    die ilchBB.php habe ich im Ordner include\includes\class stehen.
    Geladen wird die Klasse in der include\contents\forum\loader.php wie folgt:
    // IlchBB-Class laden
    require_once ('include/includes/class/ilchbb.php');
    $ilchBB = new ilchBB();

    Ich vermute, es hat damit zu tun, dass die panel_login.php in include\boxes steht, die loader.php aber in include\contents\forum.
    Kopiere ich die loader.php nach include\boxes, kommt kein Fehler (siehe da, Vermutung richtig).
    Wie kann ich das Ganze denn jetzt ändern, dass ich nicht insgesamt 3 Dateien namens loader.php in 3 verschiedenen Ordnern habe (include\boxes, include\contents\forum und include\includes)?
    Ein Versuch meinerseits ist gescheitert, nämlich die Klasse ilchBB.php in der include\includes\loader.php zu laden. Dabei kommt diese Fehlermeldung:
    Fatal error: Call to undefined function loggedin() in C:\xampp\htdocs\ilchClan11o\include\includes\class\ilchbb.php on line 31

    Danke für die Hilfe!
    Grüße Markus
    Die richtige Formulierung eines Problems ist nicht selten bereits die halbe Lösung.
    »Albert Einstein«
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Die Klasse wird beim Standard in der index.php initialisiert, wenn du sie nur im Loginpanel brauchst, kannst du es natürlich auch dort machen.

    In der loader.php müsste nur die Datei geladen werden (require_once), nicht die Klasse zu einem Objekt initialisieren.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    Outi77 Mitglied
    Registriert seit
    31.03.2013
    Beiträge
    1.337
    Beitragswertungen
    143 Beitragspunkte
    Also nur, damit ich das richtig verstehe:
    Eine Klasse ist doch z.Bsp. die include\includes\class\tpl.php ?
    Geladen wird diese doch nicht in der index.php, sondern in der
    include\includes\loader.php und diese wiederrum dann in der index.php ?
    Daraus würde ich schlussfolgern, dass ich sämtliche neue Klassen wie die ilchBB.php im Loader aufrufe oder?
    Wie dem auch sei, was bedeutet das denn für mich jetzt?
    Kann ich die 3 Dateien loader.php lassen? Stören sich doch nicht gegenseitig oder?


    Zuletzt modifiziert von Outi77 am 19.09.2013 - 08:39:53
    Die richtige Formulierung eines Problems ist nicht selten bereits die halbe Lösung.
    »Albert Einstein«
    0 Mitglieder finden den Beitrag gut.
  10. #10
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Die Dateien selbst sollten nicht stören.

    Der Aufruf von new IlchBB() nennt man Initialisierung, und der darf nicht in der loader.php bzw direkt (also nicht innerhalb einer Funktion oder Klasse) in einer dort eingebundenen Datei erfolgen.

    Diese Initialiserung wird beim Standard (damit meinte ich das ilchBB Modul selbst) in der index.php gemacht, kann aber wenn du es nicht anders benötigst direkt in der gewünschten Datei erfolgen, wichtig dabei ist, dass es nicht mehrmals pro Durchlauf (einen Seitenaufruf) initialisiert wird.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  11. #11
    User Pic
    Outi77 Mitglied
    Registriert seit
    31.03.2013
    Beiträge
    1.337
    Beitragswertungen
    143 Beitragspunkte
    OK hab jetzt (hoffentlich richtig) folgendes geändert:

    Im Ordner include\includes\class\ -> die Klasse ilchbb.php
    In der Datei include\includes\loader.php (ilch standard) -> require_once('include\includes\class\ilchbb.php');
    In der index.php (ilch standard) -> $ilchBB = new ilchBB();
    Nur noch eine Datei loader.php in include\includes\


    Jetzt kommt beim Seitenaufruf folgende Meldung:
    Fatal error: Call to a member function showNewTopics() on a non-object in C:\xampp\htdocs\ilchClan11o\include\boxes\panel_login.php on line 53

    Bin anscheinend doch zu blöd, das richtig zu verstehen grumml
    Bitte nochmals um Hilfe - danke!

    Kleine Korrektur:
    Anstatt in der index.php das
    $ilchBB = new ilchBB();

    in jede Datei geschrieben, wo ich es benötige. Scheint zu funktionieren...
    Und jetzt hab ich endlich das, was ich erreichen wollte.


    Zuletzt modifiziert von Outi77 am 19.09.2013 - 18:50:42
    Die richtige Formulierung eines Problems ist nicht selten bereits die halbe Lösung.
    »Albert Einstein«
    0 Mitglieder finden den Beitrag gut.
  12. #12
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Das Problem ist, dass Boxen innerhalb einer Funktion ausgeführt werden und deswegen keinen direkten Zugriff auf den globalen Namensraum haben.

    mit
    $ilchBB = $GLOBALS['ilchBB'];
    kannst du dir den Zugriff darauf aber holen oder alternativ müsste auch
    global $ilchBB;
    funktionieren.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu Design und Templates

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten