1. Wenn du hier im Forum ein neues Thema erstellst, sind schon Punkte aufgeführt die du ausfüllen musst. Das dient im Allgemeinen dazu die notwendigen Informationen direkt mit der Frage bereitzustellen.
    Da in letzter Zeit immer wieder gerne das Formular gelöscht wurde und erst nach 3 Seiten Nachfragen die benötigten Infos für eine Hilfe kommen, werde ich nun jede Fragestellung die nicht einmal annähernd das Formular benutzt, sofort in den Sondermüll schicken.
    Füllt einfach die abgefragte Daten aus und alle können euch viel schneller helfen.
    Information ausblenden

XF2.1 EXTERNES (!) PHP Script einbinden.

Dieses Thema im Forum "Fehler, Fragen und Antworten" wurde erstellt von Tamara-Jasmin, 15. Aug. 2019.

  1. Tamara-Jasmin

    Tamara-Jasmin Aktives Mitglied Lizenzinhaber

    Habe mir da ein kleines Script erstellt, was mir anzeigt wie lange das Forum schon besteht.
    So, nun hab ich versucht den Code in den "PAGE_CONTAINER" zu kopieren. Fehlermeldung. Dort ist PHP Script wohl nicht erlaubt. Die richtige Stelle hätte ich zumindest gefunden (im Header - rechte Seite).
    Selbstverständlich habe ich die Suche hier im Forum verwendet - und @Boothby hat da mal einen schönen Beitrag verfasst wie man HTML Code als BB Code ausgibt. Die dort beschriebenen CallBackdinngens hab ich auch mal weiter gesucht und auch versucht ein Widget zu erstellen (zumindest oberhalb vom Breadcrump).
    Aber auch hier beisst es aus, weil ich nicht weiss welche Methode man aufrufen muss.
    Verstanden habe ich zumindest das gewisse Dateien in bestimmten Pfaden abgelegt werden müssen - aber dafür wird es wohl sicher auch Regeln geben. Wie bekomme ich raus welche Klassennamen für was zuständig sind?

    Mein Script erzeugt nur eine einzige Zeile.

    Wer daran interesse hat:

    PHP:
    <?php
    $sekunden = time() - mktime(0,0,0,04,01,2013);
    $g_tage = $sekunden / 86400;
    $g_jahre = ($sekunden / 86400) / 365.25;
    $jahre = floor($g_jahre);
    $g_rest = ( $g_tage - ( $jahre * 365.25 ) );
    settype ($g_tage, int);
    settype ($g_jahre, int);
    settype ($g_rest, int);

    if ($g_rest == 0) {$tagausgabe = '<b><span style="color:#FF0000;"> Ein weiteres erfolgreiches Jahr für das Forum!</span></b>';}
    elseif ($g_rest == 1) {$tagausgabe = ' und ' . $g_rest . ' Tag';}
    else {$tagausgabe = ' und ' . $g_rest . ' Tage';}

    $ausgabe = ("Unser Forum besteht seit <b>{$g_tage} Tagen</b>, also<b> {$g_jahre} Jahre {$tagausgabe} </b>");
    ?>
     
    Und irgendwo muss nun mit print die Variable "$ausgabe" auch ausgegeben werden können.
    Ich bin mir sicher das irgendwer noch einen Tip hat ;)
    Danke vorab.

    LG: Tammy
     
  2. McAtze

    McAtze Innendienst Lizenzinhaber

    Anhänge:

    Tamara-Jasmin und nocte gefällt das.
  3. nocte

    nocte Aktives Mitglied Lizenzinhaber

    schaut gut aus :) Und als Hausaufgabe für @Tamara-Jasmin könnte man das ganze noch dynamischer machen: Für die Ausgabe des Textes eine Phrase nutzen und das Datum der Forengründung als Option im AdminCP speichern (der Einfachheit halber würde ich da einfach einen UNIX Timestamp nutzen). :D
     
    McAtze und Tamara-Jasmin gefällt das.
  4. otto

    otto Bekanntes Mitglied Lizenzinhaber

    Wenn das n externes Script werden soll, dann den cache header nicht vergessen... Und ich tät Anzeige und Berechnung in 2 Dateien splitten, so das wenn das erste mal am Tag die Berechnung gelaufen ist, für den Rest des Tages nur noch der fertige Text geladen wird.
     
  5. McAtze

    McAtze Innendienst Lizenzinhaber

    Erläutere bitte etwas genauer.. :smoke:

    Dann als täglichen Cron laufen lassen?!
     
  6. McAtze

    McAtze Innendienst Lizenzinhaber

    Anhänge:

    nocte gefällt das.
  7. Tamara-Jasmin

    Tamara-Jasmin Aktives Mitglied Lizenzinhaber

    Danke @McAtze!
    Den Link hatte ich schon öfter gesucht ;) Ich glaube @otto hatte mir Anfangs mal den Link geschickt weil ich wissen wollte wie man ein AddOn erstellt. Aber da war ich bei weitem noch nicht so weit mit XF wie heute - und ist schliesslich liegen geblieben - und damit auch vergessen gegangen. Wollte halt am Anfang gleich "alles" und meinte - übertrieben gesagt - nach der Installation von XF gleich "loslegen zu können". Da fehlt mir zwar heute immer noch EINIGES - aber ich bin zumindest - auch zeitlich gesehen - mal bereit mich damit zu beschäftigen ;)

    @nocte
    Da hast Du wohl recht ;) Hatte den Code schon 2013 ins VB gefriemelt und irgendwann mal ein wenig nachbearbeitet. Ist also schon sehr alt. Durch fehlende Projekte habe ich immer nur kleine Frickeleien gemacht und mal an einer Homepage etwas geändert von Kunden. Für einen Bekannten habe ich 2014 einen Ebayrechner geschrieben den er heute noch verwendet um seine Verkäufe einzutragen und den Gewinn / Verlust zu berechnen. Wenn ich den Code heute sehe schlage ich nur noch die Hände über dem Kopf zusammen und frage mich wie denn das Teil überhaupt funktioniert ;) Eine "Neuauflage" ist dann 2017 wegen Zeitmangel irgendwie bei der hälfte liegengeblieben. Ideen hätte ich viele - aber dazu braucht man Zeit - und mittlerweile auch JavaScript.
    Werde mich mal die Tage an die "Hausaufgabe" machen und ielleicht mein erstes AddOn schreiben (wenn ich darf, lade ich das dann auch gerne hier hoch).
    Kann aber nicht versprechen wann das fertig wird. Hab ja auch noch andere Verpflichtungen - und am 2.9 bin ich wieder für 2 Wochen am arbeiten :( 6-22 uhr gerade mal Zeit für ein Süppchen essen).

    So .. genug geplaudert );

    LG: Tammy

    Nachtrag: Ein hoch auf die 30-Sek. Speicherung.
    Mein Beitrag von heute Nacht wird mir hier an einem anderen Standort angezeigt ... hab wohl vergessen zu senden um 2 Uhr ;)

    Er meint wohl das, was er mir in der "Hausaufgabe" zugeteilt hat. Phrasen und Datumseingabe (eben für andere Foren auch nutzbar)

    LG: Tammy
     
  8. Tamara-Jasmin

    Tamara-Jasmin Aktives Mitglied Lizenzinhaber

    Übereifer - oder hast Du Angst das ich was kaputtmache :D

    Danke für das Update!

    LG: Tammy
     
  9. McAtze

    McAtze Innendienst Lizenzinhaber

    Wohl Übereifer und weil endlich mal was funktioniert bei meinen XF2 Add-on Versuchen.. :p:smoke:
     
    Masetrix gefällt das.
  10. Tamara-Jasmin

    Tamara-Jasmin Aktives Mitglied Lizenzinhaber

    Hoffe Du hast genug Speicher auf dem Server ... und das XFRM keine Begrenzung. Nicht das Dir eins von beiden aus den Nähten platzt!

    LG: Tammy
     
  11. otto

    otto Bekanntes Mitglied Lizenzinhaber

    Geht mir irgendwie kaum anders. XF 2 ist in Sachen Entwicklung für mich immer noch n bisl wie die wenig beliebte Stiefmutti... :D ;)
    Man kann mittels cache header dafür sorgen, das z.B. die Ausgabe einer nachfolgenden SQL Abfrage eine Zeit X gecached wird. Hatte das bis vor kurzem selbst nicht aufm Schirm, bis es mir bei meinen Bannern (Hobby-Gartenteich) erstmal selbst und negativ auffiel. Jetzt hab ich die hiermit dazu gebracht, das sie 10 Sekunden gecached ausgegeben werden (es geht um deren Erstausgabe, nicht um den automatischen Reload der Zufallsausgabe! Also Client seitiges Browser Caching). Aber im Grunde würde das auch bei Tannys Vorhaben klappen, man müsste nur die Zeit anpassen.

    Beispiel: für ein php Script, 10 Sekunden Cache Zeit
    PHP:
    // Denke mal, selbsterklärend:
    $sec_cache = 10;
    $tsec = gmdate("D, d M Y H:i:s", time() + $sec_cache) . " GMT";

    header("Content-Type: application/json");
    header("Expires: $tsec");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Cache-Control: max-age=$sec_cache");
    header("Pragma: cache");
    Natürlich gibts noch elegantere, Lösungen einmal gelaufene SQL Abfragen Lastextensiv zu betreiben. Der Cache Header übergeht dann übrigens die in der htaccess oder besser in einer php.ini gemachten Vorgaben.

    Ein 1x/d cron wäre eine weitere Möglichkeit. Alles besser, als die Abfrage von jedem Besucher bei jedem load der Seite erneut laufen zu lassen, auch wenn ggf. MySQL/MariaDB das ganze auch noch cachen könnte. Ein Cron wäre eine Idee, und dann das Ergebnis nutzen und gechached ausgeben. Denke mal das wäre auch ne gute Lösung, wenn mans nur einmal am Tag berechnen lassen muss. Bei häufiger ist der Cache header quick and dirty genug. :D ;)
     
    Zuletzt bearbeitet: 17. Aug. 2019
  12. otto

    otto Bekanntes Mitglied Lizenzinhaber

    Man könnte "er" auch direkt ansprechen, und nein, das meinte "er" der otto nicht. ;)
     
  13. nocte

    nocte Aktives Mitglied Lizenzinhaber

    ja, das kann man in gewissen Fällen nutzen, hat aber wenig mit diesem Anwendungsfall zu tun. Abgesehen davon, dass hier keine zusätzliche SQL Queries erzeugt werden - auch nicht bei @McAtze's addon.

    btw: Zeile 3 bezieht sich auf eine andere Variable als in Zeile 2 definiert.
     
    Masetrix gefällt das.
  14. Masetrix

    Masetrix Aktives Mitglied Lizenzinhaber


    Also bei Verwendung von PHP ist das, das Rad neu erfunden. Das geht mit weit weniger Code...
    PHP: Convert a date into a Unix timestamp.
     
  15. otto

    otto Bekanntes Mitglied Lizenzinhaber

    Zeile 3 korrigiert. Es geht auch mit dem cache header. Habs zwischenzeitlich noch mal probiert und siehe Link, es klappt auch da mit nem anderen Code der ausgeführt werden soll problemlos. Was Tammy oder wer auch immer am Ende dann selbst macht ... nun ja, soll nicht meine Baustelle sein. ;)
     
  16. Boothby

    Boothby Bekanntes Mitglied Lizenzinhaber

    Eine elegante Lösung die Zeitdifferenz zu ermitteln ist über DateTime::diff().

    PHP:
    <?php

    $dateStart = new \DateTime();
    $dateStart->setDate(2013, 1, 4); // y, m, d

    $dateNow = new \DateTime();

    $diff = $dateStart->diff($dateNow);

    $ausgabe = $diff->format("Das Forum besteht seit %y Jahren, %m Monaten und %d Tagen.");
    format() berücksichtigt aber 0 und 1-Werte nicht (z.B. "0 Jahre" weg lassen und "1 Monat"). Hier wäre noch ein bisschen Code von nöten. Die Werte selbst verstecken sich hinter $diff->y, $diff->m und $diff->d. Hier könnte dann auch das Phrasensystem ansetzen.
     
    Zuletzt bearbeitet: 18. Aug. 2019
    otto, Masetrix, nocte und 2 anderen gefällt das.
  17. McAtze

    McAtze Innendienst Lizenzinhaber

    @Boothby Vielen Dank für den Hinweis. :happy:
     
  18. Tamara-Jasmin

    Tamara-Jasmin Aktives Mitglied Lizenzinhaber

    :wideyed:
    Unfassbar ...

    Also @Boothby - wenn Du irgendwo Code einsetzt - da bleibt mir jedes mal die Spucke weg.
    Wo bekommt man so einen Lehrer? Wenn ich das Geld hätte - ich würd Dich einstellen ;)

    LG: Tammy
     
    Boothby gefällt das.
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden