Neuigkeiten:

moziloCMS verwendet Cookies. Wenn Sie auf unserer Seite weitersurfen, stimmen Sie der Cookie-Nutzung zu Datenschutzerklärung
moziloCMS Layouts
moziloCMS Plugins

Hauptmenü

Eigene Error Seite einstellen

Begonnen von -FuFu-, 26. April 2013, 18:54:29

« vorheriges - nächstes »

-FuFu-

Mahlzeit zusammen :)
ich würd hier gern das Ergebnis dieses Threads: http://www.mozilo.de/forum/index.php/topic,3382.0.html mit Euch teilen.

Als erstes einmal einen ganz großes danke nochmals an stefanbe, der mir mit viel Geduld weiter geholfen hat, ohne ihn würd ich wohl noch immer verzweifelt am PC sitzen und mich fragen wo der Fehler liegt :D


Aber nun zum Plugin selbst.
Das Plugin ermöglicht eine eigene Fehlerseite auszugeben, wenn eine nicht existierende Kategorie und/oder Inhaltsseite aufgerufen wird. Man kann entweder eine vorher angelegte Inhaltsseite anzeigen lassen oder eine eigene htm/html Datei, das ganze ist im Adminbereich einstellbar.

Nutzung
Um das Plugin nutzen zu können, muß man lediglich in die "template.html" des genutzten Designs {Error404} einfügen, am besten vor dem </head> Tag.
Das Plugin wurde mit moziloCMS 1.12 getestet und funktionierte mit und ohne mod_rewrite.

Bekannte Fehler
Der einzige mir gerade bekannte Fehler ist, das wenn man den Pfad zur eigenen Fehlerseite ändert, man einmal "CMS Inhaltsseite nutzen?" aktiviern muß und speichern und dann die Option wieder deaktivieren und Speichern, das die eigene Fehlerseite angezeigt wird. Warum es so ist konnte ich leider noch nicht rausfinden, aber vielleicht gibt es hier ja jemanden, der sich das mal anschauen will ;)


Dem Plugin liegt eine default.htm bei, diese kann man sich auch selbst anpassen, man kann aber auch eine andere Datei auf dem Server wählen, weitere Infos in der Beschreibung im Adminbereich.
Hier mal ein Screenshot dazu:


Wenn noch fragen offen sind, immer raus damit, ich geb mein bestes eine antwort zu finden ;)
Ansonsten hoffe ich, das euch das Plugin gefällt und keine größeren Fehler mehr enthalten sind.

stefanbe

super

hier noch ein paar vereinfachungen ich kans nicht lassen  :)
ungetestet
        function getContent($value) {
        global $CAT_REQUEST_URL;
        global $PAGE_REQUEST_URL;
global $CAT_REQUEST;
        global $PAGE_REQUEST;
global $BASE_DIR, $PLUGIN_DIR_NAME;

# prüft ob Seite existiert
        if(empty($CAT_REQUEST_URL))
            return null;
        if(empty($PAGE_REQUEST_URL) and $CAT_REQUEST_URL == substr($CAT_REQUEST,3))
            return null;
        if($PAGE_REQUEST_URL == substr($PAGE_REQUEST,3) and $CAT_REQUEST_URL == substr($CAT_REQUEST,3))
            return null;
        global $syntax;
        # Link zur Fehlerseite setzen

# status code setzen/senden
header("HTTP/1.0 404 Not Found");
header("Status: 404 Not Found");

# $value lehr ist benutzen wir eine html seite aus dem Plugin Ordner
# Ausgabe wenn eigene Fehlerseite verwendet wird
if (!$value and file_exists($BASE_DIR.$PLUGIN_DIR_NAME."/Error404/".$this->settings->get("error_page"))) {
    $inhalt = file_get_contents($BASE_DIR.$PLUGIN_DIR_NAME."/Error404/".$this->settings->get("error_page"));
    $syntax->content = $inhalt;
    return null;
# $value ist nicht lehr also nehmen wir den inhalt davon
# Ausgabe wenn CMS Inhaltsseite verwendet wird
} elseif($value) {
    list($content_first,$content,$content_last) = $syntax->splitContent();
    $syntax->content = $content_first.$value.$content_last;
    return null;
}
return null;
    }

    /***************************************************************
    *
    * Gibt die Konfigurationsoptionen als Array zurück.
    *
    ***************************************************************/
    function getConfig() {
        $config = array();
       
        global $BASE_DIR, $PLUGIN_DIR_NAME;
# alle seiten die im Plugin sind und mit .html oder .htm enden zu auswahl anbitten
$fehler_seiten = getDirAsArray($BASE_DIR.$PLUGIN_DIR_NAME."/Error404",array(".html",".htm"));
# keine ins array hinzufügen
$fehler_seiten = array_merge(array("keine"), $fehler_seiten);
if(count($fehler_seiten) > 0) {
        $config['error_page'] = array(
            "type" => "select",
            "description" => "Error Seite",
            "descriptions" => $fehler_seiten,
            "multiple" => "false"
            );

}

            return $config;
    } // function getConfig


