@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.

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) . ' ' : '<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> ';
}
$select_letter .= ( $by_letter == 'others' ) ? $lang['Others'] .' ' : '<a href="'. append_sid("database.$phpEx?dir_id=$dir_id&letter=others&mode=$mode&order=$sort_order&start=$start") .'">'. $lang['Others'] .'</a> ';
$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}: {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)) . ' ' : '<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> ';
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).