Seite 1 von 2

Search only subject MOD

Verfasst: 27.04.2006 14:11
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?

Verfasst: 27.04.2006 15:12
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?"

Verfasst: 27.04.2006 18:21
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

Verfasst: 27.04.2006 22:02
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 ;)

Verfasst: 28.04.2006 12:56
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

Verfasst: 02.05.2006 15:30
von mgutt
Gegenfrage:

Welchen Sinn macht "nur Nachrichtentext durchsuchen"?

Ich finde, man sollte die Nurtitel-Suche gegen diese Option tauschen. (standardmäßig im phpBB)

Verfasst: 03.05.2006 02:03
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

Verfasst: 03.05.2006 02:22
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.

Verfasst: 03.05.2006 02:40
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.

Verfasst: 03.05.2006 02:44
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ß