» Forum » Clanscript » Allgemein » =neue Themen seit dem letzten Besuch=
  Mitglieder   |   Gallery   |   FAQ's   |   Regeln

[ Anmelden zum schreiben ]

=neue Themen seit dem letzten Besuch=
chefkoch
Mitglied
0 Beitragspunkte
Posts: 43

0 Mitglieder finden den Beitrag gut.

Merkliste 29.09.2007 - 03:24:06     Zitieren
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 Grummel


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



Grüße
Mairu
Coder
128 Beitragspunkte
Posts: 12770

User Pic

0 Mitglieder finden den Beitrag gut.

Merkliste 29.09.2007 - 09:00:17     Zitieren
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
[POR]eisbaer
Mitglied
1 Beitragspunkte
Posts: 158

User Pic

0 Mitglieder finden den Beitrag gut.

Merkliste 29.09.2007 - 09:52:22     Zitieren
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
chefkoch
Mitglied
0 Beitragspunkte
Posts: 43

0 Mitglieder finden den Beitrag gut.

Merkliste 29.09.2007 - 12:11:52     Zitieren
Das hört sich ja sehr gut an !!! Smilie

... und was ist das für ein zusätzliches Datenbankfeld???
was muß ich in der Datenbank ergänzen???
Mairu
Coder
128 Beitragspunkte
Posts: 12770

User Pic

0 Mitglieder finden den Beitrag gut.

Merkliste 29.09.2007 - 12:51:23     Zitieren
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
chefkoch
Mitglied
0 Beitragspunkte
Posts: 43

0 Mitglieder finden den Beitrag gut.

Merkliste 29.09.2007 - 12:58:49     Zitieren
Es klappt super!!!

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



Thanks!!!!!!!
lucasch
Mitglied
5 Beitragspunkte
Posts: 82

0 Mitglieder finden den Beitrag gut.

Merkliste 02.06.2010 - 03:39:42     Zitieren
hay, funkt das auch mit der Lastforum box?
Mairu
Coder
128 Beitragspunkte
Posts: 12770

User Pic

0 Mitglieder finden den Beitrag gut.

Merkliste 02.06.2010 - 19:42:33     Zitieren
Wie Lastforumbox, in der Lastforumbox stehen die letzten Posts (in Themen) drin.


Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
lucasch
Mitglied
5 Beitragspunkte
Posts: 82

0 Mitglieder finden den Beitrag gut.

Merkliste 02.06.2010 - 19:47:18     Zitieren
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
Mairu
Coder
128 Beitragspunkte
Posts: 12770

User Pic

0 Mitglieder finden den Beitrag gut.

Merkliste 03.06.2010 - 00:27:49     Zitieren
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
lucasch
Mitglied
5 Beitragspunkte
Posts: 82

0 Mitglieder finden den Beitrag gut.

Merkliste 03.06.2010 - 00:34:20     Zitieren
ahh nice danke funkt

[ Anmelden zum schreiben ]