Search only subject MOD

Du hast Probleme beim Einbau oder bei der Benutzung eines Mods? In diesem Forum bist du richtig.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
Seimon
Mitglied
Beiträge: 893
Registriert: 23.02.2005 18:10
Wohnort: Linz, Österreich

Search only subject MOD

Beitrag von Seimon »

Ich beziehe mich auf diesen MOD:

http://mods.db9.dk/viewforum.php?f=66
oder
http://www.phpbbhacks.com/download/2204


Zuerst mal eine Grundsatzfrage:

In der search.php steht:

Code: Alles auswählen

if ( isset($HTTP_POST_VARS['search_fields']) )
{
	$search_fields = ( $HTTP_POST_VARS['search_fields'] == 'all' ) ? 1 : 0;
}
else
{
	$search_fields = 0;
}
Warum steht da im else Pfad nicht $search_fields = 0; da ja "Titel und Text durchsuchen" ('all') die Standardoption ist

Weiters:
Warum heisst die Zeile:

Code: Alles auswählen

$search_msg_only = ( !$search_fields ) ? "AND m.title_match = 0" : ( ( strstr($multibyte_charset, $lang['ENCODING']) ) ? '' : '' );
nicht einfach:

Code: Alles auswählen

$search_msg_only = ( !$search_fields ) ? "AND m.title_match = 0" : '' );
Jetzt zu dem Mod!

Meiner Meinung nach sind die Änderungen in der search.php falsch/nicht mehr aktuell: (habs nicht auf einem 2.0.6 getestet :o )

Code: Alles auswählen

#
#-----[ OPEN ]------------------------------------------
#
search.php

#
#-----[ FIND ]------------------------------------------
#
$search_msg_only = ( !$search_fields ) ? "AND m.title_match = 0" : ( ( strstr($multibyte_charset, $lang['ENCODING']) ) ? '' : '' );

#
#-----[ REPLACE WITH ]------------------------------------------
#
$search_fields = ( $HTTP_POST_VARS['search_fields'] == 'all' ) ? 1 : ( ( $HTTP_POST_VARS['search_fields'] == 'subjonly' ) ? 2 : 0);


#
#-----[ FIND ]------------------------------------------
#
$search_msg_only = ( !$search_fields ) ? "AND m.title_match = 0" : "";

#
#-----[ REPLACE WITH ]------------------------------------------
#
switch ($search_fields)
{
	case 0: $search_msg_only = "AND m.title_match = 0";
		break;
	case 1: $search_msg_only = "";
		break;
	case 2: $search_msg_only = "AND m.title_match > 0";
		break;
	default:
		$search_msg_only = "AND m.title_match = 0";
}

Ich denke das muss so aussehen:

Code: Alles auswählen

#
#-----[ OPEN ]------------------------------------------
#
search.php

#
#-----[ FIND ]------------------------------------------
#
$search_fields = ( $HTTP_POST_VARS['search_fields'] == 'all' ) ? 1 : 0;

#
#-----[ REPLACE WITH ]------------------------------------------
#
$search_fields = ( $HTTP_POST_VARS['search_fields'] == 'all' ) ? 1 : ( ( $HTTP_POST_VARS['search_fields'] == 'subjonly' ) ? 2 : 0);


#
#-----[ FIND ]------------------------------------------
#
$search_msg_only = ( !$search_fields ) ? "AND m.title_match = 0" : ( ( strstr($multibyte_charset, $lang['ENCODING']) ) ? '' : '' );


#
#-----[ REPLACE WITH ]------------------------------------------
#
switch ($search_fields)
{
	case 0: $search_msg_only = "AND m.title_match = 0";
		break;
	case 1: $search_msg_only = "";
		break;
	case 2: $search_msg_only = "AND m.title_match > 0";
		break;
	default:
		$search_msg_only = "AND m.title_match = 0";
}

Ich stell mir wieder die Frage warum 0 default ist und nicht 1...


Ab viel wichtiger:

Was mach ich mit diesen Zeilen?

Code: Alles auswählen

							$search_msg_only = ( $search_fields ) ? "OR post_subject LIKE '$match_word'" : '';
							$sql = "SELECT post_id
								FROM " . POSTS_TEXT_TABLE . "
								WHERE post_text LIKE '$match_word'
								$search_msg_only";
Kann ich das ändern auf:

