Variablen in den overall_footer: Kleiner Denkanstoß bitte..

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Antworten
Darezettl
Beiträge: 589
Registriert: So 31.Jul, 2005 23:43

Variablen in den overall_footer: Kleiner Denkanstoß bitte..

Beitrag von Darezettl »

Servus,


ich hab in meinem overall_footer.tpl ein Countdown-Javascript drinnen, wo ich Zahlen eingeben kann (direkt in die Datei), welche dann das Zieldatum des Countdowns festlegen.

Nun ist es aber lästig dass ich jedes mal den overall_footer.tpl runterladen und bearbeiten muss wenn ich einen neuen Countdown auf irgendwas eingeben will.

Ich würde die Zahlen für den Countdown, also Jahr, Tag, Stunde, Minute, Sekunde gerne im ACP eingeben.

Dazu braucht es Variablen für die .tpl, Änderungen an an der page_footer.php und einen Datenbankeintrag, ist klar, und eben ein Eingabefeld für die Zahlen im ACP.


Kann mir jemand kurz einen Denkanstoß geben wie ich da am geschicktesten anfange?
Bild
Life begins @ 1/1000
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Darezettl
Beiträge: 589
Registriert: So 31.Jul, 2005 23:43

Beitrag von Darezettl »

Ja ne, der ist mir zu groß.
Also so wie's ist, passt's mir schon recht gut.

Nur würde ich eben die Zahlen gerne im ACP eingeben.

Das Javascript ist direkt im overall_footer.tpl drinnen, also nicht in einer externen verlinkten .js-Datei.


Oxpus, oder wer auch immer, mögt ihr mir bitte a bissl helfen?
Bild
Life begins @ 1/1000
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Was ist an meinem MOD zu "groß"?
Der macht genau das, was Du anforderst...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Darezettl
Beiträge: 589
Registriert: So 31.Jul, 2005 23:43

Beitrag von Darezettl »

Ich will aber nicht deinen MOD benutzen, sondern würde nur gern wissen wie ich die Zahleneingabe in den ACP verlegen kann.

Stichwort "Learning by Doing" ;)
Bild
Life begins @ 1/1000
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Genau das ist es ja:
Wenn Du das im ACP einbaust, hättest Du meinen MOD.
Und da ich das Rad nicht zweimal erfinden werde ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Darezettl
Beiträge: 589
Registriert: So 31.Jul, 2005 23:43

Beitrag von Darezettl »

So, dann wollen wir mal:


Ich brauche Variablen (immer zweistellig) für Jahr, Monat, Tag, Stunde, Sekunde und einmal für nen Text. Ist diese Anweisung hier richtig?

Code: Alles auswählen

CREATE TABLE phpbb_countdown (
  yearx varchar(2) NOT NULL default '',
  monthx varchar(2) NOT NULL default '',
  dayx varchar(2) NOT NULL default '',
  hourx varchar(2) NOT NULL default '',
  secondx varchar(2) NOT NULL default '',
  titlex varchar(100) NOT NULL default '',
) TYPE=MyISAM;
Also macht diese Anweisung, dass die Tabelle countdown angelegt wird und in den Feldern dann jeweils zwei (und nicht mehr) Buchstaben bzw. Ziffern Platz haben ja?
Und beim Titelfeld dann 100 Buchstaben / Ziffern?

Korrekt?
Bild
Life begins @ 1/1000
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Soweit wäre das korrekt.
Aber:
Warum erfasst Du nicht einen echten Timestamp, der dann per create_date(); in ein lesbares Datum (beliebig nach den Einzelteilen getrennt) umgewandelt wird?
Mit diesen Einzelnstrings kann man schliesslich so ohne weiteres nicht rechnen!
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Darezettl
Beiträge: 589
Registriert: So 31.Jul, 2005 23:43

Beitrag von Darezettl »

