Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Gezählte Beiträge in Suchergebnis ausgeben lassen
#1
Mittlerweile habe ich es ja nun hinbekommen, nur die gezählten, sowie alle Beiträge auszählen zu lassen.

Nun frage ich mich, ob man die Funktion der Suche so erweitern kann, dass nur die gezählten Beiträge im Suchergebnis ausgegeben werden?
Zitieren
#2
Ich grab das hier nochmal aus, da ich gerade versuche, das umzusetzen.

Im Profil lasse ich mir zum einen die gezählten Themen und Beiträge (Inplay) anzeigen, aber auch die Anzahl der insgesamt geschriebenen Themen und Beiträge:
[attachment=8738]

Nun geht es allerdings darum, dass man auch nach den Inplay-Themen und -Beiträgen suchen kann.
Die Links für die jeweiligen Suchen, sollen so aussehen:

Themen: search.php?action=finduserthreadsinplay
Beiträge: search.php?action=finduserinplay

Die search.php habe ich bereits um diese Abschnitte erweitert, es hakt allerdings eben daran, dass auch nur die Themen und Beiträge angezeigt werden in Foren, in denen die Beiträge gezählt werden.. in der Datenbank wird das in der Tabelle mybb_forums unter usepostcounts gespeichert.
Heisst, ich muss also irgendwo in der search.php die Bedingung einfügen, dass mir bloss diese Themen und Beiträge angezeigt werden, in denen bei usepostcounts eine 1 eingetragen ist.

Die Frage ist nur, wo und wie?
PHP-Code:
#######################################
#######################################
####INPLAY BEITRÄGE####

elseif($mybb->input['action'] == "finduserinplay")
{
    
$where_sql "uid='".intval($mybb->input['uid'])."'";
    
    
$unsearchforums get_unsearchable_forums();
    if(
$unsearchforums)
    {
        
$where_sql .= " AND fid NOT IN ($unsearchforums)";
    }
    
$inactiveforums get_inactive_forums();
    if(
$inactiveforums)
    {
        
$where_sql .= " AND fid NOT IN ($inactiveforums)";
    }
    
    
$permsql "";
    
$onlyusfids = array();

    
// Check group permissions if we can't view threads not started by us
    
$group_permissions forum_permissions();
    foreach(
$group_permissions as $fid => $forum_permissions)
    {
        if(
$forum_permissions['canonlyviewownthreads'] == 1)
        {
            
$onlyusfids[] = $fid;
        }
    }
    if(!empty(
$onlyusfids))
    {
        
$where_sql .= "AND ((fid IN(".implode(','$onlyusfids).") AND uid='{$mybb->user['uid']}') OR fid NOT IN(".implode(','$onlyusfids)."))";
    }

    
$options = array(
        
'order_by' => 'dateline',
        
'order_dir' => 'desc'
    
);

    
// Do we have a hard search limit?
    
if($mybb->settings['searchhardlimit'] > 0)
    {
        
$options['limit'] = intval($mybb->settings['searchhardlimit']);
    }

    
$pids '';
    
$comma '';
    
$query $db->simple_select("posts""pid""{$where_sql}"$options);
    while(
$pid $db->fetch_field($query"pid"))
    {
            
$pids .= $comma.$pid;
            
$comma ',';
    }

    
$tids '';
    
$comma '';
    
$query $db->simple_select("threads""tid"$where_sql);
    while(
$tid $db->fetch_field($query"tid"))
    {
            
$tids .= $comma.$tid;
            
$comma ',';
    }

    
$sid md5(uniqid(microtime(), 1));
    
$searcharray = array(
        
"sid" => $db->escape_string($sid),
        
"uid" => $mybb->user['uid'],
        
"dateline" => TIME_NOW,
        
"ipaddress" => $db->escape_string($session->ipaddress),
        
"threads" => $db->escape_string($tids),
        
"posts" => $db->escape_string($pids),
        
"resulttype" => "posts",
        
"querycache" => '',
        
"keywords" => ''
    
);
    
$plugins->run_hooks("search_do_search_process");
    
$db->insert_query("searchlog"$searcharray);
    
redirect("search.php?action=results&sid=".$sid$lang->redirect_searchresults);
}

#######################################
#######################################
####INPLAY THEMEN####

