Seite 17 von 21

Verfasst: 01.12.2003 12:28
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..

Verfasst: 01.12.2003 14:50
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

Verfasst: 02.12.2003 13:43
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).

Verfasst: 02.12.2003 20:50
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

Verfasst: 02.12.2003 21:56
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???

Verfasst: 03.12.2003 10:20
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).

Verfasst: 03.12.2003 10:41
von femino
Grandios. Merci an dieser Stelle nochmal. Das nächste Bier geht auf meine Rechnung.

Gruß

Andreas

Verfasst: 03.12.2003 16:08
von wumme
:oops:

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

lokal nicht :roll:

dann sag ich doch mal danke :wink:

Verfasst: 03.12.2003 18:33
von Gast
Hi Leuts.....

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

Gruss Gert

Verfasst: 04.12.2003 07:28
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 :-?