Smilies Reihenfolge ändern

Probleme bei der regulären Arbeiten mit phpBB, Fragen zu Vorgehensweisen oder Funktionsweise sowie sonstige Fragen zu phpBB im Allgemeinen.
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.1, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Gast

Beitrag von Gast »

Zunächst mal danke für Deine Antwort. :)

Im Moment stehen im Feld smile_stats Werte, die ich praktisch von Hand eingegeben habe.
Ich möchte aber, dass dieses Feld automatisch gefüllt wird, und zwar mit den Werten, die der Statistik-Mod ermittelt.
Auf der Statistik-Seite wird mir ja angezeigt, dass z.B. smiley :) x-mal aufgerufen wurde und damit Rang 1 hat, smiley :( wurde y-mal aufgerufen und hat Rang 2 usw. usw.;
Und diesen Rangwert (im template heisst er {topsmilies.RANK}) müsste ich doch irgendwie in das Datenbankfeld smile_stats reinkriegen können
(so wie beim counter ja auch der in der php-Datei ermittelte Wert wieder an die Datenbank übergeben wird) ?
Leider fehlt mir (noch) das entsprechende php-Wissen, und mit dem was ich bisher probiert habe, bekomme ich nur parse-errors. :(

Liebe Grüsse, Andrea
beginner
Mitglied
Beiträge: 16
Registriert: 19.08.2003 13:10

Beitrag von beginner »

schön und gut, jetzt weiss ich wo ich im board für die benutzer die reihenfolge verändern kann, aber wo muss ich was einstellen das ich im adminbereich auch eine sortierte ansicht habe. was mich auch iritiert ist, dass ich bei der funktion "einen neuen smily hinzufügen" -> "smilie bilddatei" ebenfalls absolut keine vernünftige reihenfolge habe.

wo stell ich das um?
Gast

Beitrag von Gast »

Hallo beginner,
sowie ich festgestellt hab, werden die smilies im admin-Bereich genau in der Reihenfolge dargestellt, wie sie in der Datenbank-Tabelle drinstehen.
Du kannst mit PhpMyAdmin die Tabelle phpbb_smilies öffnen, dann über 'Operationen' 'Tabelle sortieren nach' neusortieren lassen nach einem Datenbankfeld, z.B. smile_url,
dann werden sie Dir im Admin-Bereich alphabetisch geordnet angezeigt.


Zu meinem Problem:
ich bin offenbar drauf reingefallen, dass es vom statistics-mod verschiedene Versionen gibt oder gab. :oops:
Ich habe den neuesten 2.1.5 von AcydBurn eingebaut, der Beitrag von K (vom 28.06.2003) auf Seite 2 dieses threads bezieht sich aber scheinbar auf einen anderen (oder älteren ?) von Nivisec.
Ich habe diesen bisher nicht kpl. gefunden, nur einen thread unter phpbb.com, in dem ein Teil dieses mods gepostet wurde; darin stehen einige Zeilen betr. smile_stats, die in der neuen Version gar nicht mehr vorkommen; also kein Wunder, dass das so nicht funktionieren konnte. :D
Vielleicht weiss jemand, wo's diese andere Version noch gibt (war glaub ich irgendwas mit 1.2.2), ich würde mir gern mal anschauen, wie das gelöst wurde.

Gruss, Andrea
Benutzeravatar
pantherkatze
Mitglied
Beiträge: 8
Registriert: 14.08.2003 07:58

Beitrag von pantherkatze »

Anonymous hat geschrieben:Zunächst mal danke für Deine Antwort. :)

Im Moment stehen im Feld smile_stats Werte, die ich praktisch von Hand eingegeben habe.
Ich möchte aber, dass dieses Feld automatisch gefüllt wird, und zwar mit den Werten, die der Statistik-Mod ermittelt.
Auf der Statistik-Seite wird mir ja angezeigt, dass z.B. smiley :) x-mal aufgerufen wurde und damit Rang 1 hat, smiley :( wurde y-mal aufgerufen und hat Rang 2 usw. usw.;
Und diesen Rangwert (im template heisst er {topsmilies.RANK}) müsste ich doch irgendwie in das Datenbankfeld smile_stats reinkriegen können
(so wie beim counter ja auch der in der php-Datei ermittelte Wert wieder an die Datenbank übergeben wird) ?
Leider fehlt mir (noch) das entsprechende php-Wissen, und mit dem was ich bisher probiert habe, bekomme ich nur parse-errors. :(

Liebe Grüsse, Andrea
Ich hab da heute mal gebastelt:
es muss "Board Statistics 2.1.5" und das Modul "Top Smilies" installiert sein

in der Tabelle phpbb_smilies ein Extrafeld "smile_stat" einfügen

dann in top_smilies/module.php suchen nach:

Code: Alles auswählen

$all_smilies[$i]['count'] = $count;
$all_smilies[$i]['code'] = $smile_codes[0]['code'];
$all_smilies[$i]['smile_url'] = $smile_codes[0]['smile_url'];
$total_smilies = $total_smilies + $count;
danach einfügen:

Code: Alles auswählen

$sql="UPDATE " . SMILIES_TABLE . " 
		SET smile_stat  ='" . $all_smilies[$i]['count'] . "'
		WHERE  smile_url = '" . $all_smilies[$i]['smile_url'] . "'";
		
		if ( !($result = $db->sql_query($sql)) )
		{
			message_die(GENERAL_ERROR, 'Couldn\'t retrieve smilies data', '', __LINE__, __FILE__, $sql);
		}
dann noch in includes/functions_post.php die Sortierung der Smilies in

Code: Alles auswählen

ORDER BY smile_stat DESC";
ändern
Gast

Beitrag von Gast »

uiii - vielen lieben Dank - genauso ein 'Rezept' hatte ich mir gewünscht :D

sorry - hab nicht mehr regelmässig reingeschaut, weil ich nicht mehr damit gerechnet hatte, dass jemand antwortet

Liebe Grüsse, Andrea
Daedalus
Mitglied
Beiträge: 40
Registriert: 17.09.2002 15:51
Kontaktdaten:

Beitrag von Daedalus »

kann man smilys eigenltich auch zufällig sortieren lassen?
SandraH.78
Mitglied
Beiträge: 25
Registriert: 10.07.2004 20:18

ja

Beitrag von SandraH.78 »

Hallo,

ja das ist möglich Order by RAND() sortiert zufällig.

Gruß sandra
Benutzeravatar
tazzi
Mitglied
Beiträge: 801
Registriert: 15.10.2004 14:08
Wohnort: Rickling
Kontaktdaten:

Beitrag von tazzi »

genau so hab ichs gemacht, in myadmin einfach die nummern neu vergeben und schon gings wunderbar :)

sollte man aber wirklich nur machen wenn einem langweilig ist ;)
bye bye Tazzi
_______________
ich bin imaginär
Berserker
Mitglied
Beiträge: 71
Registriert: 13.05.2003 18:19

