Hallo zusammen,
für die Version 1.2 bin ich auf der Suche nach einem Plugin, das den Usern ermöglicht, nach allen Themen zu suchen, in die sie selbst gepostet haben (egal wie oft; nur das jeweilige Thema wird angezeigt). Nicht zu verwechseln mit der Anzeige "Alle eigenen Beiträge" im jeweiligen eigenen Profil, die meiner Meinung nach für diesen Zweck recht unübersichtlich ist und auch nicht mit "eigene Themen", da hier ja nur die Themen gelistet werden, die der entsprechende User selbst verfasst hat.
Wir haben in letzter Zeit sehr viele neue User bekommen, die aus einem großen phpBB Forum so eine Übersicht gewöhnt sind und den Wünschen würde ich gerne nachkommen.
Sollte es so ein Plugin nicht geben, bitte ich den Betrag zu verschieben, weil ich dann sicher ein paar Fragen haben werde, wie man so etwas realisieren kann.
So was würde ich mir auch auf mybboard.de wünschen; würde einem bei Supportanfragen das Leben leichter machen
Auch wenn sich zur Zeit alles auf 1.4 stürzt, würde ich noch gerne das o.a. Thema für die Version 1.2 umsetzen, benötige dazu aber ein wenig Unterstützung.
Ich gehe mal davon aus, dass die Funktion, die alle Beiträge eines Users zusammenstellt, als Grundlage verwendet werden könnte!? Bin ich da auf der richtigen Spur?
Wenn dem so ist, stellt sich mir die Frage, wie ich die DB-Abfrage so eingrenzen kann, dass die Ausgabe des Ergebnisses nur das jeweilige Thema enthält, in dem der User mindestens 1 Beitrag geschrieben hat.
Kann mir da evtl. jemand einen Tipp geben?
Dankeschön im Voraus!
P.S.: gibt es eigentlich in der V1.4 so eine Funktion?
Nein, in MyBB 1.4 gibt es so eine Funktion nicht. Hier mal ein Codeschnipsel dazu:
PHP-Code:
<?php
define("IN_MYBB", 1);
define("NO_ONLINE", 1);
require("global.php");
$uid = intval($mybb->input['uid']);
$query = $db->query("
SELECT p.tid, t.*
FROM ".TABLE_PREFIX."posts p
LEFT JOIN ".TABLE_PREFIX."threads t ON (p.tid=t.tid)
WHERE p.visible != '0' AND t.visible != '0' AND p.uid = '{$uid}'
GROUP BY p.tid
ORDER BY p.dateline DESC
LIMIT 0,5
");
while($data = $db->fetch_array($query)) {
echo "<a href=\"showthread.php?tid={$data['tid']}\">".htmlspecialchars_uni($data['subject'])."</a><br />";
}
?>
Falls jemand die Zeit hat, müssten noch die Templates drum herum erstellt werden usw.
Klasse, vielen Dank!
Damit fange ich jetzt mal an und wenn ich das dann in ein Template integriert habe, poste ich es hier.
Hmm, doch nicht so einfach.
Habe den Code mal in ein separates php-File gepackt und versucht, das gleich mal in ein Template einzubauen. Es wurde aber kein Ergebnis ausgegeben.
Dann habe ich es einfach mal mit dem Echo (ohne Template) versucht, aber auch da erscheint keine Ausgabe.
Evtl. ein Tipp, woran es haken könnte?
Hast du die Benutzer-ID an die Datei übergeben (datei.php?uid=x)? Funktioniert es, wenn du den Code unverändert in die Datei übernimmst?
(24.08.2008, 22:40)Michael schrieb: [ -> ]Hast du die Benutzer-ID an die Datei übergeben (datei.php?uid=x)?
das war's
Im Prinzip funktioniert es jetzt soweit und mit dem Design werde ich mich noch ein wenig spielen. Möchte auch nicht ausschließen, ob nicht ggf. der ein oder andere User z.B. noch gerne die Info bzgl. des jeweiligen Themaerstellers hätte. Das habe ich mal probiert, aber noch nicht geschafft.
Aber 2 Fragen noch:
zum einen habe ich mal angehängt, wie mein aktuelles php-File aussieht. Wie gesagt, es funktioniert, aber ich bin mir nicht sicher, ob das auch der Weisheit letzter Schluss ist. Würde mich freuen, wenn Du da mal einen Blick drüber werfen könntest.
zum anderen noch was zu der MySQL-Abfrage:
mit dem Setzen von LIMIT stelle ich doch ein, wie viele Ergebnisse ich erhalten möchte!? Damit ich
alle Ergebnisse erhalte dürfte ich doch dort gar kein LIMIT setzen, oder?
Des weiteren ein Problem, das ich schon mal hatte. Über die LIMIT Angabe wird z.B. in der search.php auch gleichzeitig die Multipage-Funktion eingebaut. Kann man das in diesem Thema auch irgendwie integrieren?
Der Code ist soweit in Ordnung, allerdings ist mir nicht ganz klar, warum du zwei while-Schleifen verwendest. Du kannst die Zeile mit eval() doch direkt in der ersten Schleife benutzen, dann musst du die Daten nicht erst in ein Array schreiben und dann nochmal durchlaufen.
(28.08.2008, 15:41)Jockl schrieb: [ -> ]mit dem Setzen von LIMIT stelle ich doch ein, wie viele Ergebnisse ich erhalten möchte!? Damit ich alle Ergebnisse erhalte dürfte ich doch dort gar kein LIMIT setzen, oder?
Das ist richtig. Das hatte ich nur eingefügt, weil ich das im Forum von MyBBoard.de getestet habe und da kommt einiges zusammen, wenn ich die Themen abfrage, in denen ich geschrieben habe.
Die erste Zahl hinter LIMIT gibt den Starteintrag an. 0 ist der erste Eintrag. Wenn dort z.B. 50 ständ, würde MySQL die Treffer 1-50 nicht zurückgeben, da 50 ja der 51. Eintrag wäre. Der zweite Wert hinter Limit ist dann die Anzahl der Ergebisse. LIMIT 50,5 würde also die Ergebnisse 51-56 zurückgeben.
(28.08.2008, 15:41)Jockl schrieb: [ -> ]Des weiteren ein Problem, das ich schon mal hatte. Über die LIMIT Angabe wird z.B. in der search.php auch gleichzeitig die Multipage-Funktion eingebaut. Kann man das in diesem Thema auch irgendwie integrieren?
Das dürfte sich ähnlich wie in der search.php einbauen lassen. Über die Nummer der Seite und die Anzahl der Einträge pro Seite lässt sich der Startwert für LIMIT ermitteln und der zweite Wert ist dann die Anzahl der Einträge pro Seite.
(28.08.2008, 16:56)Michael schrieb: [ -> ]Der Code ist soweit in Ordnung, allerdings ist mir nicht ganz klar, warum du zwei while-Schleifen verwendest. Du kannst die Zeile mit eval() doch direkt in der ersten Schleife benutzen, dann musst du die Daten nicht erst in ein Array schreiben und dann nochmal durchlaufen.
Und ich sach noch, dass es bestimmt nicht der Weisheit letzter Schluss ist.
Habe es korrigert. Dankeschön!
(28.08.2008, 16:56)Michael schrieb: [ -> ]Das dürfte sich ähnlich wie in der search.php einbauen lassen. Über die Nummer der Seite und die Anzahl der Einträge pro Seite lässt sich der Startwert für LIMIT ermitteln und der zweite Wert ist dann die Anzahl der Einträge pro Seite.
Habe das mal probiert, komme aber leider nicht recht weit. Grund: wie erhalte ich bei folgendem Code über die weiter o.a. mysql-Abfrage die Anzahl an ausgegebenen Threads und damit Anzahl aller Seiten? Es muss ja dann auch eine mysql-Abfrage ohne LIMIT sein, oder?
PHP-Code:
$threadcount = $db->fetch_field($query, "?????");
$perpage = $mybb->settings['threadsperpage'];
$page = intval($mybb->input['page']);
if($page)
{
$start = ($page-1) *$perpage;
}
else
{
$start = 0;
$page = 1;
}
$end = $start + $perpage;
$lower = $start+1;
$upper = $end;
if($upper > $threadcount)
{
$upper = $threadcount;
}
$multipage = multipage($threadcount, $perpage, $page, "search_own_posts_new?uid=($mybb->user['uid'])");
Die Fkt. fetch_field() habe ich bisher immer nur im Zusammenhang mit
$db->simple_select gesehen.
Auch bei dem Link in der $multipage-Zeile bin ich mir nicht sicher, ob das so passt.