wenn du nur {Error404} verwendest wir die im Plugin eingestelte ? ? ?.html benutzt
oder {Error404| das was als error erscheinen sol ein [include|] geht auch }
das muss nicht im template stehen du kanst es  auch in der Inhaltseite eingetragen die als default erscheint

nehm die error dateien aus dem Plugin Ordner da sonst wenn das Plugin gelöscht wierd immer noch was irgendwo rumliegt

lg stefanbe

-FuFu-

aber so ist es doch nicht mehr möglich z.b. www.meine-domain.de/404.htm als fehler seite zu verwenden oder seh ich das falsch?
denn diese option nutz ich bei meinen Projekten, dort ist immer per .htaccess die 404 fehlerseite mit /404.htm definiert.
und diese fehlerseite würd ich auch im cms gern anzeigen lassen, wenn eine ungültige Seite angefordert wird. und so bleibt auch nach dem löschen des plugins bei mir keine "nicht benutze" Datei übrig ;)

daher würd ich das gern so lassen, das man die freie wahl hat.

und ja {error404} kann man auch in die default Seite und nicht ins Template schreiben, so hatte ich es ja zum testen drin, im template find ich persönlich sicherer aber kann ja jeder dann halten wie er es gern hätte denk ich mal.

zumindest funktioniert es wie es soll (hoff ich zumindest, bisher läuft es auf 2 Projekten ohne Probleme) und das ist das wichtigste, script verschönerung oder kürzungen kann man ja noch machen, vielleicht übernimmt ihr ja eine ähnliche funktion in die 2.0 oder nimmt es da auch als plugin irgendwie auf, ich persönlich find die funktion sehr nützlich, allein schon um google zu zeigen, das die dort gespeicherten links nicht mehr gültig sind.

aber wie gesagt, danke für deine mühe :) nun versteh ich es etwas besser, wie man ein plugin erstellt :D

-FuFu-

mir ist eben noch folgendes aufgefallen:
bei aktivem mod_rewrite, wenn man nun die index.php aufruft (egal ob mit oder ohne Parameter), wird man auch auf die Fehlerseite geleitet, passiert, wenn man z.b. den Button im Adminbereich nutzt um sich die Homepage anzeigen zu lassen.

mich persönlich stört es nicht wirklich, da ich alle links auf die "Hauptseite" mit href="/" setzte, aber es ist doch ein ungewollter nebeneffekt würd ich sagen ;)
falls jemanden dazu auf die schnelle nen "fix" einfällt immer her damit, sonst muß ich mal etwas experimentieren die Tage, aber nun werd ich mal ins Bett ;) die arbeit für heute/gestern ist getan und das WE steht vor der Tür

stefanbe

#4
Das Plugin soll doch für alle sein und die wenigsten Erstellen sich eine eigene .htaccess.

Deshalb Schlage ich vor eine Selectbox für die Fehlerseiten aus dem Pluginordner
und zusätzlich noch ein Inputfeld für eine die nicht im Pluginordner liegt.

Alle anderen einstellungen brauchst Du nicht.

