Liste..... Datenbank

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
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.
Acid
Ehrenadmin
Beiträge: 12195
Registriert: 26.04.2001 02:00
Wohnort: Berlin

Beitrag von Acid »

Sorry, für die Verspätung.
Ich werde die Fragen morgen beantworten.. da bin ich den ganzen Tag zuhause und hab Zeit.

@Alex
Welche Links wolltest du nochmal zählen.. die der Verzeichnisse und/oder der Einträge?

@femino
Reicht es dir vielleicht auch aus, wenn beim Ändern des Eintrages einfach nur der Name des Autors erhalten bleibt (wäre nur eine kleine Änderung)? Das zusätzliche Anzeigen des Namens von dem User, der den Beitrag geändert hat, würde mehrere grössere Änderungen verlangen..
Benutzeravatar
femino
Mitglied
Beiträge: 23
Registriert: 25.11.2003 10:52
Wohnort: Berlin
Kontaktdaten:

Beitrag von femino »

@ Acid

Ja klar, das würde mir ausreichen. Könnte der Name des Autors dann als Eintrag in ein Feld automatisch übernommen werden?

Wer das ändert, muss überhaupt nicht angezeigt werden. Wie steht's mit der Übernahme der Buttons (z.B. "Email" "private Nachricht" etc.) ? Wirklich nur, wenn der Aufwand nicht zu groß ist. Vorab Danke für deine Mühe.

Gruß

Andreas
Acid
Ehrenadmin
Beiträge: 12195
Registriert: 26.04.2001 02:00
Wohnort: Berlin

Beitrag von Acid »