Beitrag von Berserker »

Tom_der_phpbb_Fan hat geschrieben:also meiner meinung nach ist was anderes viel einfacher :

ihr geht einfach in eure mysql datenbank und äbdert dort beliebig die id der smilies.

die datei dazu ist die phpbb_smilies

dort vergebt ihr dem smiley, welches ihr als erstes haben möchtet den niedrigsten id wert.

alle weiteren der reihenfolge entsprechend aufsteigend
zb.

1 smiley id 50
2 smiley id 51

und so weiter, das geht schnell und ist sehr einfach.

:lol:
Gibt es ein Mod der das in den Admin Bereich einfügt?
So wie "Smilie nach oben" und "Smilie nach unten" (Wie in den Foren Einstellungen)
Ich such hier schon ne weile rum hab aber nbichts gefunden.
Den "Smilies Order 0.2.0" Mod scheint ja nicht mehr zu Funktionieren.
Gismo110
Mitglied
Beiträge: 848
Registriert: 29.03.2005 16:48
Kontaktdaten:

Beitrag von Gismo110 »

hi meine module.php sieht wie folgt aus und es wird hinter jedem smile in der statistik immer 1% angezeit... Was muss ich ändern, damit man den richtigen Prozentualen wert der nutzung der smiles sieht?

Code: Alles auswählen