Für die Selectbox
        global $BASE_DIR, $PLUGIN_DIR_NAME;
        # alle seiten die im Plugin sind und mit .html oder .htm zu auswahl anbitten
        $error_pages = array("keine" => "keine Ausgewählt");
        foreach(getDirAsArray($BASE_DIR.$PLUGIN_DIR_NAME."/Error404",array(".htm",".html")) as $page) {
            # array erstellen damit in der selectbox der name der datei steht und als parameter der komplete pfad incl. datei.
            $error_pages[$BASE_DIR.$PLUGIN_DIR_NAME."/Error404/".$page] = $page;
        }

        $config['error_page'] = array(
            "type" => "select",
            "description" => "Hier kanst Du eine Fehler Seite aus dem Plugin Ordner Auswählen",
            "descriptions" => $error_pages,
            "multiple" => "false"
            );

Für das Inputfeld
$config['ownSide'] = array(
            "type" => "text",
            "size" => "75",
            "description" => "oder Du gibst hier eine Fehler Seite ein."
        );


Für die Ausgabe in getContent($value)

# prüfen ob der Plugin Platzhalter ein Parameter mit bekommen hat
# {Error404} kein Parameter
if(!$value) {
    $error_page = false;
    # steht in dem Inputfeld eine gühltige Datei. Das Inputfeld hat vorang
    if(file_exists($BASE_DIR.$this->settings->get("ownSide")))
        $error_page = $BASE_DIR.$this->settings->get("ownSide");
    # wurde in der Selectbox eine Date ausgewählt
    elseif(file_exists($this->settings->get("error_page")))
        $error_page = $this->settings->get("error_page");
    # es gibt eine gültige Datei
    if($error_page) {
        # $error_page mit dem Inhalt der Datei Füllen
        $error_page = file_get_contents($error_page);
        $syntax->content = $error_page;
        return null;
    }
}
# {Error404| error Inhalt } mit Parameter
list($content_first,$content,$content_last) = $syntax->splitContent();
$syntax->content = $content_first.$value.$content_last;
return null;


Zu dem Problemm mit der index.php schau doch einfach mal was die so ausgeben wenn die index.php aufgerufen wurde
echo $CAT_REQUEST_URL."<br />\n";
echo $PAGE_REQUEST_URL."<br />\n";
echo substr($CAT_REQUEST,3)."<br />\n";
echo substr($PAGE_REQUEST,3)."<br />\n";


lg stefanbe

-FuFu-

#5
ich werd mich da heute abend mal ransetzten, die idee von dir ist gut.
und ja, das plugin sollte für jeden nutzbar sein und je weniger man dann noch selbst ändern muß, je besser ist es.

ich werd mich dann später melden und die neue Version dann mit anhängen


edit:::
ich hab gerade nochmal geschaut auf dem Projekt mit aktivem mod_rewrite, jetzt wird beim aufruf der index.php ganz normal die startseite angezeigt... sehr komisch und ich hab nichts geändert...
ich werd es nochmal beobachten

edit2:::
und nu wieder die Fehlerseite... ich werd heute abend mal forschen, jetzt müssen noch ein paar andere sachen erledigt werden

-FuFu-

wenn man die index.php aufruft bekommt man folgende ausgabe:
inde<br />
<br />
Startseite<br />
Willkommen<br />

ich hab deine Änderungen mal rein gemacht, das Problem ist, wenn ich per Selectbox die "default.htm" wähle und keine eigene Seite angeb, bleibt die Errorseite komplett weiss, geb ich meine eigene Seite an, wird diese auch angezeigt...
ich hab keine idee woran es liegen könnte, in der "plugin.conf" wird der Pfad richtig angegeben

-FuFu-

#7
ich hab mal geschaut, was da ausgegeben wir, zum debuggen hab ich den code mal so geändert:
if(!$value) {
$error_page = false;
# steht in dem Inputfeld eine gühltige Datei. Das Inputfeld hat vorang
if(file_exists($BASE_DIR.$this->settings->get("ownSide")))
$error_page = $BASE_DIR.$this->settings->get("ownSide");
# wurde in der Selectbox eine Date ausgewählt
elseif(file_exists($this->settings->get("error_page")))
$error_page = $this->settings->get("error_page");
# es gibt eine gültige Datei
if($error_page) {
# $error_page mit dem Inhalt der Datei Füllen
#$error_page = file_get_contents($error_page);
#$syntax->content = $error_page;
echo "Errorpage= ".$error_page;
return null;
}
}