Code: Alles auswählen

	switch ($search_fields)
	{
		case 0: $search_msg_only = "post_text LIKE '$match_word'";
			break;
		case 1: $search_msg_only = "post_text LIKE '$match_word' OR post_subject LIKE '$match_word'";
			break;
		case 2: $search_msg_only = "post_subject LIKE '$match_word'";
			break;
		default:
			$search_msg_only = "post_text LIKE '$match_word' OR post_subject LIKE '$match_word'";
	}
	$sql = "SELECT post_id
		FROM " . POSTS_TEXT_TABLE . "
		WHERE $search_msg_only";

Der komplette Teil mit Änderungen an der search.php wär also:

Code: Alles auswählen

#
#-----[ OPEN ]------------------------------------------
#
search.php

#
#-----[ FIND ]------------------------------------------
#
$search_fields = ( $HTTP_POST_VARS['search_fields'] == 'all' ) ? 1 : 0;

#
#-----[ REPLACE WITH ]------------------------------------------
#
$search_fields = ( $HTTP_POST_VARS['search_fields'] == 'all' ) ? 1 : ( ( $HTTP_POST_VARS['search_fields'] == 'subjonly' ) ? 2 : 0);


#
#-----[ FIND ]------------------------------------------
#
$search_msg_only = ( !$search_fields ) ? "AND m.title_match = 0" : ( ( strstr($multibyte_charset, $lang['ENCODING']) ) ? '' : '' );


#
#-----[ REPLACE WITH ]------------------------------------------
#
switch ($search_fields)
{
	case 0: $search_msg_only = "AND m.title_match = 0";
		break;
	case 1: $search_msg_only = "";
		break;
	case 2: $search_msg_only = "AND m.title_match > 0";
		break;
	default:
		$search_msg_only = "AND m.title_match = 0";
}

#
#-----[ FIND ]------------------------------------------
#
	$search_msg_only = ( $search_fields ) ? "OR post_subject LIKE '$match_word'" : '';
	$sql = "SELECT post_id
		FROM " . POSTS_TEXT_TABLE . "
		WHERE post_text LIKE '$match_word'
		$search_msg_only";

#
#-----[ REPLACE WITH ]------------------------------------------
#
	switch ($search_fields)
	{
		case 0: $search_msg_only = "post_text LIKE '$match_word'";
			break;
		case 1: $search_msg_only = "post_text LIKE '$match_word' OR post_subject LIKE '$match_word'";
			break;
		case 2: $search_msg_only = "post_subject LIKE '$match_word'";
			break;
		default:
			$search_msg_only = "post_text LIKE '$match_word' OR post_subject LIKE '$match_word'";
	}
	$sql = "SELECT post_id
		FROM " . POSTS_TEXT_TABLE . "
		WHERE $search_msg_only";

Könnte ich soetwas auch validieren lassen als MOD für die DB?
Benutzeravatar
Seimon
Mitglied
Beiträge: 893
Registriert: 23.02.2005 18:10
Wohnort: Linz, Österreich

Beitrag von Seimon »

Soda hab den mod nochmal überarbeitet und in ein Testforum eingebaut...

Ich denk das müsste so stimmen:

Code: Alles auswählen

############################################################## 
## MOD Title:          search only subject
## MOD Author:         Niels < ncr@db9.dk > (Niels Chr. Rød) http://mods.db9.dk
## MOD Description:    This mod will add a extra option into the search page of phpBB2, so it is posible
##			to specify onyl to search if the search words are included into the subject of the posts
##
## MOD Version:        0.9.1
## MOD Compatibility:      2.0.6
##
## Installation Level: medium
## Installation Time: 3 Minutes
## Files To Edit: 3
##		language/lang_english/lang_main.php
##		search.php
##		templates/subSilver/search_body.tpl
## Included Files: 0
##
############################################################## 
## For Security Purposes, Please Check: http://www.phpbb.com/mods/ for the 
## latest version of this MOD. Downloading this MOD from other sites could cause malicious code 
## to enter into your phpBB Forum. As such, phpBB will not offer support for MOD's not offered 
## in our MOD-Database, located at: http://www.phpbb.com/mods/ 
############################################################## 
## Author Notes: 
## none
############################################################## 
## MOD History: 
## 
## 
##   2004-01-21 - Version 0.9.1
##	- fixed some typos in the how-to and a wrong FIND tag
##   2004-01-05 - Version 0.9.0.
##	- initial beta release
##
############################################################## 
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD 
############################################################## 