elseif($mybb->input['action'] == "finduserthreadsinplay")
{
    
$where_sql "t.uid='".intval($mybb->input['uid'])."'";

    
$unsearchforums get_unsearchable_forums();
    if(
$unsearchforums)
    {
        
$where_sql .= " AND t.fid NOT IN ($unsearchforums)";
    }
    
$inactiveforums get_inactive_forums();
    if(
$inactiveforums)
    {
        
$where_sql .= " AND t.fid NOT IN ($inactiveforums)";
    }
    
    
$permsql "";
    
$onlyusfids = array();

    
// Check group permissions if we can't view threads not started by us
    
$group_permissions forum_permissions();
    foreach(
$group_permissions as $fid => $forum_permissions)
    {
        if(
$forum_permissions['canonlyviewownthreads'] == 1)
        {
            
$onlyusfids[] = $fid;
        }
    }
    if(!empty(
$onlyusfids))
    {
        
$where_sql .= "AND ((t.fid IN(".implode(','$onlyusfids).") AND t.uid='{$mybb->user['uid']}') OR t.fid NOT IN(".implode(','$onlyusfids)."))";
    }

    
$sid md5(uniqid(microtime(), 1));
    
$searcharray = array(
        
"sid" => $db->escape_string($sid),
        
"uid" => $mybb->user['uid'],
        
"dateline" => TIME_NOW,
        
"ipaddress" => $db->escape_string($session->ipaddress),
        
"threads" => '',
        
"posts" => '',
        
"resulttype" => "threads",
        
"querycache" => $db->escape_string($where_sql),
        
"keywords" => ''
    
);
    
$plugins->run_hooks("search_do_search_process");
    
$db->insert_query("searchlog"$searcharray);
    
redirect("search.php?action=results&sid=".$sid$lang->redirect_searchresults);
}

#######################################
####################################### 
Zitieren
#3
Ich habe mich wieder dran gesetzt, in der Hoffnung, das endlich zu lösen Smile

Nun habe ich die folgende Zeile

PHP-Code:
$where_sql "uid='".intval($mybb->input['uid'])."'"

erweitert

PHP-Code:
$where_sql "t.uid='".intval($mybb->input['uid'])."' AND ('{$mybb->forums['usepostcounts']}'='1')"

Eine Fehlermeldung bekomme ich nicht, allerdings auch kein Suchergebnis, sondern diesen Hinweis:

Zitat:Entschuldigung, aber nach deinen Angaben wurden keine Ergebnisse gefunden. Bitte ändere deine Suchbegriffe und versuche es erneut.
Zitieren
#4
$mybb->forums gibt es nicht, damit wird die Bedingung auch nie erfüllt. Wink
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#5
Irgendeine Idee, wie ich die Bedinung usepostcounts = 1 in die Suche einbinden kann? Undecided
Zitieren
#6
Probiere es mal so:
PHP-Code:
#######################################
#######################################
####INPLAY BEITRÄGE####

elseif($mybb->input['action'] == "finduserinplay")
{
    
$where_sql "uid='".intval($mybb->input['uid'])."'";
    
    
$unsearchforums get_unsearchable_forums();
    if(
$unsearchforums)
    {
        
$where_sql .= " AND fid NOT IN ($unsearchforums)";
    }
    
$inactiveforums get_inactive_forums();
    if(
$inactiveforums)
    {
        
$where_sql .= " AND fid NOT IN ($inactiveforums)";
    }
    
    
$permsql "";
    
$onlyusfids = array();

    
// Check group permissions if we can't view threads not started by us
    
$group_permissions forum_permissions();
    foreach(
$group_permissions as $fid => $forum_permissions)
    {
        if(
$forum_permissions['canonlyviewownthreads'] == 1)
        {
            
$onlyusfids[] = $fid;
        }
    }
    if(!empty(
$onlyusfids))
    {
        
$where_sql .= "AND ((fid IN(".implode(','$onlyusfids).") AND uid='{$mybb->user['uid']}') OR fid NOT IN(".implode(','$onlyusfids)."))";
    }

    
$options = array(
        
'order_by' => 'dateline',
        
'order_dir' => 'desc'
    
);

    
$forums cache_forums();
    
$nocount = array();
    foreach(
$forums as $forum)
    {
        if(!
$forum['usepostcounts'])
        {
            
$nocount[] = $fid;
        }
    }
    if(!empty(
$nocount))
    {
        
$where_sql .= " AND fid NOT IN (".implode(','$nocount).")";
    }

    
// Do we have a hard search limit?
    
if($mybb->settings['searchhardlimit'] > 0)
    {
        
$options['limit'] = intval($mybb->settings['searchhardlimit']);
    }

    
$pids '';
    
$comma '';
    
$query $db->simple_select("posts""pid""{$where_sql}"$options);
    while(
$pid $db->fetch_field($query"pid"))
    {
            
$pids .= $comma.$pid;
            
$comma ',';
    }

    
$tids '';
    
$comma '';
    
$query $db->simple_select("threads""tid"$where_sql);
    while(
$tid $db->fetch_field($query"tid"))
    {
            
$tids .= $comma.$tid;
            
$comma ',';
    }

    
$sid md5(uniqid(microtime(), 1));
    
$searcharray = array(
        
"sid" => $db->escape_string($sid),
        
"uid" => $mybb->user['uid'],
        
"dateline" => TIME_NOW,
        
"ipaddress" => $db->escape_string($session->ipaddress),
        
"threads" => $db->escape_string($tids),
        
"posts" => $db->escape_string($pids),
        
"resulttype" => "posts",
        
"querycache" => '',
        
"keywords" => ''
    
);
    
$plugins->run_hooks("search_do_search_process");
    
$db->insert_query("searchlog"$searcharray);
    
redirect("search.php?action=results&sid=".$sid$lang->redirect_searchresults);
}

