Page 1 of 2
Klassiker: Geburtstagsscript
Posted: Thu Dec 07, 2006 5:29 pm
by Darien
Hi Leute,
es hat zwar nicht direkt was mit CMSms zu tun aber vielleicht sind ihr noch ein paar Coder die mir helfen können. Ich möchte einen benutzerdefinierten Tag schreiben, der mir alle Personen ausgibt, die heute Geburtstag haben !
Als Datenbasis habe ich eine csv-Datei mit folgenden Format:
Nachname1 Vorname1;dd.mm.yyyy
Nachname2 Vorname2;dd.mm.yyyy
Nachname3 Vorname3;dd.mm.yyyy
etc...
Habe noch nie mit csv Dateien gearbeitet und finde keine passende Lösung. Vielleicht habt ihr ne Idee ?
Re: Klassiker: Geburtstagsscript
Posted: Fri Dec 08, 2006 4:51 am
by cyberman
Die Suche nach csv ist dein Freund - sie hätte dir mindestens diesen Thread gezeigt
http://forum.cmsmadesimple.org/index.ph ... 946.0.html
Du müsstest dann nur noch einen Filter hinzufügen ...
Re: Klassiker: Geburtstagsscript
Posted: Fri Dec 08, 2006 9:00 am
by Darien
Danke...nach "csv" habe ich natürlich nicht gesucht *schäm
Werde mal probieren ob ich das so hinbekomme...
Re: Klassiker: Geburtstagsscript
Posted: Fri Dec 08, 2006 9:13 am
by Darien
So, ich habe alles soweit vorbereitet. Allerdings werden keine Daten importiert

Ich denke es liegt an den Pfadangaben
Code: Select all
{csv template=“tmp/templates/geb.tpl“ file="geb.csv" first="0"}
Die geb.csv liegt im root-Verzeichnis...Stimmen die Pfade so ?
Re: Klassiker: Geburtstagsscript
Posted: Fri Dec 08, 2006 9:36 am
by cyberman
Hmm, sieht soweit OK aus ...
Gibt es einen bestimmten Grund, dass die csv im root liegt? Damit ist die Datei für den FileManager unerrreichbar.
Hast du daran gedacht, dass das Plugin ein Smarty-Plugin ist (kein CMSms-Plugin)?
Re: Klassiker: Geburtstagsscript
Posted: Fri Dec 08, 2006 10:00 am
by Darien
Hm, es funktioniert nicht...
Kommt nur ne leere Seite. Die Datei liegt im Smarty-Pluginordner.
Re: Klassiker: Geburtstagsscript
Posted: Fri Dec 08, 2006 12:54 pm
by cyberman
Hat die csv folgendes Format ?
"Nachname1";"Vorname1";"dd.mm.yyyy"
"Nachname2";"Vorname2";"dd.mm.yyyy"
"Nachname3";"Vorname3";"dd.mm.yyyy"
Bei mir hatte es mal nicht funktioniert, da die Datensätze ohne "" waren ...
Re: Klassiker: Geburtstagsscript
Posted: Fri Dec 08, 2006 12:57 pm
by Darien
Hi Cyberman,
finde es immer wieder klasse wie Du dich hier in den Support einbringst...
Also, ich habe es das jetzt zum Laufen gebracht. Der Pfad für die Templates ist von Smarty schon vorgegeben, daraus resultiert folgend Aufruf:
Code: Select all
{csv template="geb.tp" file="geb.csv" first="0"}
Leider sind meine Smarty Kenntnisse (noch) äußerst begrenzt aber ich habe es schon geschafft, daß mir alle Namen mit Geburtsdaten ausgegeben werden. Jetzt fehlt nur noch der Filter...
Re: Klassiker: Geburtstagsscript
Posted: Fri Dec 08, 2006 2:12 pm
by cyberman
Ich vermute mal, dass du das Standard-Template aus der Anleitung verwendest. Bin zwar kein Coder, aber IMHO musst du nur die Abfrage-Parameter erweitern, etwa so
Code: Select all
{if $csvdata[i][2] neq "a.A" and $csvdata[i][2] neq "a.A." and $csvdata[i][2]|date_format:"%d.%m.%Y" eq $csvtoday}
Re: Klassiker: Geburtstagsscript
Posted: Fri Dec 08, 2006 2:26 pm
by Darien
cyberman wrote:
... Bin zwar kein Coder, aber IMHO musst du nur die ..
Ich leider auch nicht....Kennst Du spontan ein gutes Smarty Forum wo ich das Problem darstellen könnte, oder kann ich das auch hier im englischen Forum probieren ?
Dein Ansatz ähnelt sehr meinem, aber beideführen nicht zum Erfolg