@femino
Das folgende ist nur ein Auszug aus der database.php. Lösche dort den blaumarkierten Teil (auch das Komma)..
$edit = edit_count + 1;
$sql = "UPDATE ". DATABASE_TABLE ."
SET user_id = '" . $userdata['user_id'] . "', field1 =
..damit bleibt der Originalautor erhalten.
Natürlich müsstest du die Variabel {USER} in der database_display_body.tpl anders anordnen... da´s sonst so ausschaut, als hätte der Originalautor dein Eintrag auch geändert, wenn er denn geändert wurde. Was auch deine andere Frage beantworten sollte... du kannst diese Variabel ja in der database_display_body.tpl so anordnen, als würde sie in einem Feld platziert werden.
Zusätzliche Sachen wie ICQ oder Mail-Adresse kannst du natürlich auch anzeigen lassen. Dazu müsstest du in der functions_database.php folgenden Query anpassen (blau markiert)..
$sql = "SELECT e.*, u.user_id, u.username, u.user_icq FROM ". DATABASE_TABLE ." e, ". USERS_TABLE ." u WHERE e.user_id = u.user_id AND e.id = $entry_id";
In der database.php musst du dann folgende Stellen anpassen (blau markiert)..
$user = sprintf($lang['By'], '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '">' . $row['username'] . '</a>');
$user_icq = ( $row['user_icq'] != '' ) ? $row['user_icq'] : '';
'USER' => $user,
'USER_ICQ' => $user_icq,
..dann kannst du in der database_display_body.tpl das Feld mit {USER_ICQ} aufrufen.

###############################################################################################

@Alex
Wenn du die Ansichten der verschiedenen Verzeichnisse zählen willst..

Code: Alles auswählen

#
# ------- [ SQL ] -----------------------
# per phpmyadmin ausführen; auf Prefix (z.B. phpbb_) achten

ALTER TABLE phpbb_database_directories ADD dir_views MEDIUMINT(8) UNSIGNED DEFAULT '0' NOT NULL AFTER dir_order;

#
# ------- [ DATEI ] -----------------------
# database.php
#
# ------- [ FINDE ] -----------------------
# 
$template->set_filenames(array(
	"body" => "database_body.tpl")
);

#
# ------- [ DARUNTER EINFÜGEN ] -----------------------
# die Ansichten werden dann nur beim normalen Aufrufen eines Verzeichnis gezählt,
# nicht beim Erstellen/Ändern/Löschen eines Eintrages etc.

$sql = "UPDATE ". DATABASE_DIR_TABLE ." SET dir_views = dir_views + 1 WHERE dir_id = $dir_id";
if( !$db->sql_query($sql) )
{
	message_die(GENERAL_ERROR, "Could not update dir views.", '', __LINE__, __FILE__, $sql);
}

#
# ------- [ DATEI ] -----------------------
# database_dir.php
#
# ------- [ FINDE ] -----------------------
# 
                'DIR_DESCRIPTION' => $row['dir_desc'],
#
# ------- [ DARUNTER EINFÜGEN ] -----------------------
# 
                'DIR_VIEWS' => ( $row['dir_views'] != '0' ) ? $row['dir_views'] : '',
In der database_dir_body.tpl wird´s dann mit {directories.DIR_VIEWS} aufgerufen.
Wenn du die Ansichten der verschiedenen Einträge zählen willst..

Code: Alles auswählen

#
# ------- [ SQL ] -----------------------
# per phpmyadmin ausführen; auf Prefix (z.B. phpbb_) achten

ALTER TABLE phpbb_database_entries ADD entry_views MEDIUMINT(8) UNSIGNED DEFAULT '0' NOT NULL AFTER dir_id;

#
# ------- [ DATEI ] -----------------------
# database.php
#
# ------- [ FINDE ] -----------------------
# 
			$s_hidden_fields = '<input type="hidden" name="mode" value="' . $newmode .'" /><input type="hidden" name="' . id . '" value="' . $entry_id . '" />';

			if ($mode == 'display' )
			{
#
# ------- [ DARUNTER EINFÜGEN ] -----------------------
# die Ansichten werden dann nur beim Anschauen eines Eintrages gezählt, 
# nicht beim Erstellen/Ändern/Löschen eines Eintrages etc.

				$sql = "UPDATE ". DATABASE_TABLE ." SET entry_views = entry_views + 1 WHERE id = $entry_id";
				if( !$db->sql_query($sql) )
				{
					message_die(GENERAL_ERROR, "Could not update entry views.", '', __LINE__, __FILE__, $sql);
				}

#
# ------- [ FINDE (nur ein Auszug) ] -----------------------
# 
$added_updated

#
# ------- [ DARÜBER! EINFÜGEN ] -----------------------
# 
				$entry_views = ( $row['entry_views'] != '0' ) ? $row['entry_views'] : '';
#
# ------- [ FINDE ] -----------------------
# 
                                                 'L_ADDED_UPDATED' => $added_updated,

#
# ------- [ DARÜBER! EINFÜGEN ] -----------------------
# 
                                                 'ENTRY_VIEWS' => $entry_views,
In der database_display_body.tpl wird´s dann mit {ENTRY_VIEWS} aufgerufen.
Das mit der Anordnung in der Hauptansicht der Verzeichnisse is ja eigentlich nur reines HTML. Du musst es also nur hin- und herschieben, bis es passt. :roll:
Um bestimmten Gruppen Zugang zu gewähren und anderen nicht..

Code: Alles auswählen

#
# ------- [ DATEI ] -----------------------
# database.php
#
# ------- [ FINDE ] -----------------------
# 
			if ($mode == 'edit' || $mode == 'add' )
			{
#
# ------- [ DARUNTER EINFÜGEN ] -----------------------
# 
				group_auth();
#
# ------- [ DATEI ] -----------------------
# functions_database.php
#
# ------- [ am Ende vor ?> EINFÜGEN ] -----------------------
# 
function group_auth()
{
        global $db, $userdata, $lang;

        $allowed_u = array();
        $allowed_u[] = 'g11'; // <---- hier

        $access_allowed = false;
        if( in_array($userdata['user_id'],$allowed_u))
        {
                $access_allowed = true;
        }
        else
        {
                $sql = "SELECT g.group_id, g.group_name FROM ". USER_GROUP_TABLE ." ug, ". GROUPS_TABLE ." g
                           WHERE ug.user_id = '". $userdata['user_id'] ."' AND g.group_id = ug.group_id";
                if( !($result = $db->sql_query($sql)) )
                {
                        message_die(GENERAL_ERROR, 'Could not get user group.', '', __LINE__, __FILE__, $sql);
                }
                $access_allowed = false;
                while( list($group_id, $group_name) = $db->sql_fetchrow($result) )
                {
                        if( in_array('g' . $group_id,$allowed_u ))
                        {
                                 $access_allowed = true;
                                 break;
                        }
                        if( in_array('g' . $group_name,$allowed_u))
                        {
                                 $access_allowed = true;
                                 break;
                        }
                }
                if( !$access_allowed ) 
                { 
                        message_die(GENERAL_MESSAGE, $lang['Not_authorized']); 
                } 

        }
}
Wo du die Gruppe eintragen kannst, hab ich mit *hier* markiert. Wenn du mehrere Gruppen eintragen willst, musst du diese Zeile duplizieren (und halt die verschiedenen GruppenID´s eintragen).
In der neuen Version des Hacks wird das alles komfortabler einstellbar sein.

###############################################################################################

@wumme
Um eine a-z Sortierung einzubauen (du müsstest deine Änderungen am besten nochmal rückgängig machen und es neu einbauen)..

Code: Alles auswählen

#
# ------- [ DATEI ] -----------------------
# database.php
#
# ------- [ FINDE ] -----------------------
# 
else
{
	$mode = "";
}
#
# ------- [ DARUNTER EINFÜGEN ] -----------------------
# 
if( isset($HTTP_POST_VARS['letter']) )
{
        $by_letter = ( $HTTP_POST_VARS['letter'] ) ? $HTTP_POST_VARS['letter'] : '';
}
else if( isset($HTTP_GET_VARS['letter']) )
{
        $by_letter = ( $HTTP_GET_VARS['letter'] ) ? $HTTP_GET_VARS['letter'] : '';
}
#
# ------- [ FINDE ] -----------------------
# 
$search_maximum = ( strtolower($max_results) == 'all' ) ? 99999 : $max_results;
#
# ------- [ DARUNTER EINFÜGEN ] -----------------------
# 
$others_sql = '';
$select_letter = '';
for ($i = 97; $i <= 122; $i++)
{
        $others_sql .= " AND field1 NOT LIKE '". chr($i) ."%' ";
        $select_letter .= ( $by_letter == chr($i) ) ? chr($i) . '&nbsp;' : '<a href="'. append_sid("database.$phpEx?dir_id=$dir_id&letter=". chr($i) ."&search=$search&search_type=$search_type&max_results=$max_results") .'">'. chr($i) .'</a>&nbsp;';
}
$select_letter .= ( $by_letter == 'others' ) ? $lang['Others'] .'&nbsp;' : '<a href="'. append_sid("database.$phpEx?dir_id=$dir_id&letter=others&mode=$mode&order=$sort_order&start=$start") .'">'. $lang['Others'] .'</a>&nbsp;';

$field = ( $search_type != '' ) ? $search_type : 'field1';
$letter_string = ( $by_letter != '' ) ? ( $by_letter == 'others' ) ? $others_sql : " AND $field LIKE '$by_letter%'" : '';
#
# ------- [ FINDE 2x ] -----------------------
# auf den Punkt achten; ist in 2 verschiedenen sql-Anweisungen zu finden
.$search_string
#
# ------- [ jeweils DANACH EINFÜGEN ] -----------------------
# auf den Punkt achten
.$letter_string

#
# ------- [ FINDE ] -----------------------
#
        $title_sort = "database.$phpEx?dir_id=$dir_id&search=". $search ."&search_type=". $search_type ."&max_results=". $max_results;

#
# ------- [ MIT FOLGENDEM ERSETZEN ] -----------------------
#
        $title_sort = "database.$phpEx?dir_id=$dir_id&letter=$by_letter&search=". $search ."&search_type=". $search_type ."&max_results=". $max_results;

#
# ------- [ FINDE 2x ] -----------------------
#
                'L_DIRECTORIES' => $lang['Directories'],
#
# ------- [ jeweils DARÜBER EINFÜGEN ] -----------------------
#
                'L_SORT_BY_LETTER' => $lang['Sort_by_letter'],
                'SORT_BY' => $select_letter,
                'S_HIDDEN_FIELDS' => '<input type="hidden" name="letter" value="'. $by_letter .'">',

#
# ------- [ DATEI ] -----------------------
# database_body.tpl
#
# ------- [ dort EINFÜGEN wo´s hin soll ] -----------------------
# 
{L_SORT_BY_LETTER}:&nbsp;{SORT_BY}{S_HIDDEN_FIELDS}

#
# ------- [ DATEI ] -----------------------
# lang_database.php
#
# ------- [ vor ?> EINFÜGEN ] -----------------------
# 
$lang['Sort_by_letter'] = 'Show only entries starting with';
$lang['Others'] = 'others';
Die Sortierung funktioniert dann so, das standardmässig beim Klicken auf z.B. "a" nur Feld1 (der Titel) sortiert wird. Wenn du nach dem Klicken auf "a" dann bei dem Dropdown-Menü der eigentlichen Suche ein anderes Feld auswählst (und auf "Go" klickst) werden dann die Einträge deren ausgewählte Felder mit "a" beginnen angezeigt usw. (Is zwar ein wenig umständlich, aber momentan das einzig machbare.)
Wenn es Grossbuchstaben sein sollen, musst du folgende Zeile anpassen (blau markiert)..
$select_letter .= ( $by_letter == chr($i) ) ? strtoupper(chr($i)) . '&nbsp;' : '<a href="'. append_sid("database.$phpEx?dir_id=$dir_id&letter=". chr($i) ."&search=$search&search_type=$search_type&max_results=$max_results") .'">'. strtoupper(chr($i)) .'</a>&nbsp;';
Hier wird erklärt, wie man ein bestehendes Feld modifizieren kann, z.B. wie man ein Dropdown-Menü daraus machen kann (ich hoffe es ist verständlich).
Benutzeravatar
femino
Mitglied
Beiträge: 23
Registriert: 25.11.2003 10:52
Wohnort: Berlin
Kontaktdaten:

Beitrag von femino »

Grandios, funktioniert prima. Ein ganz großes Danke an dieser Stelle an Acid für deine Mühe.

Kann ich denn eigentlich auch die passenden Buttons für z.B. email, icq, etc. in der database_display_body.tpl anzeigen lassen, so dass man artig draufklicken kann?

Jedenfalls funktioniert das prächtig und ich bin schwer begeistert. Danke nochmal.

:D

Gruß

Andreas
wumme
Mitglied
Beiträge: 170
Registriert: 19.08.2002 17:20

Beitrag von wumme »

:) erstmal big thx

nur hab da jetzt ein kleines prob :-?

das suchen funzt nicht mehr

Code: Alles auswählen

# 
# ------- [ FINDE 2x ] ----------------------- 
# 
                'L_DIRECTORIES' => $lang['Directories'], 
# 
# ------- [ jeweils DARÜBER EINFÜGEN ] ----------------------- 
# 
                'L_SORT_BY_LETTER' => $lang['Sort_by_letter'], 
                'SORT_BY' => $select_letter, 
                'S_HIDDEN_FIELDS' => '<input type="hidden" name="letter" value="'. $by_letter .'">',
liegt es daran das es nicht 2x sondern 6x vorhanden ist???
Acid
Ehrenadmin
Beiträge: 12195
Registriert: 26.04.2001 02:00
Wohnort: Berlin

Beitrag von Acid »

@femino
Wenn du z.B. die Homepage des Autors anzeigen lassen willst, würde folgende Zeile nach obigem Beispiel wie folgt aussehen..
$user_www = ( $row['user_website'] != '' ) ? $row['user_website'] : '';
..um dann das www-Icon anzeigen zu lassen, müsste man diese Zeile wie folgt abändern..
$user_www = ( $row['user_website'] != '' ) ? '<a href="'. $row['user_website'] .'" target="_userwww"><img src="'. $images['icon_www'] .'" alt="'. $lang['Visit_website'] .'" title="'. $lang['Visit_website'] .'" border="0" /></a>' : '';
@wumme
Daran dürfte es eigentlich nicht liegen.. mit "2x" meinte ich übrigens die unteren 2 male (also die letzten beiden Vorkommnisse).
Poste mal einen Link zu deiner database.php (als *.txt abspeichern).
Benutzeravatar
femino
Mitglied
Beiträge: 23
Registriert: 25.11.2003 10:52
Wohnort: Berlin
Kontaktdaten:

Beitrag von femino »

Grandios. Merci an dieser Stelle nochmal. Das nächste Bier geht auf meine Rechnung.

Gruß

Andreas
wumme
Mitglied
Beiträge: 170
Registriert: 19.08.2002 17:20

Beitrag von wumme »

:oops:

nu hab ich die datei online geschoben, und da funzt es.

lokal nicht :roll:

dann sag ich doch mal danke :wink:
Gast

Beitrag von Gast »

Hi Leuts.....

wo kann man sich das zählen der Ansichten denn mal anschauen? :D

Gruss Gert
wumme
Mitglied
Beiträge: 170
Registriert: 19.08.2002 17:20

Beitrag von wumme »

hm,

hab jetzt noch ein dropdown feld eingebaut,

und wollte es anzeigen lassen, in der database_display_body.tpl funzt es auch ohne probs, nur in der database_body.tpl da will es irgendwie nicht :-?
Gesperrt

Zurück zu „phpBB 2.0: Mods in Entwicklung“