#
#-----[ OPEN ]------------------------------------------
#
language/lang_english/lang_main.php

#
#-----[ FIND ]------------------------------------------
#
?>

#
#-----[ BEFORE, ADD ]------------------------------------------
#
//search only subject mod
$lang['Search_subject_only'] = 'Search message subject only';

#
#-----[ OPEN ]------------------------------------------
# falls deutsche sprache benötigt wird
language/lang_german/lang_main.php

#
#-----[ FIND ]------------------------------------------
#
?>

#
#-----[ BEFORE, ADD ]------------------------------------------
#
//search only subject mod
$lang['Search_message_subject_only'] = 'Nur Titel durchsuchen';

#
#-----[ OPEN ]------------------------------------------
#
search.php

#
#-----[ FIND ]------------------------------------------
#
$search_fields = ( $HTTP_POST_VARS['search_fields'] == 'all' ) ? 1 : 0;

#
#-----[ REPLACE WITH ]------------------------------------------
#
$search_fields = ( $HTTP_POST_VARS['search_fields'] == 'all' ) ? 1 : ( ( $HTTP_POST_VARS['search_fields'] == 'subjonly' ) ? 2 : 0);


#
#-----[ FIND ]------------------------------------------
#
$search_msg_only = ( !$search_fields ) ? "AND m.title_match = 0" : ( ( strstr($multibyte_charset, $lang['ENCODING']) ) ? '' : '' );


#
#-----[ REPLACE WITH ]------------------------------------------
#
switch ($search_fields)
{
	case 0: $search_msg_only = "AND m.title_match = 0";
		break;
	case 1: $search_msg_only = "";
		break;
	case 2: $search_msg_only = "AND m.title_match > 0";
		break;
	default:
		$search_msg_only = "AND m.title_match = 0";
}

#
#-----[ FIND ]------------------------------------------
#
	$search_msg_only = ( $search_fields ) ? "OR post_subject LIKE '$match_word'" : '';
	$sql = "SELECT post_id
		FROM " . POSTS_TEXT_TABLE . "
		WHERE post_text LIKE '$match_word'
		$search_msg_only";

#
#-----[ REPLACE WITH ]------------------------------------------
#
	switch ($search_fields)
	{
		case 0: $search_msg_only = "post_text LIKE '$match_word'";
			break;
		case 1: $search_msg_only = "post_text LIKE '$match_word' OR post_subject LIKE '$match_word'";
			break;
		case 2: $search_msg_only = "post_subject LIKE '$match_word'";
			break;
		default:
			$search_msg_only = "post_text LIKE '$match_word' OR post_subject LIKE '$match_word'";
	}
	$sql = "SELECT post_id
		FROM " . POSTS_TEXT_TABLE . "
		WHERE $search_msg_only";

#
#-----[ FIND ]------------------------------------------
#

	'L_SEARCH_MESSAGE_TITLE' => $lang['Search_title_msg'],

#
#-----[ AFTER, ADD ]------------------------------------------
#

	'L_SEARCH_MESSAGE_SUBJECT_ONLY' => $lang['Search_message_subject_only'],

#
#-----[ OPEN ]------------------------------------------
#
# (make sure to edit this file for every theme you use).
templates/subSilver/search_body.tpl

#
#-----[ FIND ]------------------------------------------
#
value="msgonly" /> {L_SEARCH_MESSAGE_ONLY}

#
#-----[ IN-LINE FIND ]------------------------------------------
#
{L_SEARCH_MESSAGE_ONLY}

#
#-----[ IN-LINE AFTER, ADD ]------------------------------------------
#
<br /><input type="radio" name="search_fields" value="subjonly" /> {L_SEARCH_MESSAGE_SUBJECT_ONLY}

#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM
suchen suche such im titel search title subject nur suchoption suchoptionen option optionen


Ich wär aber froh wenn da nochmal jemand anderer drüberschaun könnte...

Bin mir jetzt unsicher: Gehört so ein Thread ins Forum "Mod Entwicklung?"
Benutzeravatar
easygo
Mitglied
Beiträge: 2170
Registriert: 03.09.2004 13:45
Kontaktdaten:

Beitrag von easygo »

Finds immer gut, wenn bei sowas das Forum vom Mod-Autor die
erste Anlaufstelle ist. Wenn der nicht drauf reagiert (weiß einer, was
mit Niels los ist?) kann man ja immer noch loslegen.

Was jetzt die Mod angeht, da frag ich mich (schon wieder) nach dem Sinn.