#######################################
#######################################
####INPLAY THEMEN####

elseif($mybb->input['action'] == "finduserthreadsinplay")
{
    
$where_sql "t.uid='".intval($mybb->input['uid'])."'";

    
$unsearchforums get_unsearchable_forums();
    if(
$unsearchforums)
    {
        
$where_sql .= " AND t.fid NOT IN ($unsearchforums)";
    }
    
$inactiveforums get_inactive_forums();
    if(
$inactiveforums)
    {
        
$where_sql .= " AND t.fid NOT IN ($inactiveforums)";
    }
    
    
$permsql "";
    
$onlyusfids = array();

    
// Check group permissions if we can't view threads not started by us
    
$group_permissions forum_permissions();
    foreach(
$group_permissions as $fid => $forum_permissions)
    {
        if(
$forum_permissions['canonlyviewownthreads'] == 1)
        {
            
$onlyusfids[] = $fid;
        }
    }
    if(!empty(
$onlyusfids))
    {
        
$where_sql .= "AND ((t.fid IN(".implode(','$onlyusfids).") AND t.uid='{$mybb->user['uid']}') OR t.fid NOT IN(".implode(','$onlyusfids)."))";
    }

    
$forums cache_forums();
    
$nocount = array();
    foreach(
$forums as $forum)
    {
        if(!
$forum['usepostcounts'])
        {
            
$nocount[] = $fid;
        }
    }
    if(!empty(
$nocount))
    {
        
$where_sql .= " AND t.fid NOT IN (".implode(','$nocount).")";
    }

    
$sid md5(uniqid(microtime(), 1));
    
$searcharray = array(
        
"sid" => $db->escape_string($sid),
        
"uid" => $mybb->user['uid'],
        
"dateline" => TIME_NOW,
        
"ipaddress" => $db->escape_string($session->ipaddress),
        
"threads" => '',
        
"posts" => '',
        
"resulttype" => "threads",
        
"querycache" => $db->escape_string($where_sql),
        
"keywords" => ''
    
);
    
$plugins->run_hooks("search_do_search_process");
    
$db->insert_query("searchlog"$searcharray);
    
redirect("search.php?action=results&sid=".$sid$lang->redirect_searchresults);
}

#######################################
####################################### 
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#7
Damit werden mir leider wieder alle geschriebenen Beiträge und Themen angezeigt.
Zitieren
#8
Ich hol das Thema nun noch mal raus, weil ich das Ganze noch immer nicht gelöst habe und ich es endlich erledigen will Shy
Es wär echt nett, wenn mir dabei jemand helfen könnte.
Zitieren
#9
Kann ehrlich gesagt nicht ganz folgen. Wo und was hast Du überhaupt verändert / ergänzt. Soweit ich sehe, möchtest Du inplay Themen ausgeben lassen in der Suche. Weiter kann ich dies nicht nachvollziehen.
Mit freundlichen Grüßen

MrBrechreiz
Zitieren
#10
Ich möchte die gezählten Themen und Beiträge ausgeben lassen. Also alles in Foren, wo usepostcounts = 1 angegeben ist in der Datenbank.
Im ersten Beitrag habe ich ausführlich erklärt, was ich verändert, bzw. eingefügt habe.
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Suchergebnis / Beiträge als gelesen markieren Maitre 7 2.711 30.05.2007, 18:48
Letzter Beitrag: Maitre