Weil die Zeit schon im Javascript berechnet wird, ist also nicht nötig, geht nur darum dass ich das Zieldatum im ACP eingeben kann!

Wenn ich mich dann an das ACP mache, muss ich bei den Inputfelder jeweils reinschreiben maxlength="2" oder bzw bei dem einen Feld halt 100 oder?
Welchen Namen müssen die Inputfelder haben? Oder ist das egal?

Ich nehme mir da deine Dateien vom Advanced Countdown denke ich und schreib die dementsprechend um.
Bild
Life begins @ 1/1000
Benutzeravatar
cback
Beiträge: 1391
Registriert: Sa 15.Mai, 2004 15:32
Wohnort: Saarland
Kontaktdaten:

Beitrag von cback »

Desweiteren wäre bei Deiner Variante en mediumint(2) effizienter und sicherer als ein VarChar :) Hier erfasst die Tabelle selbst nur zahlenwerte, ermöglicht auch nette SQL Tricks wie z.B.


yearx = yearx + 1 direkt im Query...


und es können nie unerwartete werte (NOT NUMBER) im Feld stehn.
Und der Speicherverbrauch is geringer.



Desweiteren kannst Du doch wenn das JS die Zeit umrechnet die vom Timestamp umgewandelten Werte an das JS Schicken? Wo is das Problem? Und muss das Jahr nich 4 Stellig sein?
Zuletzt geändert von cback am Di 25.Jul, 2006 12:25, insgesamt 2-mal geändert.
Darezettl
Beiträge: 589
Registriert: So 31.Jul, 2005 23:43

Beitrag von Darezettl »

ok, also dann so?

Code: Alles auswählen

CREATE TABLE phpbb_countdown (
  yearx mediumint(4) NOT NULL default '',
  monthx mediumint(2) NOT NULL default '',
  dayx mediumint(2) NOT NULL default '',
  hourx mediumint(2) NOT NULL default '',
  secondx mediumint(2) NOT NULL default '',
  titlex varchar(100) NOT NULL default '',
) TYPE=MyISAM;
Bei Title muss das aber das varchar bleiben oder? Da kommt ja Text rein + evtl. ne Zahl, aber auf jeden Fall immer Text!


Also ist es dann so jetzt okay / besser?
Zuletzt geändert von Darezettl am Di 25.Jul, 2006 13:26, insgesamt 1-mal geändert.
Bild
Life begins @ 1/1000
Benutzeravatar
cback
Beiträge: 1391
Registriert: Sa 15.Mai, 2004 15:32
Wohnort: Saarland
Kontaktdaten:

Beitrag von cback »

jopp wobei dann default ein Integer Wert sein muss und kein String ('') und ich das immer noch geschickter machen würde :)

Code: Alles auswählen

 CREATE TABLE phpbb_countdown (
   timestamp mediumint(11) NOT NULL default 0,
   titlex varchar(100) NOT NULL default '',
   PRIMARY KEY (`timestamp`)
 ) TYPE=MyISAM; 

dann einfach die gewünschte Zeit zusammenbasteln und nur den Timestamp in ein Feld und hinterher mit create_date in die einzelwerte aufsplitten und dann als jahr, stunde, minute, an das Javascript senden.


Die möglichkeiten sind dadurch auch besser. :) z.B. dann später mehrfache eintragungen möglich, sortieren nach aufsteigender Zeit etc. etc. etc. ;)



Infos:


www.php.net/time
www.php.net/create_date
Zuletzt geändert von cback am Di 25.Jul, 2006 13:30, insgesamt 1-mal geändert.
Darezettl
Beiträge: 589
Registriert: So 31.Jul, 2005 23:43

Beitrag von Darezettl »

Also ums zu verdeutlichen wieso ich hier eure Vorschläge mit Timestep und php-Zeitgenerierung außer acht lasse, poste ich hier mal das Javascript welches ich drinnen hab:

Code: Alles auswählen