<?php
/***************************************************************************
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 ***************************************************************************/

// Result Cache used here

//
// Top Smilies
//

//
// Start user modifiable variables
//

//
// Set smile_pref to 0, if you want that smilies are only counted once per post.
// This means that, if the same smilie is entered ten times in a message, only one is counted in that message.
//
$smile_pref = 0;

$bars = array(
	'left' => 'images/vote_lcap.gif',
	'right' => 'images/vote_rcap.gif',
	'bar' => 'images/voting_bar.gif'
);

//
// End user modifiable variables
//

$statistics->init_bars($bars);

//
// Functions
//

//
// sort multi-dimensional array - from File Attachment Mod
//
function smilies_sort_multi_array_attachment ($sort_array, $key, $sort_order) 
{
	$last_element = count($sort_array) - 1;

	$string_sort = ( is_string($sort_array[$last_element-1][$key]) ) ? TRUE : FALSE;

	for ($i = 0; $i < $last_element; $i++) 
	{
		$num_iterations = $last_element - $i;

		for ($j = 0; $j < $num_iterations; $j++) 
		{
			$next = 0;

			//
			// do checks based on key
			//
			$switch = FALSE;
			if ( !($string_sort) )
			{
				if ( ( ($sort_order == 'DESC') && (intval($sort_array[$j][$key]) < intval($sort_array[$j + 1][$key])) ) || ( ($sort_order == 'ASC') &&    (intval($sort_array[$j][$key]) > intval($sort_array[$j + 1][$key])) ) )
				{
					$switch = TRUE;
				}
			}
			else
			{
				if ( ( ($sort_order == 'DESC') && (strcasecmp($sort_array[$j][$key], $sort_array[$j + 1][$key]) < 0) ) || ( ($sort_order ==   'ASC') && (strcasecmp($sort_array[$j][$key], $sort_array[$j + 1][$key]) > 0) ) )
				{
					$switch = TRUE;
				}
			}

			if ($switch)
			{
				$temp = $sort_array[$j];
				$sort_array[$j] = $sort_array[$j + 1];
				$sort_array[$j + 1] = $temp;
			}
		}
	}

	return ($sort_array);
}

//
// END Functions
//

$template->assign_vars(array(
	'L_TOP_SMILIES' => $lang['module_name'],

	'L_USES' => $lang['Uses'],
	'L_RANK' => $lang['Rank'],
	'L_PERCENTAGE' => $lang['Percent'],
	'L_GRAPH' => $lang['Graph'],
	'L_IMAGE' => $lang['smiley_url'],
	'L_CODE' => $lang['smiley_code'])
);

//
// Most used smilies
//

// Determine if Caching is used
if (!$statistics->result_cache_used)
{
	@set_time_limit(0);

	// Init Cache -- tells the Stats Mod that we want to use the result cache
	$result_cache->init_result_cache();

	// With every new sql_query insult, the Statistics Mod will end the previous Control. ;)
	$sql = 'SELECT code, smile_url
	FROM ' . SMILIES_TABLE;

	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Couldn\'t retrieve smilies data', '', __LINE__, __FILE__, $sql);
	}

	$rows = $db->sql_fetchrowset($result);
	$num_rows = $db->sql_numrows($result);
	
	$all_smilies = array();
	$total_smilies = 0;
	$where_query = '';
	$smile_group = array();
	$smile_urls = array();
	$smile_urls['url'] = array();
	$count = 0;

	for ($i = 0; $i < $num_rows; $i++)
	{
		$where_query .= ($where_query == '') ? ' (post_text LIKE \'%' . str_replace("'", "\'", $rows[$i]['code']) . '%\')' : ' OR (post_text LIKE \'%' . str_replace("'", "\'", $rows[$i]['code']) . '%\')';
		
		if (!in_array($rows[$i]['smile_url'], $smile_urls['url']))
		{
			$smile_urls['url'][] = $rows[$i]['smile_url'];
			$smile_urls[$rows[$i]['smile_url']] = $count;
			$count++;
			$all_smilies[$smile_urls[$rows[$i]['smile_url']]]['code'] = str_replace("'", "\'", $rows[$i]['code']);
		    $all_smilies[$smile_urls[$rows[$i]['smile_url']]]['smile_url'] = $rows[$i]['smile_url'];
		}

		$smile_group[$smile_urls[$rows[$i]['smile_url']]]['code'][] = str_replace("'", "\'", $rows[$i]['code']);
		$smile_group[$smile_urls[$rows[$i]['smile_url']]]['url'][] = $rows[$i]['smile_url'];

		$all_smilies[$smile_urls[$rows[$i]['smile_url']]]['count'] = 0;
	
	}
		
	$sql = "SELECT post_text
	FROM " . POSTS_TEXT_TABLE . "
	WHERE " . $where_query . "
	GROUP BY post_text";

	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Couldn\'t retrieve smilies data', '', __LINE__, __FILE__, $sql);
	}

	$rows = $db->sql_fetchrowset($result);
	$message = '';
	for ($i = 0; $i < count($rows); $i++)
	{
		$message .= $rows[$i]['post_text'];
	}
	