Re: Klassiker: Geburtstagsscript
Posted: Fri Dec 08, 2006 2:43 pm
by cyberman
Ich hab mir gerade noch mal den Source angesehen und konnte nichts dazu entdecken, dass $csvtoday an Smarty weitergegeben wird ... werd gleich mal nachfragen.
Re: Klassiker: Geburtstagsscript
Posted: Fri Dec 08, 2006 3:02 pm
by cyberman
Darien wrote:
Dein Ansatz ähnelt sehr meinem
Wie sah denn deine Variante aus?
Re: Klassiker: Geburtstagsscript
Posted: Fri Dec 08, 2006 3:18 pm
by Darien
Statt $csvtoday hatte ich smarty.now gedacht, aber ich denke der Ansatz stimmt nicht.
Mein Template sieht im Moment ganz simpel aus.
Code: Select all
{section loop=$csvdata name="i"}
<p>{$csvdata[i][0]} | {$csvdata[i][1]}</p>
{/section}
Es werden dann alle Namen und Geburtsdaten aufgelistet:
Name 1 | 01.01.1980
Name 2 | 05.01.1980
etc...
Das Problem ist der Filter, denn der darf ja nicht mit Heute vergleichen, weil ja heute keiner in meiner Liste geboren ist. Er darf somit nur den Tag und den Monat des Geburstages vergleiche und nur diese ausgeben....
Tricky...
Re: Klassiker: Geburtstagsscript
Posted: Fri Dec 08, 2006 4:27 pm
by Darien
Da das zur Datenaufbereitung gehört und im Template eigentlich nichts zu suchen hat, solltest Du das Sortieren in der PHP-Datei machen, bevor das Array an Smarty übergeben wird.
Tja, da hat der Coder wohl recht

...Habe aber noch ne andere Idee.....übertrage aber erstmal die csv nach MySql....
Re: Klassiker: Geburtstagsscript
Posted: Fri Dec 15, 2006 9:48 pm
by Darien
So, ich habe das Problem "fast" gelöst....
Habe eine Tabelle in meine CMS-DB angelegt mit zwei Spalten: "Date" und "Name".
Mittels folgender php-Datei habe ich die heutigen Geburtstagskinder aussortiert:
Code: Select all
Heute haben Geburtstag:
<?php
$db= mysql_connect("localhost","xxxx","xxxx")
or die ("Keine Verbindung moeglich");
mysql_select_db("xxxx")
or die ("Die Datenbank existiert nicht");
$tag = date (d);
$sql = 'SELECT name, DAYOFMONTH( `date` )'
. ' FROM `gebs`'
. ' WHERE DAYOFMONTH( `date` ) = DATE_FORMAT( NOW( ) , \'%e\' )'
. ' AND MONTH( `date` ) = MONTH( NOW( ) )'
. ' ORDER BY `date` ASC'
. ' LIMIT 0 , 30';
$result = mysql_query($sql,$db);
$num_rows = mysql_num_rows($result);
while($line=mysql_fetch_assoc($result))
{
echo $line['date']. "<br>". $line['name'];
}
echo "<br>". "$num_rows Geburtstagskinder\n";
?>
Habe diese Anweisung als benutzerdefinierten Tag angelegt aber er zeigt mir kein Ergebnis, obwohl die php-Datei funktioniert...
Kann ich eventuell per benutzerdefinierten Tag keine Datenbank öffnen,o.ä.?