<table>
                    <tr>
                      <td><script>
   var jahr=2006, monat=08, tag=03, stunde=09, minute=00, sekunde=00; // Ziel-Datum in MEZ
   var zielDatum=new Date(jahr,monat-1,tag,stunde,minute,sekunde);

   function countdown() {
      startDatum=new Date(); // Aktuelles Datum

      // Countdown berechnen und anzeigen, bis Ziel-Datum erreicht ist
      if(startDatum<=zielDatum)  {

         var jahre=0, monate=0, tage=0, stunden=0, minuten=0, sekunden=0;

         /* Allgemeines Vorgehen:
          * Zunächst werden die vollen Jahre gezählt
          * und anschließend der Start- und Ziel-Monat auf den jeweiligen 1. gesetzt.
          * Nun werden erst die vollen Monate vom 1. zum 1. des Start- bzw. Ziel-Monats berechnet
          * und danach die tatsächlichen Monatstage wieder mit einbezogen.
          * Dieses Vorgehen vermeidet Probleme mit den verschiedenen Monatslängen.
          * Die restliche Differenz zwischen Start- und Ziel-Zeit wird mit Tagen aufgefüllt und
          * was dann noch übrig bleibt, in Stunden, Minuten und Sekunden ausgedrückt.*/

         // Jahre
         if(startDatum<zielDatum) {
            while(startDatum<zielDatum) {
               if(startDatum.setFullYear(startDatum.getFullYear()+1)<=zielDatum) jahre++;
            }
            startDatum.setFullYear(startDatum.getFullYear()-1);
         }

         // Restliche Tage zum Monatsende ermitteln
         var restTage=0;
         var m=startDatum.getMonth();
         if(m==1-1||m==3-1||m==5-1||m==7-1||m==8-1||m==10-1||m==12-1) restTage=31-startDatum.getDate();
         else if(m==4-1||m==6-1||m==9-1||m==11-1) restTage=30-startDatum.getDate();
         else if(m==2-1) {
            if(startDatum.getFullYear()%4==0 && (startDatum.getFullYear()%100!=0 || startDatum.getFullYear()%400==0)) restTage=29-startDatum.getDate(); // Schaltjahr
            else restTage=28-startDatum.getDate();
         }

         // Start- und Ziel-Tag merken und auf 1 setzen
         var startTag=startDatum.getDate();
         var zielTag=zielDatum.getDate();
         startDatum.setDate(1);
         zielDatum.setDate(1);

         // Monate
         if(startDatum<zielDatum) {
            while(startDatum<zielDatum) {
               if(startDatum.setMonth(startDatum.getMonth()+1)<=zielDatum) monate++;
            }
            startDatum.setMonth(startDatum.getMonth()-1);
         }

         // Tatsächlichen Start- und Ziel-Tag berücksichtigen
         if(startDatum.getMonth()==zielDatum.getMonth()) {
            if(startTag<zielTag>=zielTag) tage=restTage+1;
            else {
               monate++;
               startDatum.setDate(startTag);
            }
         }
         zielDatum.setDate(zielTag);

         // Tage
         restTage=Math.floor((zielDatum-startDatum)/(24*60*60*1000));
         startDatum.setTime(startDatum.getTime()+restTage*24*60*60*1000);
         tage+=restTage;

         // Stunden
         stunden=Math.floor((zielDatum-startDatum)/(60*60*1000));
         startDatum.setTime(startDatum.getTime()+stunden*60*60*1000);

         // Minuten
         minuten=Math.floor((zielDatum-startDatum)/(60*1000));
         startDatum.setTime(startDatum.getTime()+minuten*60*1000);

         // Sekunden
         sekunden=Math.floor((zielDatum-startDatum)/1000);

         // Anzeige formatieren

         (monate!=1)?monate=monate+" Monate,  ":monate=monate+" Monat,  ";
         (tage!=1)?tage=tage+" Tage,  ":tage=tage+" Tag,  ";
         (stunden!=1)?stunden=stunden+" Stunden,  ":stunden=stunden+" Stunde,  ";
         (minuten!=1)?minuten=minuten+" Minuten  und  ":minuten=minuten+" Minute  und  ";
         if(sekunden<10) sekunden="0"+sekunden;
         (sekunden!=1)?sekunden=sekunden+" Sekunden":sekunden=sekunden+" Sekunde";

         document.countdownform.countdowninput.value=monate+tage+stunden+minuten+sekunden;

         setTimeout('countdown()',200);
      }
      // Anderenfalls alles auf Null setzen
      else document.countdownform.countdowninput.value="0 Jahre,  0 Monate,  0 Tage,  0 Stunden,  0 Minuten  und  00 Sekunden";
   }
                      </script>
      <form>Noch<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input></form>bis zum SPLASH! 2006</td>
                    </tr>
                  </table>
