Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.37 veröffentlicht (04.11.23)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
MOD: Schritt-für-Schritt Anleitung
#21
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

Zitieren
#22
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
[Bild: banner.png]
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
Zitieren
#23
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

Zitieren
#24
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
[Bild: banner.png]
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
Zitieren
#25
Danke,

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

Jan

Zitieren
#26
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
[Bild: banner.png]
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
Zitieren
#27
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>";


Zitieren
#28
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
[Bild: banner.png]
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
Zitieren