Wer begrenzt schon die Suche aufs subject in dem Wissen, dass "vielsagende"
Themen (wie: Hilfe! Problem! Suche Mod! etc.) keine Seltenheit sind? :-?

Admin+Moderator vllt mal so zum Rausfiltern. easy
Benutzeravatar
Seimon
Mitglied
Beiträge: 893
Registriert: 23.02.2005 18:10
Wohnort: Linz, Österreich

Beitrag von Seimon »

easygo hat geschrieben:Finds immer gut, wenn bei sowas das Forum vom Mod-Autor die
erste Anlaufstelle ist. Wenn der nicht drauf reagiert (weiß einer, was
mit Niels los ist?) kann man ja immer noch loslegen.
http://mods.db9.dk/viewtopic.php?t=14671848
Keine Ahnung ob dort jemand schreibt...
easygo hat geschrieben:Was jetzt die Mod angeht, da frag ich mich (schon wieder) nach dem Sinn.

Wer begrenzt schon die Suche aufs subject in dem Wissen, dass "vielsagende"
Themen (wie: Hilfe! Problem! Suche Mod! etc.) keine Seltenheit sind? :-?

Admin+Moderator vllt mal so zum Rausfiltern. easy
Sinn:
- Wenn man sich nur noch an den Titel ca. erinnern kann
- zu Stichwörtern die häufig vorkommen findet man eher ein brauchbares Thema wenn man nur im Titel sucht
- Die Threads mit Hilfe! Problem! Suche Mod! will man eh nicht finden :D

Eigentlich war es ein Userwunsch und ich hab mir gedacht, ist eine Sache von 5 Minuten...
Doch dann gabs Schwirigkeiten und ich hab mich in das Problem verbissen, und hab mir am Ende gedacht ich enthalte euch meine Resultate nicht vor ;)
Benutzeravatar
easygo
Mitglied
Beiträge: 2170
Registriert: 03.09.2004 13:45
Kontaktdaten:

Beitrag von easygo »

Ahja dann macht das klar Sinn. :wink: Lösung find ich gut btw
Auf so nen Switch kommt auch nicht jeder. So easy
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Gegenfrage:

Welchen Sinn macht "nur Nachrichtentext durchsuchen"?

Ich finde, man sollte die Nurtitel-Suche gegen diese Option tauschen. (standardmäßig im phpBB)
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
easygo
Mitglied
Beiträge: 2170
Registriert: 03.09.2004 13:45
Kontaktdaten:

Beitrag von easygo »

mgutt hat geschrieben:Gegenfrage:

Welchen Sinn macht "nur Nachrichtentext durchsuchen"?
Ist schnell beantwortet! Sinnvoll bei folgender Suchoption -->

Ergebnis anzeigen als: [x] Beiträge
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

das macht keinen Unterschied. Man kann davon ausgehen, dass 90% der Wörter im Titel im Text wiederholt werden. Es erfolgt also keinerlei Differenzierung, wie ich finde.
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
easygo
Mitglied
Beiträge: 2170
Registriert: 03.09.2004 13:45
Kontaktdaten:

Beitrag von easygo »

Einfaches Gegenbeispiel: Ich kenne eine Menge Foren, wo so genannte
TAGS im Titel zusätzlich für eine bessere Übersicht sorgen sollen.

Solche TAGS sind meistens Schlagwörter wie [phpbb] und müssen
im Nachrichtentext nicht zwangsläufig enthalten sein.
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Naja, die Tags beeinflussen aber keinesfalls den Titel, der in seiner Länge nicht betroffen ist. Weiterhin sprichst Du damit einen Mod an, der eben nicht Bestandteil von phpBB ist.

Weiterhin werden die Tags bei der Suche gar nicht berücksichtigt. Und würden in beiden Varianten rausfallen, laut Deinem Beispiel.

Ich vergleiche das mal plump mit Ebay... suche im Titel ist Standard.. suche in beidem eine Option. Ebay kann sich das auf Grund der Masse an Artikeln leisten. Ab ca. 1.000.0000 Beiträge, werde ich es ebenfalls so ändern. Die Suche im Nachrichtentext bleibt für mich immer noch unbegründet und unsinnig.

Ich könnte wetten, wenn man das statistisch kontrolliert würde nichtmal 0,1% diese Option nutzen.

Gruß
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Antworten

Zurück zu „phpBB 2.0: Mod Support“