MyBB.de Forum

Normale Version: MOD: Schritt-für-Schritt Anleitung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
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
PHP-Code:
$db->query($newtable); 

Jan
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.
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
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++;
    } 
Danke,

solangsam verstehe ich das.
Wie kann ich nun die Einstellungen beim Deaktivieren wieder alle löschen?

Jan
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']."'"); 
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&uuml;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&uuml;r die Gruppe ".$usergroups['title']."",
        
"description" => "Die Nachricht f&uuml;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($resultMYSQL_BOTH));
$welcome.= "<h2>".$row."</h2>";

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"); 
Seiten: 1 2 3