Klassiker: Geburtstagsscript

Hilfe zu Modulen und Tags
Darien

Klassiker: Geburtstagsscript

Post 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 ?
cyberman

Re: Klassiker: Geburtstagsscript

Post by cyberman »

Die Suche nach csv ist dein Freund - sie hätte dir mindestens diesen Thread gezeigt  ;D

http://forum.cmsmadesimple.org/index.ph ... 946.0.html

Du müsstest dann nur noch einen Filter hinzufügen ...
Darien

Re: Klassiker: Geburtstagsscript

Post by Darien »

Danke...nach "csv" habe ich natürlich nicht gesucht *schäm

Werde mal probieren ob ich das so hinbekomme...
Darien

Re: Klassiker: Geburtstagsscript

Post 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 ?
cyberman

Re: Klassiker: Geburtstagsscript

Post 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)?
Darien

Re: Klassiker: Geburtstagsscript

Post by Darien »

Hm, es funktioniert nicht...

Kommt nur ne leere Seite. Die Datei liegt im Smarty-Pluginordner.
cyberman

Re: Klassiker: Geburtstagsscript

Post 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 ...
Darien

Re: Klassiker: Geburtstagsscript

Post 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...
cyberman

Re: Klassiker: Geburtstagsscript

Post 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}
Darien

Re: Klassiker: Geburtstagsscript

Post 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  >:(
cyberman

Re: Klassiker: Geburtstagsscript

Post 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.
cyberman

Re: Klassiker: Geburtstagsscript

Post by cyberman »

Darien wrote: Dein Ansatz ähnelt sehr meinem
Wie sah denn deine Variante aus?
Darien

Re: Klassiker: Geburtstagsscript

Post 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...
Last edited by Darien on Fri Dec 08, 2006 3:26 pm, edited 1 time in total.
Darien

Re: Klassiker: Geburtstagsscript

Post 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....
Darien

Re: Klassiker: Geburtstagsscript

Post 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.ä.?
Post Reply

Return to “Module und Tags”