Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
global_start Hook verhindert "schon gelesen Funktion"
#1
Hallo zusammen,
ich bin neu in der Plugin Entwicklung für mybb und hab nun ein plugin geschrieben das mir Kopfschmerzen macht.

Das Plugin läuft mit dem Hook global_start und soll im Header einen täglichen Countdown anzeigen.
Das Plugin funktioniert soweit auch, das heisst die Info wird an der richtigen Stelle im Header angezeigt. Sobald ich aber das Plugin aktiviere funktioniert die Standard Funktion "Welche Beiträge hab ich noch nicht gesehen" nicht mehr, das heisst es werden mir alle Beiträge seit Aktivierung des Plugins als nicht gesehen angezeigt.

Es gibt keine Meldungen in der Konsolenansicht des Browsers.

Irgendwas mach ich falsch, aber was?
Code anbei....

PHP-Code:
<?php
// Disallow direct access to this file for security reasons
if(!defined("IN_MYBB"))
{
    die(
"Direct initialization of this file is not allowed.");
}

$plugins->add_hook('global_start','countdown_run');

function 
countdown_info()
{
    return array(
        
"name"            => "CountDown for MyBB",
        
"description"    => "CountDown for MYBB",
        
"website"        => "",
        
"author"        => "",
        
"authorsite"    => "",
        
"version"        => "1.0",
        
"guid"             => "",
        
"compatibility" => "1*"
    
);
}

function 
countdown_activate()
{
    global 
$db$mybb;
    
    
$settingsgroup = array(
        
"name"            => "countdown",
        
"title"            => "Countdown Events",
        
"description"    => "Countdown for oncoming events",
        
"disporder"        => 1,
        
"isdefault"        => 0);
    
$db->insert_query("settinggroups"$settingsgroup);
    
$gid $db->insert_id();
    
    
$settings[] = array(
        
"name"            => "countdown_active",
        
"title"            => "Countdown Active?",
        
"description"    => "Enable the Countdown",
        
"optionscode"    => "onoff",
        
"value"            => "off",
        
"disporder"        => 1,
        
"gid"            => $gid);

    
$settings[] = array(
        
"name"            => "countdown_date",
        
"title"            => "Countdown Date",
        
"description"    => "Please enter the date for your countdown like (dd-mm-yyyy) e.g. 06-16-2022",
        
"optionscode"    => "text",
        
"value"            => "",
        
"disporder"        => 2,
        
"gid"            => $gid);
    
    
$settings[] = array(
        
"name"            => "countdown_text",
        
"title"            => "Countdown Text",
        
"description"    => "What kind of text do you want to print on the page (XXX is placeholder for countdown) like -Just XXX days-",
        
"optionscode"    => "text",
        
"value"            => "",
        
"disporder"        => 3,
        
"gid"            => $gid);

    
$settings[] = array(
        
"name"            => "countdown_link",
        
"title"            => "Countdown Link",
        
"description"    => "Any link for the Text?",
        
"optionscode"    => "text",
        
"value"            => "",
        
"disporder"        => 4,
        
"gid"            => $gid);

        
$settings[] = array(
            
"name"            => "countdown_ende",
            
"title"            => "Countdown End",
            
"description"    => "Text if countdown ends?",
            
"optionscode"    => "text",
            
"value"            => "",
            
"disporder"        => 5,
            
"gid"            => $gid);

        
    
    foreach(
$settings as $setting) {
        
$db->insert_query("settings"$setting);
    }
    
    
rebuild_settings();

}

function 
countdown_deactivate()
{
    global 
$db;
    
    
$db->query("DELETE FROM " TABLE_PREFIX "settinggroups WHERE name='countdown'");
    
$db->query("DELETE FROM " TABLE_PREFIX "settings WHERE name IN ('countdown_date', 'countdown_text', 'countdown_link', 'countdown_active', 'countdown_ende')");
    
    
rebuild_settings();

}