und die ausgabe von $error_page bei auswahl von default.htm per Selectbox ist: /webspace/13/59177/galaxy-print.de/
also ohne den pluginordner und ohne die default.htm.
in der plugin.conf sieht der Eintrag folgendermaßen aus: error_page = /webspace/13/59177/galaxy-print.de/plugins/Error404/default.htm

wo liegt nun der fehler, schau schon seit na stunde auf den code und find nix.
kann es vielleicht sein, das der erste abschnitt $ownSide die value $error_page überschreibt? sonst würd mir nichts einfallen

-FuFu-

#8
sorry fürs spamming hier ;)

vorheriger fehler gelöst, der code schaut nun so aus, um eventuelle fehlkonfiguration zu umgehen oder drauf hinzuweisen.

if(!$value) {
$error_page = false;
# steht in dem Inputfeld eine gühltige Datei. Das Inputfeld hat vorang
if ($this->settings->get("ownSide") != "") {
if(file_exists($BASE_DIR.$this->settings->get("ownSide")))
$error_page = $BASE_DIR.$this->settings->get("ownSide");
# wurde in der Selectbox eine Date ausgewählt
elseif(file_exists($this->settings->get("error_page_select")))
$error_page = $this->settings->get("error_page_select");
else
$error_page = $BASE_DIR.$PLUGIN_DIR_NAME."/Error404/default.htm";
}
if ($this->settings->get("ownSide") == "") {
# wurde in der Selectbox eine Date ausgewählt
if(file_exists($this->settings->get("error_page_select")))
$error_page = $this->settings->get("error_page_select");
else
$error_page = $BASE_DIR.$PLUGIN_DIR_NAME."/Error404/default.htm";
}
# es gibt eine gültige Datei
if($error_page) {
# $error_page mit dem Inhalt der Datei Füllen
$error_page = file_get_contents($error_page);
$syntax->content = $error_page;
#echo "Errorpage= ".$error_page;
return null;
}
}


schaut vielleicht nicht so schön aus, aber scheint zu funktionieren ;)

stefanbe

fehler von mir :)

file_exists() gibt auch true zurück wen es ein Ordner ist deshalb ging das nicht
nimm einfach is_file() dann geht es

zum prüfen kanste noch is_readable() benutzen

das mit dem "inde<br />" ist mir auch schonn aufgefallen ist ein Fehler von moziloCMS da werden die letzten 5 zeichen von index.php abgeschnitten.

lg

-FuFu-

#10
danke :)
hab das ganze nun nochmal überarbeitet und is_file() verwendet, klappt super soweit ;)
im Anhang ist mal das komplette Plugin, für die, die es testen wollen.


und wegen dem fehler beim aufrufen der index.php mit aktivem mod_rewrite kann man dann wohl nichts machen, ausser man würde folgendes in die Prüfung einbinden oder seh ich das falsch?
if($CAT_REQUEST_URL == "inde")
            return null;

das sollte doch funktionieren?

edit:::
neue zip angehängt mit eingefügtem fix

stefanbe

kanste mach
haste auch die Suche und Sidemap getestet?

-FuFu-

#12
suche ist deaktiviert bei meinen projekten, da es nur kleine seiten sind und eine suche dort ehr überflüssig ist.
und sidemap ist ein komisches verhalten, hier mal beispiele:
mod_rewrite aktiv
/index.php?action=sitemap => fehlerseite
/?action=sitemap => sidemap
/Startseite.html?action=sitemap => fehlerseite

ich hab aber nun
if($CAT_REQUEST_URL == "inde")
            return null;

mit eingefügt und nun funktioniert der sidemap aufruf auch per index.php?aktion=sidemap

ich hab die .zip oben geändert mit der "inde" prüfung

stefanbe

Zitat von: -FuFu- am 27. April 2013, 17:30:02
suche ist deaktiviert bei meinen projekten, da es nur kleine seiten sind und eine suche dort ehr überflüssig ist.
Ohm wir machen aber Schonn ein Plugin für alle oder?

-FuFu-

ja, das plugin ist für alle ;) sonst hätte ich ja nach der ersten funktionierenden Version aufgehört ^^ das reichte für mich ja.
und ich denke es sollte auch bei der suche funktionieren, mit der sidemap funktioniert es ja nun ;)

ich hab die suche nur bei meinen projekten aus der template genommen, ich schau mal, ob ich später nochmal ne Test cms aufsetzte