//	echo ";".$message.";";	
	for ($i = 0; $i < count($smile_group); $i++)
	{
		$found = FALSE;
		$match_regexp = '';
		for ($j = 0; $j < count($smile_group[$i]['code']) && $found == FALSE; $j++)
		{
			if ($smile_pref == 0)
			{
				if (strstr($message, $smile_group[$i]['code'][$j]))
				{
					$all_smilies[$i]['count'] = $all_smilies[$i]['count'] + 1;
					$found = TRUE;
				}
			}
			else
			{
				$match_regexp .= ($match_regexp == '') ? '/(?<=.\W|\W.|^\W)' . preg_quote($smile_group[$i]['code'][$j], "/") . '(?=.\W|\W.|\W$)' : '|(?<=.\W|\W.|^\W)' . preg_quote($smile_group[$i]['code'][$j], "/") . '(?=.\W|\W.|\W$)';
			}
		}

		if (!$found)
		{
			if ($match_regexp != '')
			{
				$match_regexp .= '/';
	//			echo "<br /><br />" . $match_regexp . "<br />";
	//			echo "#".$all_smilies[$i]['smile_url']."#";
				preg_match_all($match_regexp, ' ' . $message . ' ', $matches);
	//			echo "<br />-" . count($matches[0]) . "-<br />";
				$all_smilies[$i]['count'] = $all_smilies[$i]['count'] + count($matches[0]);
			}
		}
	}
	
	for ($i = 0; $i < count($all_smilies); $i++)
	{
		$total_smilies = $total_smilies + $all_smilies[$i]['count'];
	}

	// Sort array
	$all_smilies = smilies_sort_multi_array_attachment($all_smilies, 'count', 'DESC');

	$limit = ( $return_limit > count($all_smilies) ) ? count($all_smilies) : $return_limit;

	for ($i = 0; $i < $limit; $i++)
	{
		$class = ($i % 2) ? $theme['td_class2'] : $theme['td_class1'];

		$statistics->do_math($all_smilies[0]['count'], $all_smilies[$i]['count'], $total_smilies);

		if ($all_smilies[$i]['count'] != 0)
		{
			$template->assign_block_vars('topsmilies', array(
				'RANK' => $i+1,
				'CLASS' => $class,
				'CODE' => $all_smilies[$i]['code'],
				'USES' => $all_smilies[$i]['count'],
				'PERCENTAGE' => $statistics->percentage,
				'BAR' => $statistics->bar_percent,
				'URL' => '<img src="'. $board_config['smilies_path'] . '/' . $all_smilies[$i]['smile_url'] . '" alt="' . $all_smilies[$i]['smile_url'] . '" border="0">')
			);
		}

		$result_cache->assign_template_block_vars('topsmilies');
	}
}
else
{
	// Now use the result cache, with block_num_vars we are getting the number of variables within the block
	for ($i = 0; $i < $result_cache->block_num_vars('topsmilies'); $i++)
	{
		$template->assign_block_vars('topsmilies', $result_cache->get_block_array('topsmilies', $i));
	}

}

?>
Antworten

Zurück zu „phpBB 2.0: Administration, Benutzung und Betrieb“