//RUN
function countdown_run() {
global 
$db;
global 
$countdown;
    
//A: RECORDS TODAY'S Date And Time
$today time();
// erst mal schauen ob Event aktiv ist
$query$db->simple_select("settings","*""name='countdown_active'", array(
    
"order_by" => 'name'
    
"order_dir" => 'DESC',
    
"limit" => 1));
    
$countdown_active=$db->fetch_array($query)[value];
    
//wenn aktiv dann...
if ($countdown_active==1)
{
// Datum aufschlüsseln
$query$db->simple_select("settings","*""name='countdown_date'", array(
    
"order_by" => 'name'
    
"order_dir" => 'DESC',
    
"limit" => 1));
    
$countdown_date=$db->fetch_array($query)[value];
    
//$date=$countdown_date[value];
    
$day=substr($countdown_date,0,2);
    
$month=substr($countdown_date,3,2);
    
$year=substr($countdown_date,6,4);
    
$event mktime(0,0,0,$day,$month,$year);

//Errechnen wann das Event ist
$countdown round(($event $today)/86400);
if (
$countdown>0)
{
// Text des Events abholen
$query$db->simple_select("settings","*""name='countdown_text'", array(
    
"order_by" => 'name'
    
"order_dir" => 'DESC',
    
"limit" => 1));
    
$countdown_text=$db->fetch_array($query)[value];
//LInk des Events abholen
$query$db->simple_select("settings","*""name='countdown_link'", array(
        
"order_by" => 'name'
        
"order_dir" => 'DESC',
        
"limit" => 1));
        
$countdown_link=$db->fetch_array($query)[value];

//Daten in Variable auslagern zur Darstellung im Template
$countdown="<li><a href=\"".$countdown_link."\" class=\"merlintreffen\">".str_replace("XXX",$countdown$countdown_text)."</a></li>";
}
// Wenn Countdown erreicht, dann nichts darstellen!
else 
{
    
//LInk des Events abholen
$query$db->simple_select("settings","*""name='countdown_ende'", array(
    
"order_by" => 'name'
    
"order_dir" => 'DESC',
    
"limit" => 1));
    
$countdown_link=$db->fetch_array($query)[value];
    
$countdown="<li><a href=\"".$countdown_link."\" class=\"merlintreffen\">"$countdown_ende ."</a></li>";
}
    
}
//Wenn nicht aktiv dann nichts darstellen
else $countdown="";
    

Zitieren
#2
Hab das Problem gelöst, wobei ich es noch nicht ganz verstehe.

Mein Fehler war, dass ich direkt auf die Einstellungs DB mit simple_select zugegriffen habe und mittels [value] den Feld Inhalt geholt habe.

Hab erst jetzt gemerkt das sich auf die Einstellungen viel einfacher zugreifen kann.
Damit geht es nun, hab aber noch nicht verstanden warum das vorher so einen Randeffekt gebracht hat.
Vielleicht kanns mir Anfänger ja jemand erklären.
Günter
Zitieren
#3
Hi,

kurz mit dem Handy überflogen:

Wenn du auf den Index value zugreifen willst, müsstest du ['value'] nehmen und nicht [value]. Wahrscheinlich kam es zu einem Fehler während der Verarbeitung. Das ist so das erste was mir aufgefallen ist.

Grüße
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  build_forumbits_forum Hook The Lady 3 1.782 13.05.2021, 16:28
Letzter Beitrag: Schnapsnase
  Hook für Schnellantwort itsmeJAY 3 1.906 26.07.2019, 07:23
Letzter Beitrag: StefanT
  Inlineeditor - mit Hook Zeit des Posts überprüfen cthulhu 3 2.995 08.10.2016, 17:22
Letzter Beitrag: cthulhu
  Welcher Hook um Abbonierte Themen zu erweitern? baeckerman83 4 2.942 11.09.2015, 11:34
Letzter Beitrag: baeckerman83
  Plugin - Template und Hook baeckerman83 6 3.030 28.08.2015, 20:55
Letzter Beitrag: baeckerman83