Beiträge: 1.450
Themen: 155
Registriert seit: 18.03.2006
Okay,
es geht vorallem um den Lerneffekt, daher würde ich gerne ein Auswahlmenü haben. Also Drop-Down.
Um mal zu zeigen was bis jetzt da steht im Anhang das Plugin.
Allerdings kommt beim aktivieren dieser Fehler:
Zitat:Fatal error: Call to a member function on a non-object in /srv/www/htdocs/klasse_neu/Upload/inc/plugins/welcome.php on line 37
Die betreffende Zeile
Jan
Beiträge: 18.383
Themen: 257
Registriert seit: 09.02.2005
09.04.2006, 17:30
(Dieser Beitrag wurde zuletzt bearbeitet: 09.04.2006, 17:39 von Michael.)
Dass es eine Fehlermeldung gibt ist klar, du musst die globalen Variablen in einer Funktion definieren, damit du sie benutzen kannst:
PHP-Code: function welcome_activate() { global $db; ...
Zum Dropdown-Menü: Das macht für mich keinen Sinn. Wozu ein Dropdownmenü, wenn du doch sowieso für alle Gruppen eine andere Nachricht anzeigen lassen willst? Dann macht es doch mehr Sinn, von vorneherein für jede Gruppe ein Textfeld anzulegen.
Vorschlag (nicht gestestet):
PHP-Code: // Einstellungsgruppe $welcome_group = array( "gid" => "NULL", "name" => "Wilkommensnachricht", "description" => "", "disporder" => "1", "isdefault" => "no", ); $db->insert_query(TABLE_PREFIX."settinggroups", $overview_group); $gid = $db->insert_id(); // Benutzergruppen auslesen $query = $db->query("SELECT gid,title FROM ".TABLE_PREFIX."usergroups"); // Nachricht und Option für jede Benutzergruppe erstellen $i = "1"; while($usergroups = $db->fetch_array($query)) { // Optionsschalter Ja/Nein $welcome = array( "sid" => "NULL", "name" => "welcome_yesno_".$usergroups['gid']."", "title" => "Willkommensnachricht für die Gruppe ".$usergroups['title']." zeigen?", "description" => "Soll der Gruppe ".$usergroups['title']." eine Nachricht gezeigt werden?", "optionscode" => "yesno", "value" => "no", "disporder" => $i, "gid" => intval($gid), ); $db->insert_query(TABLE_PREFIX."settings", $welcome); $i++; // Nachricht $welcome2 = array( "sid" => "NULL", "name" => "welcome_message_".$usergroups['gid']."", "title" => "Willkommensnachricht für die Gruppe ".$usergroups['title']."", "description" => "Die Nachricht für die Gruppe ".$usergroups['title'].".", "optionscode" => "Text", "value" => "", "disporder" => $i, "gid" => intval($gid), ); $db->insert_query(TABLE_PREFIX."settings", $welcome2); $i++; }
Zudem musst du keine neue Tabelle anlegen, die Einstellungen werden alle in der Tabelle settings gespeichert. Dann kannst du auch über die Variable $mybb->settings['einstellung'] darauf zugreifen.
Gruß,
Michael
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
Beiträge: 1.450
Themen: 155
Registriert seit: 18.03.2006
09.04.2006, 17:44
(Dieser Beitrag wurde zuletzt bearbeitet: 09.04.2006, 17:45 von Jan.)
Scheint nicht so ganz zu gehen.
Ich hab deinen Code jetzt einmfach in den Teil activate geschrieben.
Leider klappt es nicht. Das Plugin scheint aktiviert zu sein, aber funktioniert nicht, da ich keine Einstellungen machen kann.
Jan
Beiträge: 18.383
Themen: 257
Registriert seit: 09.02.2005
Ersetze den Code durch:
PHP-Code: $welcome_group = array( "gid" => "NULL", "name" => "Wilkommensnachricht", "description" => "", "disporder" => "1", "isdefault" => "no", ); $db->insert_query(TABLE_PREFIX."settinggroups", $welcome_group); $gid = $db->insert_id(); // Benutzergruppen auslesen $query = $db->query("SELECT gid,title FROM ".TABLE_PREFIX."usergroups"); // Nachricht und Option für jede Benutzergruppe erstellen $i = "1"; while($usergroups = $db->fetch_array($query)) { // Optionsschalter Ja/Nein $welcome = array( "sid" => "NULL", "name" => "welcome_yesno_".$usergroups['gid']."", "title" => "Willkommensnachricht für die Gruppe ".$usergroups['title']." zeigen?", "description" => "Soll der Gruppe ".$usergroups['title']." eine Nachricht gezeigt werden?", "optionscode" => "yesno", "value" => "no", "disporder" => $i, "gid" => intval($gid), ); $db->insert_query(TABLE_PREFIX."settings", $welcome); $i++; // Nachricht $welcome2 = array( "sid" => "NULL", "name" => "welcome_message_".$usergroups['gid']."", "title" => "Willkommensnachricht für die Gruppe ".$usergroups['title']."", "description" => "Die Nachricht für die Gruppe ".$usergroups['title'].".", "optionscode" => "textarea", "value" => "", "disporder" => $i, "gid" => intval($gid), ); $db->insert_query(TABLE_PREFIX."settings", $welcome2); $i++; }
Gruß,
Michael
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
Beiträge: 1.450
Themen: 155
Registriert seit: 18.03.2006
Danke,
solangsam verstehe ich das.
Wie kann ich nun die Einstellungen beim Deaktivieren wieder alle löschen?
Jan
Beiträge: 18.383
Themen: 257
Registriert seit: 09.02.2005
Auch das steht im Tutorial:
PHP-Code: $query = $db->query("SELECT gid FROM ".TABLE_PREFIX."settinggroups WHERE name='Wilkommensnachricht'"); $g = $db->fetch_array($query); $db->query("DELETE FROM ".TABLE_PREFIX."settinggroups WHERE gid='".$g['gid']."'"); $db->query("DELETE FROM ".TABLE_PREFIX."settings WHERE gid='".$g['gid']."'");
Gruß,
Michael
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
Beiträge: 1.450
Themen: 155
Registriert seit: 18.03.2006
12.04.2006, 10:02
(Dieser Beitrag wurde zuletzt bearbeitet: 12.04.2006, 10:02 von Jan.)
Danke.
Eigentlich sollte es jetzt ja fast fertig sein. Leider geht es noch nicht. Was fehlt noch?
1. Ich bekomme diese Ausgabe beim deaktivieren
Zitat:Warning: preg_replace(): Unknown modifier '\' in /srv/www/htdocs/klasse_neu/Upload/inc/adminfunctions_templates.php on line 25
2. Die Nachrichten werden nicht angezeigt.
Zitat:Warning: call_user_func(welcome): First argument is expected to be a valid callback in /srv/www/htdocs/klasse_neu/Upload/inc/class_plugins.php on line 67
Hier der gekürzte Code PHP-Code: $plugins->add_hook("pre_output_page", "welcome"); function welcome_info() { ......................................................... } function welcome_activate() { require "./inc/adminfunctions_templates.php"; global $db; find_replace_templatesets("index", '#</table>\n\n</div>\n<hr class=\"hidden\" />\n<div id=\"panel\">#', "</table>\n<table align=\"center\"><tr><td width=\"40%\">\$welcome</td></tr></table>\n</div>\n<hr class=\"hidden\" />\n<div id=\"panel\">"); $newtable = "CREATE TABLE `welcome` ( `id` INT AUTO_INCREMENT, `gruppe` TEXT NOT NULL, `text` LONGBLOB NOT NULL, PRIMARY KEY (`id`) )"; $db->query($newtable); $welcome_group = array( "gid" => "NULL", "name" => "Wilkommensnachricht", "description" => "", "disporder" => "1", "isdefault" => "no", ); $db->insert_query(TABLE_PREFIX."settinggroups", $welcome_group); $gid = $db->insert_id(); // Benutzergruppen auslesen $query = $db->query("SELECT gid,title FROM ".TABLE_PREFIX."usergroups"); // Nachricht und Option für jede Benutzergruppe erstellen $i = "1"; while($usergroups = $db->fetch_array($query)) { // Optionsschalter Ja/Nein $welcome = array( "sid" => "NULL", "name" => "welcome_yesno_".$usergroups['gid']."", "title" => "Willkommensnachricht für die Gruppe ".$usergroups['title']." zeigen?", "description" => "Soll der Gruppe ".$usergroups['title']." eine Nachricht gezeigt werden?", "optionscode" => "yesno", "value" => "no", "disporder" => $i, "gid" => intval($gid), ); $db->insert_query(TABLE_PREFIX."settings", $welcome); $i++; // Nachricht $welcome2 = array( "sid" => "NULL", "name" => "welcome_message_".$usergroups['gid']."", "title" => "Willkommensnachricht für die Gruppe ".$usergroups['title']."", "description" => "Die Nachricht für die Gruppe ".$usergroups['title'].".", "optionscode" => "textarea", "value" => "", "disporder" => $i, "gid" => intval($gid), ); $db->insert_query(TABLE_PREFIX."settings", $welcome2); $i++; } } function welcome_deactivate() { require "./inc/adminfunctions_templates.php"; global $db; $drop = "DROP TABLE `welcome`;"; $db->query($drop); $query = $db->query("SELECT gid FROM ".TABLE_PREFIX."settinggroups WHERE name='Wilkommensnachricht'"); $g = $db->fetch_array($query); $db->query("DELETE FROM ".TABLE_PREFIX."settinggroups WHERE gid='".$g['gid']."'"); $db->query("DELETE FROM ".TABLE_PREFIX."settings WHERE gid='".$g['gid']."'"); find_replace_templatesets("index", '</table>\n<table align=\"center\"><tr><td width=\"40%\">\$welcome</td></tr></table>\n</div>\n<hr class=\"hidden\" />\n<div id=\"panel\">#</table>\n\n</div>\n<hr class=\"hidden\" />\n<div id=\"panel\">#', "#</table>\n\n</div>\n<hr class=\"hidden\" />\n<div id=\"panel\">#"); } function welcome_world($welcome) { global $db, $mybb, $cache, $templates, $lang, $overview; $result =$db->query("SELECT 'text' FROM 'welcome' WHERE 'gruppe='".$mybb->user['gid']."'"); $row = (fetch_array($result, MYSQL_BOTH)); $welcome.= "<h2>".$row."</h2>"; }
Beiträge: 18.383
Themen: 257
Registriert seit: 09.02.2005
12.04.2006, 20:28
(Dieser Beitrag wurde zuletzt bearbeitet: 12.04.2006, 20:28 von Michael.)
Zum ersten Fehler: In der Funktion, die die Templateänderungen rückgängig macht, ist irgendwo ein Fehler:
PHP-Code: find_replace_templatesets("index", '#</table>\n\n</div>\n<hr class=\"hidden\" />\n<div id=\"panel\">#', "</table>\n<table align=\"center\"><tr><td width=\"40%\">\$welcome</td></tr></table>\n</div>\n<hr class=\"hidden\" />\n<div id=\"panel\">");
Sind alle Anführungszeichen korrekt gesetzt?
Zum 2. Fehler: Das Plugin stimmt vorne und hinten nicht.
a) Warum legst du die Tabelle welcome an? Vor allem unter dem Gesichtspunkt, dass sie keine Daten enthält und auch nicht gefüllt wird.
b) Deshalb macht es keinen Sinn die Tabelle auszulesen:
PHP-Code: $result =$db->query("SELECT 'text' FROM 'welcome' WHERE 'gruppe='".$mybb->user['gid']."'");
Was soll da zurückkommen, wenn keine Daten vorhanden sind?
c) In der Funktion bei den globalen Variablen führst du die Variable $overview an. Diese ist für das Plugin Übersicht und wird nicht benötigt. Wenn, musst du hier $welcome einsetzen.
d) Wo soll die Ausgabe erscheinen? Auf der Startseite? Auf allen Seiten? Für alle Seiten solltest du diesen Haken verwenden:
PHP-Code: $plugins->add_hook("global_start", "welcome");
Nur für die Startseite solltest du diesen Haken verwenden:
PHP-Code: $plugins->add_hook("index_start", "welcome");
Gruß,
Michael
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
|