ilch Forum » Ilch Clan 1.1 » Allgemein » =neue Themen seit dem letzten Besuch=

Geschlossen
  1. #1
    User Pic
    chefkoch Mitglied
    Registriert seit
    19.02.2006
    Beiträge
    43
    Beitragswertungen
    0 Beitragspunkte
    Hi,

    bei der Foren-Funktion: neue Themen seit dem letzten Besuch, werden ja alle neuen Themen seid dem letzten Besuch angezeigt.

    Klickt man dann auf eines dieser Themen-Links, gelangt man ja zum ersten Beiträg des Themas.

    Was aber noch viel besser wäre, wenn man gleich genau zu dem Beitrag gelang, der nach dem letzten Besuch geschrieben wurde, so dass man nicht erst durch das Thema blättern muß (falls es mal länger ist).
    Der Link würde dann in etwa so aussehen, wie bei der LastForum-Box, wenn man dort einen Link anklick (wobei man dort immer nur direkt zum letzten Beitrag kommt).

    Die Funktion ist in der contents/search.php und dort im Bereich "augt" verknüpft.

    Es müßte doch gar nicht so schwer sein, die Post-ID zu ermitteln (mittels post.time), die unmittelbar nach dem Wert: $_SESSION[lastlogin] folgt.

    Ich komme leider selber nicht weiter grumml


    Im Idealfall läßt sich das sogar in der gesamten Suchfunktion einbauen!?!?!



    Grüße
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.254
    Beitragswertungen
    366 Beitragspunkte
    Wie du vielleicht bemerkt hast, haben wir das auch vor kurzem hier auf ilch.de geändert, letztendlich mit einem zusätzlichen Datenbankfeld.

    Hier das was ich damals probiert hatte, und eigentlich auch funktionieren sollte.

    contents/search.php
    <?php 
    #   Copyright by: Manuel
    #   Support: www.ilch.de
    
    
    defined ('main') or die ( 'no direct access' );
    
    
    
    function  serach_mark($text,$such) { 
      #$text = BBcode($text);
    	$serar = explode(' ', $such);
      $text  = strip_tags($text);
      $text  = stripslashes($text);
      $rte   = '';
      $tleng = 30;
      foreach($serar as $v) {
        $firs = strpos(strtolower($text),strtolower($v));
        $begi = (($firs - $tleng) < 0 ? 0 : $firs - $tleng );
        $leng = strlen($text);
        $ende = (($firs + strlen($v) + $tleng) > $leng ? $leng : $firs + strlen($v) + $tleng );
        $ttxt = substr($text,$begi,($ende - $begi));
        $rte .= ' ... '.preg_replace("/".$v."/si",'<b>'.$v.'</b>',$ttxt);
      }
      return ($rte); 
    }
    
    function search_finduser() {
      $design = new design ( 'Finduser' , '', 0 );
      $design->header();
      
      $tpl = new tpl ( 'search_finduser' );
      $tpl->out(0);
      if ( isset ( $_POST['sub'] ) AND !empty($_POST['name']) ) {
    	  $name = str_replace('*',"%",$_POST['name']);
        $name = escape($name, 'string');
    	  $q = "SELECT name,name FROM prefix_user WHERE name like '".$name."'";
    	  $tpl->set ('username',dbliste('',$tpl,'username',$q));
    	  $tpl->out(1);
      }
      $tpl->out(2);  
      $design->footer();
    }
    
    if ($menu->get(1) == 'finduser') {
      search_finduser();
      exit();
    }
    
    
    $such = '';
    if ($menu->get(1) != '') {
      $such = $menu->get(1);
    } elseif (isset($_REQUEST['search'])) {
      $such = $_REQUEST['search'];
    }
    
    $such = stripslashes(escape($such, 'string'));
    
    $snac = 'Suche';
    if ($such == 'augt' OR $such == 'aeit' OR $such == 'aubt') {
      $ar_s = array('aubt'=>'unbeantworteten Themen','aeit'=>'eigenen Beitr&auml;gen','augt'=>'neue Themen seit dem letzten Besuch');
      $snac = $ar_s[$such];
    } elseif ( isset($_REQUEST['search']) ) {
      $snac = 'nach: '.$such;
    }
    
    
    $title = $allgAr['title'].' :: Suchen :: '.htmlentities($snac);
    $hmenu  = '<a class="smalfont" href="index.php?search">Suchen</a><b> &raquo; </b>'.htmlentities($snac);
    $design = new design ( $title , $hmenu );
    $design->header();
    
    $tpl = new tpl ('search');
    $tpl->set ('size', 30);
    if ($such != 'augt' AND $such != 'aeit' AND $such != 'aubt') {
      $tpl->set_out('search',escape_for_fields($such),0);
    }
    
    if (!empty($such)) {
      $page = 1;
      if (isset($_GET['page'])) {
        $page = str_replace('-p','',$_GET['page']);
      }
      
      
      $limit = 25;  // Limit 
      $anfang = ($page - 1) * $limit;	
      
      
    //Letzen Beiträge
      if ($such == 'augt') {
          $q = "SELECT DISTINCT b.id as fid, a.name as titel, a.id as id, MIN(c.id) AS firstnew
                FROM prefix_topics a
                  LEFT JOIN prefix_forums b ON b.id = a.fid
                  LEFT JOIN prefix_posts c ON c.tid = a.id
                WHERE (b.view >= ".$_SESSION['authright']." OR b.reply >= ".$_SESSION['authright']." OR b.start >= ".$_SESSION['authright'].") 
                  AND c.time >= ".$_SESSION['lastlogin']."
                GROUP BY b.id,a.id, a.name
                ORDER BY c.time DESC";
          $sql = db_query($q);
          $gAnz = db_num_rows($sql);
          if ($gAnz) {
            mysql_data_seek($sql,$anfang);
          }        
          $MPL = db_make_sites ($page , "" , $limit , "index.php?search=".urlencode($such)."&amp;page=", "", $gAnz );
          $tpl->set_ar_out(array('MPL'=>$MPL,'gAnz'=>$gAnz),1);
        
        $q = db_query($q);
        $class = '';
        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['ord'] = forum_get_ordner($r['ctime'],$r['id'],$r['fid']);
          $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']);
          $tpl->set_ar_out($r,4);
        }
        $tpl->out(3);
        $design->footer(1);
      }
      
      if ($such == 'aubt' OR $such == 'aeit') {
        $s = "DISTINCT b.id as fid, a.name as titel, 'foru' as typ, a.id as id";
        $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
          WHERE (b.view >= ".$_SESSION['authright']." OR b.reply >= ".$_SESSION['authright']." OR b.start >= ".$_SESSION['authright'].") 
             AND {WHERE}
          ORDER BY c.time DESC";
      }
      $x = time() - (3600 * 24 * 360);
      if ($such == 'aubt') {
        $where = "c.time >= ". $x ." AND a.rep = 0";
        $c = str_replace('{WHERE}',$where,str_replace('{SELECT}','COUNT(DISTINCT a.id)',$q));
        $gAnz  = db_result(db_query($c),0);
        $q     = str_replace('{WHERE}',$where,str_replace('{SELECT}',$s,$q));
      } elseif ($such == 'aeit') {
        $where = "c.time >= ". $x ." AND c.erstid = ".$_SESSION['authid'];
        $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));
       } else {
        $such = str_replace('-','',$such);
        $such = str_replace('=','',$such);
        $such = str_replace('&','',$such);
      
    	  $serar = explode(' ', $such);
        $str_forum = '';
        $str_news  = '';
        $str_downs  = '';
    	  foreach($serar as $v) {
    	    $str = str_replace('\'','',$v);
    		  $str = str_replace('"','',$str);
          $str = addslashes($str);
    		  if ( !empty($str) ) {
    		    $str_forum .= "txt LIKE '%".$str."%' AND ";
            $str_news  .= "news_text LIKE '%".$str."%' AND ";
            $str_downs  .= "`descl` LIKE '%".$str."%' AND ";
    		  }
    	  }
        
        $q = "(
          SELECT DISTINCT
            0 as fid,
            news_title as titel,
            'news' as typ,
            news_id as id,
            news_time as time
          FROM prefix_news
          WHERE (".$str_news." 1 = 1)
            AND (news_time >= ". $x .")
          
        ) UNION (
        
          SELECT DISTINCT
            prefix_topics.fid as fid,
            prefix_topics.name as titel,
            'foru' as typ,
            prefix_topics.id as id,
            time as time
          FROM prefix_posts
            LEFT JOIN prefix_topics ON prefix_topics.id = prefix_posts.tid
            LEFT JOIN prefix_forums ON prefix_forums.id = prefix_topics.fid
          WHERE (prefix_forums.view >= ".$_SESSION['authright']." OR prefix_forums.reply >= ".$_SESSION['authright']." OR prefix_forums.start >= ".$_SESSION['authright'].")
            AND (".$str_forum." 1 = 1)
            AND (time >= ". $x .")
          GROUP BY prefix_topics.id
    
        ) UNION (
        
          SELECT DISTINCT
            0 as fid,
            CONCAT( name, ' ', version ) AS titel,
            'down' as typ,
            id,
            UNIX_TIMESTAMP(time) as time
          FROM prefix_downloads
          WHERE (".$str_downs." 1 = 1)
            AND (time >= ". $x .")
        )
        
        ORDER BY time DESC";
              
        $gAnz = db_num_rows(db_query($q));
      }
    
      $q .= " LIMIT ".$anfang.",".$limit;
      
      $MPL = db_make_sites ($page , "" , $limit , "index.php?search=".urlencode($such)."&amp;page=", "", $gAnz );
      $tpl->set_ar_out(array('MPL'=>$MPL,'gAnz'=>$gAnz),1);
      
      $q = db_query($q);
      $class = '';
      while($r = db_fetch_assoc($q) ) {
        $class = ($class == 'Cmite' ? 'Cnorm' : 'Cmite' );
        $r['class'] = $class;
        if ($r['typ'] == 'foru') {
          $r['ctime'] = db_result(db_query("SELECT MAX(time) FROM prefix_posts WHERE tid = ".$r['id']),0,0);
          $r['ord'] = forum_get_ordner($r['ctime'],$r['id'],$r['fid']);
          $r['link'] = 'forum-showposts-'.$r['id'];
        } elseif ($r['typ'] == 'news') {
          $r['ord']  = 'ord';
          $r['link'] = 'news-'.$r['id'];
        } elseif ($r['typ'] == 'down') {
          $r['ord']  = 'ord';
          $r['link'] = 'downloads-show-'.$r['id'];
        }
        $tpl->set_ar_out($r,2);
      }
      $tpl->out(3);
    }    
    				
    $design->footer();
    
    ?>


    templates/search.htm
    <form action="index.php" method="GET">
    <input type="text" value="{search}" name="search" size="{size}" />
    &nbsp;<input type="submit" value="{_lang_search}" />
    </form>
    <hr>
    
    {EXPLODE}
    <br /><br />
    <div style="float: left">{MPL}</div>
    <div style="float: right; text-align: right">Gesamt: {gAnz}</div><br /><br />
    
    <table width="100%" cellpadding="2" cellspacing="1" border="0" class="border">
     
      {EXPLODE}<tr class="{class}">
        <td class="erstezeile" width="15"><img src="include/images/forum/{ord}.gif" width="15" height="15" border="0"></td>
        <td class="erstezeile"><a href="?{link}">{titel}</a></td>
      </tr>{EXPLODE}
    </table>
    
    {MPL}
    {EXPLODE}<tr class="{class}">
        <td class="erstezeile" width="15"><img src="include/images/forum/{ord}.gif" width="15" height="15" border="0"></td>
        <td class="erstezeile"><a href="index.php?forum-showposts-{id}">{titel}</a></td><td width="170" align="right"><a href="index.php?forum-showposts-{id}-p{page}#{firstnew}">&raquo;Zum ersten neuen Beitrag&laquo;</a></td>
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    [POR]eisbaer Mitglied
    Registriert seit
    27.05.2007
    Beiträge
    158
    Beitragswertungen
    1 Beitragspunkte
    Funktioniert im IE 7 und FF. Danke Mairu echt geil. Wer evtl was für die FAQ

    edit sehe grad ist schon Drin. zwinker


    Zuletzt modifiziert von [POR]eisbaer am 29.09.2007 - 10:01:58
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    chefkoch Mitglied
    Registriert seit
    19.02.2006
    Beiträge
    43
    Beitragswertungen
    0 Beitragspunkte
    Das hört sich ja sehr gut an !!! lächeln

    ... und was ist das für ein zusätzliches Datenbankfeld???
    was muß ich in der Datenbank ergänzen???
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.254
    Beitragswertungen
    366 Beitragspunkte
    Gar nix, bei dieser Lösung einfach nur die Dateien ersetzen oder selbst ändern, wenn du etwas mehr Arbeit willst zwinker
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    chefkoch Mitglied
    Registriert seit
    19.02.2006
    Beiträge
    43
    Beitragswertungen
    0 Beitragspunkte
    Es klappt super!!!

    und ich bastelte stundenlang an der alten search.php rum zwinker



    Thanks!!!!!!!
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    lucasch Mitglied
    Registriert seit
    14.11.2009
    Beiträge
    85
    Beitragswertungen
    5 Beitragspunkte
    hay, funkt das auch mit der Lastforum box?
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.254
    Beitragswertungen
    366 Beitragspunkte
    Wie Lastforumbox, in der Lastforumbox stehen die letzten Posts (in Themen) drin.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    lucasch Mitglied
    Registriert seit
    14.11.2009
    Beiträge
    85
    Beitragswertungen
    5 Beitragspunkte
    naja wenn man bei mir auf lastforum post klickt dann kommt immer zum ersten post
    hier zusehn
    terrorkingsgermany.de/index.php?forum-showposts-9-p1#14
    0 Mitglieder finden den Beitrag gut.
  10. #10
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.254
    Beitragswertungen
    366 Beitragspunkte
    Das liegt dann an deiner showposts.htm, hast sicher den forenmod bei dem fehlt <a name="{id}"></a>, kannst dich ja an der originalen orientieren, wo es hin muss.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  11. #11
    User Pic
    lucasch Mitglied
    Registriert seit
    14.11.2009
    Beiträge
    85
    Beitragswertungen
    5 Beitragspunkte
    ahh nice danke funkt
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu Allgemein

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten