Druckversion des Themas

Hier klicken um das Topic im Orginalformat anzusehen

Forum Sefrengo.org _ Alpha, Beta ... Vorabversionen _ Countdown

Geschrieben von: pawel Fri. 22. September 2006, 21:52

Hallo zusammen,

hier mal ein kleines Modul von mir. Ich brauchte in einem aktuellen Projekt ein Kalenderblatt, das eine Tagesdifferenz bis zum einem Datum anzeigt. (Noch x Tage). Das habe ich direkt im Layout realisiert.
Dann wollte ich schon längst mal wissen, wie man eigentlich ein Modul schreibt und zum Lernen sind viele Modulvorbilder sehr komplex und nicht sehr anschaulich.Ich habe es also umgesetzt und es minimal gehalten. Es ist nur ein Textfeld und ein Templatefeld enthalten.Ich schreib demnächst mal ein kleines Tut vom Code zum Modul, was meine Schritte nachvollzieht. (Code in Output, mip_forms, input)

Ursprünglich wollte ich die Zeitumrechnung in eine Funktion packen:

QUELLTEXT
function return_timestamp($date){
$pieces = split("\.",$date);
$stamp = mktime(0, 0, 0, $pieces[1],$pieces[0],$pieces[2]);
return($stamp);
}

Irgendwie scheint SF aber die Zeile mit dem Split nicht zu mögen.

 Countdown.cmsmod ( 3.9KB ) : 16
 

Geschrieben von: bjoern Fri. 22. September 2006, 22:53

Versuch mal split('\.',$date); Die doppelten gegen einfache Anführungszeichen tauschen. Ein \ innerhalb doppelter ANführungszeichen, leitet immer ein besonderes Zeitchen ein.

Geschrieben von: mvsxyz Sat. 23. September 2006, 11:00

Warum eigentlich split? http://de.php.net/manual/en/function.explode.php tut es doch auch.

Geschrieben von: pawel Sat. 23. September 2006, 12:22

Ich habe keinen Unterschied zwischen explode und split gesehen. Funktioniert aber beides nicht im Modul.
Ich habe die Anführungsstriche mal vereinfacht und explode verwendet, ohne Ergebnis.

Ich habe beide alle Varianten mal als Standalone (also Variable gefüllt udn tpl entfermt und in ein Einzeldokument) ausprobiert und sie funktionieren alle.

Geschrieben von: alexander Sat. 23. September 2006, 12:42

wie wärs mit ... geht denn das?

QUELLTEXT
if (!function_exists('return_timestamp')){
  function return_timestamp($date){
    $pieces = split("\.",$date);
    $stamp = mktime(0, 0, 0, $pieces[1],$pieces[0],$pieces[2]);
    return($stamp);
  }
}

Geschrieben von: pawel Sat. 23. September 2006, 20:03

Nein, aber gibt es denn so eine Funktion schon? Dachtest du es kollidiert mit <cms:mod type ="date" ?

Na ja mit substr hat es ja geklappt, es gibt ja bei php mehr als einen Weg zum Ziel.
Wie wäre jetzt die Schrittfolge, damit man als Redakteur für das Modul auf der Seite per select-Felder das Datum auswählen kann?

Geschrieben von: pawel Wed. 27. September 2006, 19:46

Ich habe mal versucht das Modul auszubauen.
Die Idee war statt

QUELLTEXT
$myDatum = "MOD_VALUE[0]";


aus der Templatekonfiguration zu holen, dem Redakteur
mit

QUELLTEXT
$myDatum = <cms:mod type = "date" id = "1" />;


die Einstellmöglichkeit zu geben.
Irgendwo habe ich aber einen Denkfehler, denn ich bekomme ein
QUELLTEXT
Parse error: syntax error, unexpected '<' in

Das Modul läßt sich aber ohne Fehlermeldung speichern.

Geschrieben von: mistral Thu. 28. September 2006, 10:58

Probier es so:

QUELLTEXT
$myDatum = <cms:mod type = "date" id = "1" addslashes="true" />;



Gruss
Mistral

Geschrieben von: MaZderMind Thu. 28. September 2006, 16:28

Hi
Entweder
$myDatum = '<cms:mod type = "date" id = "1" />';
oder
$myDatum = <cms:mod type = "date" id = "1" addslashes="true" />;

Und könnte man vllt endlich mal auf einen Namensraum für Variablen in Modulen definieren? Weil irgendein modul kollidiert dann wieder mit SF oder einem anderen Modul weil Variablen nicht zurückgesetzt werden etc...

Am besten am Anfang des Moduls ein leeres Array erzeugen:
$mod = array();
Variablen innerhalb des Arrays ablegen:
$mod['myDate'] = ...
und am ende das Array wieder löschen
unset($mod);

Nur dann ist sichergestellt dass kein anderes Modul oder SF in den eigenen Variablen rumpfuscht oder dass das eigene Modul SF-Eigene Variablen überschreibt. Natürlich wäre eine Klassenbasierte Lösung (Ein Modul = eine Klasse) besser aber für den Anfang....

Gruß, Peter

Geschrieben von: pawel Thu. 28. September 2006, 20:16

Es klappt, ich habe nur noch mode="default-cms-date-format" hinzugefügt.
Allerdings erscheint kein Auswahlfeld, um das Datum einzugeben. Wenn ich das Datum direkt ausgebe, kann ich es editieren.
Brauch ich noch ein extra Feld?

Geschrieben von: mistral Thu. 28. September 2006, 21:14

ich kenne dein Modul jetzt nicht, aber das kann schon sein, das du noch ein separets Feld für die Eingabe brauchst. Dazu kannst du am besten den Tag "<cms:mod type="typegroup" />" verwenden

Geschrieben von: pawel Fri. 29. September 2006, 10:21

Langsam beginne ich durchzublicken...

Über die typegroup kann jetzt das Datum vom Redakteur verändert werden. Ich habe dann auch gleich date mit mode="timestamp" ausgeben lassen und mir die Umrechnung gespart.

Jetzt fehlt mir nur noch eins zum Glück rolleyes.gif .
Ich hätte gern im Template eine Variable {style}. Wenn kein Style ausgewählt ist bleibt diese leer, ansonsten wird beispielsweise class="meineKlasse" eingesetzt (im Output).

Ich habe mir einige Module angesehen aber meistens wird nur um die Variable herum ein <span class="meineKlasse" gesetzt.

Hat jemand einen Tipp?

Anbei noch mal das überarbeitete Modul.

 Countdown.cmsmod ( 4KB ) : 18
 

Geschrieben von: Olaf Fri. 29. September 2006, 11:29

Das mit den Styles war in den letzten Tagen in einem Thread zum Bildmodul aktuell, such mal danach, da ist es gut beschrieben wie das zu machen wäre.

Unterstützt von Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)