• 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.

XF2.1 EXTERNES (!) PHP Script einbinden.

Tamara-Jasmin

Bekanntes Mitglied
Lizenzinhaber
Registriert
30. Mai 2018
Beiträge
593
Punkte
88
XF Version
  1. 2.2.10 PL1
XF Instanz
Hosting
PHP-Version
8.9
MySQL/MariaDB
8.033
Provider/Hoster
Artfiles.de
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
 

Anhänge

  • ITM-ComAge-1.0.0 Alpha.zip
    9,8 KB · Aufrufe: 7
So sieht das ganze dann fertig aus. Ist natürlich immer noch ausbaufähig.. ;)
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
 
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.
 
Wenn das n externes Script werden soll, dann den cache header nicht vergessen
Erläutere bitte etwas genauer.. :smoke:

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.
Dann als täglichen Cron laufen lassen?!
 

Anhänge

  • ITM-ComAge-1.0.0 Beta.zip
    10,3 KB · Aufrufe: 3
  • Deutsch-[Du]-ITM_ComAge-1.0.0-Beta.zip
    1,4 KB · Aufrufe: 1
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 ;)

Erläutere bitte etwas genauer.. :smoke:
Er meint wohl das, was er mir in der "Hausaufgabe" zugeteilt hat. Phrasen und Datumseingabe (eben für andere Foren auch nutzbar)

LG: Tammy
 
weil endlich mal was funktioniert bei meinen XF2 Add-on Versuchen..

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
 
und weil endlich mal was funktioniert bei meinen XF2 Add-on Versuchen.. :p:smoke:
Geht mir irgendwie kaum anders. XF 2 ist in Sachen Entwicklung für mich immer noch n bisl wie die wenig beliebte Stiefmutti... :D ;)
Erläutere bitte etwas genauer.. :smoke:
Dann als täglichen Cron laufen lassen?!

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:
Er meint wohl das, was er mir in der "Hausaufgabe" zugeteilt hat. Phrasen und Datumseingabe (eben für andere Foren auch nutzbar)
Man könnte "er" auch direkt ansprechen, und nein, das meinte "er" der otto nicht. ;)
 
Also Client seitiges Browser Caching
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.
 
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 ....

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


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.
 
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.
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. ;)
 
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:
@Boothby Vielen Dank für den Hinweis. :happy:
 
: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
 
Zurück
Oben