So, und die Werte in dieser Zeile

Code: Alles auswählen

var jahr=2006, monat=08, tag=03, stunde=09, minute=00, sekunde=00; // Ziel-Datum in MEZ
würde ich gerne im ACP eingeben können, sodass ich nicht mehr jedesmal die Datei runterladen muss sondern es halt bequemer erledigen kann.

und da müssen dann die Variablen rein:
also so irgendwie..

Code: Alles auswählen

var jahr={YEARX}, monat={MONTHX}, tag={DAYX}, stunde={HOURX}, minute={MINUTEX}, sekunde={SECONDX}; // Ziel-Datum in MEZ
und das

Code: Alles auswählen

bis zum SPLASH! 2006
eben so irgendwie:

Code: Alles auswählen

{TITLEX}
Und jetzt frag ich nochmal - nachdem ihr nun das Javascript kennt - ob es jetzt so optimal ist?

Code: Alles auswählen

CREATE TABLE phpbb_countdown ( 
  yearx mediumint(4) NOT NULL default '', 
  monthx mediumint(2) NOT NULL default '', 
  dayx mediumint(2) NOT NULL default '', 
  hourx mediumint(2) NOT NULL default '', 
  minutex mediumint(2) NOT NULL default '',
  secondx mediumint(2) NOT NULL default '', 
  titlex varchar(100) NOT NULL default '', 
) TYPE=MyISAM;

Das versteh ich nicht: "jopp wobei dann default ein Integer Wert sein muss und kein String ('') und ich das immer noch geschickter machen würde"

Was meinst du damit cback?
Bild
Life begins @ 1/1000
Benutzeravatar
Christian_N
Beiträge: 1787
Registriert: Sa 19.Feb, 2005 21:48
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von Christian_N »

Sorry, kann nicht direkt helfen, aba ne bitte hätte ich könntest den Beitrag nochmal bearbeiten und bei "Optionen" des HTML deaktivieren für diesen Beitrag da sonst aus <a href="http://www.phpbb.de" target="_blank">phpBB.de</a> nur <a>phpBB.de</a> wird und man nicht den genaue Code sehn kann leider. :(
Meine Projekte: Chantals - Fanpage .::. phpBB Projekt
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

@Darezettl
Also mal ehrlich:
Wenn Du solch riesigen Javascripts verwendest, um aus mehreren Einzelwerten für jeden Zeitteil einen Countdown zu rechnen und einen weiteren, eigenen Part für die Verwaltung der Endzeit anlegen willst, wärst Du mit meinem Advanced Countdown MOD einfacher und schlanker dran.
Zumal der auch noch bequem Texte und Images mit verwaltet und auf dem Index UND (sofern vorhanden) Portal getrennt angezeigt werden kann.

Nur so mal in den Raum geworfen.
Ich stelle jedenfalls hierzu den Support meinerseits ein.
Wäre das gleiche, als wenn Autohersteller A einem Konkurrenten erklärt, wie man einen Motor baut...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Antworten