Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 11. April 2012 23:30

rage_all
kennt CMS/ms
Ort: Augsburg
Registriert: 09. März 2011
Beiträge: 288

[GELÖST] Ordinal Suffix bei englischem Datum

Hallo,

in den letzten Stunden meiner Recherche habe ich — wenn alle Quellen richtig waren — herausgefunden, dass Smarty nur die Funktion "strftime", jedoch nicht "date" unterstützt. Infolgedessen ist es nicht möglich den Schalter date('S') zu verwenden um den ordinalen Suffix ans Datum einer englischen Seite zu setzen (1st, 2nd, 3rd, 4th, 5th, 6th, 7th, etc.).

Im Template oder dort wo ich das Datum bereits vorher kenne, kann ich mit diversen (mehr oder weniger guten) Workarounds Ergebnisse erzielen. Leider konnte ich für das Zusammenfassungstemplate des News-Moduls keine Lösung finden. Entweder ich bekomme gar nichts dargestellt, UNIX-Zeitstempel und andere lustige Sachen, oder wie zuletzt einen Suffix, jedoch nur des aktuellen Tages, nicht des betroffenen News-Beitrags um den es ja ginge.

Ist das wichtig? Nein, nicht die Bohne.
Aber, mir kommt's schon komisch vor, dass ausgerechnet eine Besonderheit aus dem "Gründerland" des CMS in einem derart essentiellen, bzw. omnipräsenten Modul nicht unterstützt würde. Das wäre wie ein deutsches CMS, dass keine Umlaute unterstützt...  wink

Auch interessant, dass auf der .org ein Beitrag seit vier Jahren vor sich hinstaubt, der genau das Problem aufzeigt, bzw. sogar eine Teillösung bringt -->.org - Forum CMSms; aber ... andererseits überrascht mich das gar nicht. Leider.

Nachdem hier ja nicht das .org-Board ist, dachte ich mir, ich frag doch einfach mal ganz frech (im Wissen, dass ich keine virtuelle Ohrfeige dafür bekommen werde)...  big_smile

Danke für jeden Hinweis, auch wenn es schlicht keine Lösung dafür geben sollte...

Offline

#2 11. April 2012 00:07

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: [GELÖST] Ordinal Suffix bei englischem Datum

Was ist damit (hässlich, aber einfach):

{capture assign="day"}{$entry->postdate|date_format:"%d"}{/capture}
{$day}
{if $day == 1}
st
{elseif $day == 2}
nd
{elseif $day == 3}
rd
{else}
th
{/if}

Oder eben ein UDT:

echo date('S', $params['timestamp']);

Anwendung:

{$entry->postdate|date_format:"%d"}{ordinal_suffix timestamp=$entry->postdate}

Oder gleich einen eigenen Modifikator schreiben:

<?php
function smarty_modifier_date_format_ordinal($timestamp, $format)
{
    $format = str_replace('%0', date('S', $timestamp), $format);
    return strftime($format, $timestamp);
}
?>

Anwendung:

{$entry->postdate|date_format_ordinal:"%d%0"}

Prozent Null ist stellvertretend für date('S');


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#3 11. April 2012 09:45

rage_all
kennt CMS/ms
Ort: Augsburg
Registriert: 09. März 2011
Beiträge: 288

Re: [GELÖST] Ordinal Suffix bei englischem Datum

Hehe...

NaN schrieb:

...hässlich, aber einfach...
...gleich einen eigenen Modifikator...

Ja, für Euch Code-Monkeys mag das einfach sein  big_smile  ich tu mich schon schwerer  sad

Aber, es funktioniert, vielen Dank!

Solche Ansätze habe ich im Netz schon gefunden, konnte damit aber überhaupt nichts anfangen. Mir fehlt das Programmierer-Gen um herauszufinden was foo = bar; (i)++; und sonst-was bedeutet. Deswegen wusste ich jetzt auch nicht, was - bzw. eigentlich wohin ich mit dem Modifikator sollte. Core, Plugin, UDT oder einfach ins Template? *puzzled*

Wie gesagt, es funktionierte dank Deiner ersten ("hässlichen") Lösung schon fast perfekt:

[== News-Template ==]
{capture assign="ordinal"}{$entry->postdate|date_format:"%d"}{/capture}
...
{if $entry->postdate}
	<div class="NewsSummaryPostdate">
		{$entry->postdate|cms_date_format:"%B %d"}{$ordinal}{if $ordinal == 1}st{elseif $ordinal == 2}nd{elseif $ordinal == 3}rd{else}th{/if}{$entry->postdate|cms_date_format:", %Y"}
	</div>
{/if}

Ich habe nur noch ein paar abweichende Daten hinterlegt, weil das Script außer bei 1, 2 und 3 stets "th" platzierte:

[== News-Template ==]
{capture assign="ordinal"}{$entry->postdate|date_format:"%d"}{/capture}
...
{if $entry->postdate}
	<div class="NewsSummaryPostdate">
		{$entry->postdate|cms_date_format:"%B %d"}{$ordinal}{if $ordinal == 1 || 21 || 31}st{elseif $ordinal == 2 || 22}nd{elseif $ordinal == 3 || 23}rd{else}th{/if}{$entry->postdate|cms_date_format:", %Y"}
	</div>
{/if}

Damit ist es auch wirklich simpel; gestern fand ich auch Lösungsansätze, die bis zu 30 Zeilen kryptischen Code hatten...  yikes
Ich hab's dann nur noch in eine Zeile zusammengeschoben, weil mir der Code immer Leerzeichen ausgegeben hatte "10 th".

Jedenfalls ein herzliches Dankeschön für die Hilfe!

---

Edit:
Hmm, das haut doch noch nicht so hin... In meiner geänderten Lösung bekommt jedes Datum ein "st"...  hmm
Ich bastel grad, ob das mit einem Switch oder ähnlichem auch geht; der Kern — denke ich — liegt im Capture, darauf wäre ich ja gar nicht gekommen. Sobald ich was hab, poste ich es.

Beitrag geändert von rage_all (11. April 2012 10:05)

Offline

#4 11. April 2012 10:50

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: [GELÖST] Ordinal Suffix bei englischem Datum

naja. kannst ja nicht für jede zahl ne abfrage machen. NaNs vorschlag ist schon gut. also the dirty way. aber vorher noch substr anwenden um die letzte ziffer zu bekommen:
{capture assign="ordinal"}{$entry->postdate|date_format:"%d"}{/capture}
{assign var="ordinal" value=$ordinal|substr:-1}

ist ungetestet. aber letzendlich wollen wir ja aus der 31 nur die 1 haben und aus der 42 nur die zwei. und mit -1 solltest du nur die letzte stelle ausgegeben bekommen

Offline

#5 11. April 2012 11:25

rage_all
kennt CMS/ms
Ort: Augsburg
Registriert: 09. März 2011
Beiträge: 288

Re: [GELÖST] Ordinal Suffix bei englischem Datum

Nach der Möglichkeit die Zahl auf eine Stelle zu strippen hatte ich grad überall gesucht...  tongue
Unglaublich wie lange man brauchen kann, wenn man nicht viel Ahnung von der Materie hat.

Die Codebeispiele die ich gestern gefunden hatte, gingen von diesem Ansatz aus, fügten aber noch Ausnahmen hinzu. Deine Lösung funktioniert bis z.B. zu "April 22th, 2012" — der 22. sollte aber "22nd" sein.
Ich hab schon gerade versucht eine if-Bedingung zu bauen, die von - bis prüft, aber das geht wohl nicht; ich bekomme immer den Fehler, dass ein unerwartetes '<' gefunden wurde:

[== Smarty ==]
{if $ordinal > 03 && < 21}th
{elseif $ordinal > 23 && < 30}th
{elseif $ordinal == 01 || 21 || 31}st
{elseif $ordinal == 02 || 22}nd
{elseif $ordinal == 03 || 23}rd
{else}th{/if}

Ich dachte eigentlich, ich hätte in PHP mal sowas gebastelt, mit größer als aber noch kleiner als...
Grr, bald hab ich fertig damit, dann bleibt das eben ohne Suffixe ... nur, sind die ganzen US-Seiten echt alle ohne Ordinale? Sowas ist doch Standard bei denen. Dass es hier keine out-of-the-box Lösung gibt...
Falls jemand neugierig ist: Die Installation ist in den USA, auf einem Server von Go****y. Qualitativ sicher nicht das allerbeste, aber ich denke es wird schon gehen. Jedenfalls fürchte ich keine Problematik wegen einer Serverseitigen Euro- oder Deutsch-Einstellung (Admin usw. ist auch alles komplett Englisch).

Meine anderen Try&Errors geben am häufigsten "st" aus, lustigerweise ein Test mit Anführungszeichen ("01") und XOR gab "nd" aus, obwohl streng genommen weder die eine, noch die andere Bedingung wirklich zutraf...

[== Smarty ==]
{if $ordinal === "01" XOR "21" XOR "31"}st
{elseif $ordinal === "02" XOR "22"}nd
{elseif $ordinal === "03" XOR "23"}rd
{elseif $ordinal != "01" || "02" || "03" || "21" || "22" || "23" || "31"}th
{else}th{/if}

Ich glaube, hier schieße ich langsam mit Atombomben nach Spatzen (die Anführungszeichen bringen doch überhaupt nichts, oder?)...
Jetzt gehe ich mich mal wieder mit Flyer malen ablenken und widme mich der vulkanischen Logik einer Programmiersprache heute Abend wieder...  ops

Vielen Dank für Deinen Beitrag!

Offline

#6 11. April 2012 13:38

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: [GELÖST] Ordinal Suffix bei englischem Datum

rage_all schrieb:

Die Codebeispiele die ich gestern gefunden hatte, gingen von diesem Ansatz aus, fügten aber noch Ausnahmen hinzu. Deine Lösung funktioniert bis z.B. zu "April 22th, 2012" — der 22. sollte aber "22nd" sein.

das kann aber nicht an substr liegen. denn wenn ich das teste kommt auch ne 2 raus:
{capture assign="ordinal"}22{/capture}
{assign var="ordinal" value=$ordinal|substr:-1}
ordinal = 2

ERST DANACH fügst du die if abfrage ein. also in summe:

{capture assign="ordinal"}{$entry->postdate|date_format:"%d"}{/capture}
{assign var="ordinal" value=$ordinal|substr:-1}
{if $entry->postdate}
	<div class="NewsSummaryPostdate">
		{$entry->postdate|cms_date_format:"%B"} {$ordinal}{if $ordinal == 1}st{elseif $ordinal == 2}nd{elseif $ordinal == 3}rd{else}th{/if}{$entry->postdate|cms_date_format:", %Y"}
	</div>
{/if}

Beitrag geändert von nicmare (11. April 2012 13:42)

Offline

#7 11. April 2012 14:51

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: [GELÖST] Ordinal Suffix bei englischem Datum

rage_all schrieb:

Deswegen wusste ich jetzt auch nicht, was - bzw. eigentlich wohin ich mit dem Modifikator sollte. Core, Plugin, UDT oder einfach ins Template?

Also ich denke die sauberste Lösung sollte das mit dem Modifikator sein.
Den Code speicherst Du einfach unter dem Namen modifier.date_format_ordinal.php im Plugins-Verzeichnis.
Verwendet wird er dann z.B. so:

{$entry->postdate|date_format_ordinal:'%e%0'}

%e ist ohne führende Null bei einstelligen Zahlen - stattdessen aber mit Leerzeichen.
Siehe auch strftime()


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#8 11. April 2012 15:23

rage_all
kennt CMS/ms
Ort: Augsburg
Registriert: 09. März 2011
Beiträge: 288

Re: [GELÖST] Ordinal Suffix bei englischem Datum

Okay, ich muss mir / Euch schonmal meinen ersten Fehler eingestehen...
Ich hatte die ersten Zeilen am Anfang des Template, außerhalb des Post platziert. Wohl konnte Smarty hier also nicht den relevanten $entry->postdate holen. Warum das keine Fehlermeldung ausgab, weiß ich nicht.
Als ich mir den Wert der Variablen ausgeben lies, war auch der richtige drin (ich wollte wissen, ob der zweistellig oder einstellig bei den ersten 9 Tagen ist).

Hier ist nun der relevante Teil des Template:

[== News-Summary Template / Smarty ==]
{if $entry->postdate}
  	<div class="NewsSummaryPostdate">
    {capture assign="ordinal"}{$entry->postdate|date_format:"%d"}{/capture}
  {assign var="ordinal" value=$ordinal|substr:-1}
  	{$entry->postdate|cms_date_format:"%B %d"}{if $ordinal == 1}st{elseif $ordinal == 2}nd{elseif $ordinal == 3}rd{else}th{/if}{$entry->postdate|cms_date_format:", %Y"}
  	</div>  {/if}

Da {$ordinal} jetzt nur noch einstellig ist, musste das raus - sonst hätte ich z.B. "222nd" oder "2nd" statt "22nd" gehabt.

Soweit ist alles gut, bis ich einen Postdate am 11., 12. oder 13. habe:
April 11st, 2012 || April 12nd, 2012  || April 13rd, 2012

Genau das ist ja das Problem bei diesen Typen: Alles ist "th" außer dem 1., 21. und 31., sowie 2., 22., sowie 3. und 23. Die ersten drei im Zehner schießen quer und bleiben "th", was eine solch simple Lösung mit Griff auf die letzte Zahl leider völlig ausschließt.

Deswegen habe ich versucht mit
{if $ordinal == gt 3 && lt 21 || gt 23 && lt 31}th...
diesen Bereich schonmal komplett auszuklammern.

Naja, nochmal: Ich brech mir hier nichts, die Seite ist für meinen Bruder in den USA, der das wahrscheinlich nicht mal sehen, geschweige denn würdigen wird...  big_smile
Ich dachte nur, bei x-tausend (oder mehr) Seiten die englischsprachig betrieben werden, kann es doch nicht sein, dass es hier rein gar nichts gibt... Aber, nach ca. fünf Stunden Google'n komme ich zum Schluss, dass es tatsächlich so sein muss.
   Campbell hat solche Daten in seinem Blog: "16/10-09"
   Die .org-Seite schreibt lieber: "Jan 19, 2012"
   Nur Ted Kulp hat auf seiner Seite: "Nov 25th, 2011" ...läuft aber unter Octopress... devil

Falls ich das wirklich weiter verfolgen sollte, und diese Lösung — warum auch immer — sowieso "dirty" ist, sollte ich nicht vielleicht lieber den Modifikator versuchen? Dafür bräuchte ich bitte nur einen Schubs wohin ich den Code legen soll...

---

Edit:
Da sieht man mal, wie lange ich brauche, einen Beitrag zu schreiben; ich lese mein Zeug bestimmt 10x bevor ich es poste... Das versuche ich später gleich mal - muss jetzt leider kurz weg.

Beitrag geändert von rage_all (11. April 2012 15:26)

Offline

#9 13. April 2012 13:41

rage_all
kennt CMS/ms
Ort: Augsburg
Registriert: 09. März 2011
Beiträge: 288

Re: [GELÖST] Ordinal Suffix bei englischem Datum

Der Modifier funktioniert leider auch nicht wie gedacht...  sad

Zwar setzt er die Ordinale an die richtige Stelle (und wie das überhaupt funktioniert mit $postdate() → Modifier → (Um)wandlung → Template → HTML ist mir immer noch ein wenig schleierhaft aber wirklich interessant zu sehen wie man solche Aufgaben auf mehrere Ebenen verteilen kann...), aber mit der falschen Endung, Bezeichnung, wie auch immer...
Beispiel heute: April 23st, 2012

Ich denke wirklich, dass ich mit einer Schleife eben wie

[== NONSENS ==]
if $X === '01' then st;
if $X === '21' then st;
if $X = ...

arbeiten muss, um es richtig umzusetzen.

Für php habe ich manche Schnipsel gefunden, die ich — denke ich — auch richtig lesen und interpretieren, ergo auch für meinen Zweck ändern kann, aber ich hab noch nicht ganz raus, wo eigentlich die Variable steckt, mit der ich arbeiten müsste...  hmm
Mir ist auch das Zeug mit implode, explode geschweige denn mehrdimensionalen Arrays noch immer komplett rätselhaft - aber ich versuche es trotzdem mal.

Jetzt ist das Ding online; nochmal: nicht wirklich hübsch, das Logo haben wir x-mal geändert, so passt es jetzt auch gar nicht richtig in die Seite; zeitlich hat sich das auch so lange gestreckt, dass ich meine Abläufe und Bereinigungen (noch) nicht durch hab (es fehlt sogar das Favicon - oberpeinlich, sowas), aber sie sollte ja unbedingt jetzt gleich online gehen... *die-liebe-familie*
Hier die Adresse: Concrete Technology of Brevard

Ich versuche mal einen Code für den Modifier zusammenzubasteln. Bevor ich den hochlade, poste ich ihn aber zuerst hier und hoffe auf Eure Korrekturvorschläge.

Vielen Dank für Eure Unterstützung!

Offline

#10 19. April 2012 13:47

rage_all
kennt CMS/ms
Ort: Augsburg
Registriert: 09. März 2011
Beiträge: 288

Re: [GELÖST] Ordinal Suffix bei englischem Datum

So, nun bin ich soweit.
Dumm ist natürlich die Tatsache, dass einer der nicht weiß was er tut, selten zufällig dabei das richtige tut...  big_smile

Deswegen hoffe ich auf kreative Korrekturvorschläge bevor ich das Ding hochlade und mir am Ende damit noch etwas zerschieße...  yikes

[== PHP // Modifier ==]
<?php

function ordinal_suffix($timestamp, $format) {

$postday = date("d",$timestamp);

	if($postday == 11 || $postday == 12 || $postday == 13) {
		$ordinal = "th";
	} else if (substr($postday, -1, 1) == 1) {
		$ordinal = "st";
	} else if (substr($postday, -1, 1) == 2) {
		$ordinal = "nd";
	} else if (substr($postday, -1, 1) == 3) {
		$ordinal = "rd";
	} else {
		$ordinal = "th";
 }
}

	$output = "<sup>" . $ordinal . "</sup>";

	return $output;

?>

Syntax sollte richtig sein (falls Dreamweaver auch etwas PHP beherrscht...), aber ob der Code überhaupt irgendwas tut oder nachher nur schielt und vielleicht sogar was im CMS überschreibt, weiß ich halt genauso wenig, wie ich fürchte, dass ich so oberflächliche Namen wie $output wohl besser nicht nehmen sollte um nicht mit einer anderen Variable zu kollidieren...
Danke für Eure Hilfe!

Offline

#11 21. April 2012 10:06

rage_all
kennt CMS/ms
Ort: Augsburg
Registriert: 09. März 2011
Beiträge: 288

Re: [GELÖST] Ordinal Suffix bei englischem Datum

*push*

Also, dieser Code hat nichts gebracht.
Ich hab ihn letzte Nacht mal kurz eingefügt, aber die Seite hat's zerschossen und jede Menge Fehlermeldungen kamen raus. Leider haben die aber nicht irgendwie in den Modifier gezeigt; sonst hätte ich mich mal durchgearbeitet in welchen Zeilen das Problem steckt; sondern mokiert, dass das News-Template Fehler enthält (ja, ich habe die Angabe :"%0" entfernt, hat aber auch nichts neues gebracht).

Ich versuchs mal im .org-Board (in der Hoffnung, dass ich nicht gleich geteert und gefedert werde...  big_smile ), die englischsprachigen sollten doch auch Interesse an einer Lösung haben (hoffe ich...).
Falls etwas dabei herauskommt, poste ich die Lösung auch hier — vielleicht wird das Thema ja eines Tages für irgendwen interessant...

Offline

#12 21. April 2012 10:40

nicmare
Server-Pate
Registriert: 15. Dezember 2010
Beiträge: 1.314
Webseite

Re: [GELÖST] Ordinal Suffix bei englischem Datum

meine güte. hier wurden doch schon zig lösungen vorgeschlagen. schalt jetzt nochmal deinen kopf ein, und dann muss es doch klappen. das ist doch keine riesen sache.

Offline

#13 21. April 2012 13:17

rage_all
kennt CMS/ms
Ort: Augsburg
Registriert: 09. März 2011
Beiträge: 288

Re: [GELÖST] Ordinal Suffix bei englischem Datum

Ich mag es auch nicht wenn sich wer ins Board setzt, stänkert über dies und das, offensichtlich unfähig ist zu googeln oder die Boardsuche zu verwenden und dann "Pronto" eine Lösung erwartet ohne bitte und danke.

Bei solchen Kandidaten ist von mir (sofern ich überhaupt helfen kann) auch keine Hilfe zu erwarten – soweit sind wir uns bestimmt einig.
Ich ging davon aus, dass ich selbst ausreichend recherchiert hatte. Auch habe ich dutzende Code-Beispiele von PHP und JS durchgearbeitet (wobei ich nicht wollte, dass die ordinale nur bei aktiviertem JS angezeigt würden). Resultat meiner Suche und meines Denkens war der Code den ich hier gepostet hatte (der Syntaktisch wohl wenigstens korrekt war aber halt nicht passt) und außer einem Crash nichts weiter bewirkt hat.

Als Laie und — wie ich stets offen zugebe — Vollpfosten in Sachen Coding, fällt es mir ohnehin schon schwer Lösungen zu finden, selbst dann wenn die Ausgabe ganz klar "Error X in Zeile Y" lautet. In diesem Fall wird mir aber nur ein Fehler im News-Template ausgegeben, wovon ich mal ausgehen kann, dass dieser im Modifier zu finden sein wird.

Es freut mich, dass Du (Deinem Beitrag nach zu schließen) offenbar stets ohne jegliche fremde Hilfe alle Deine Probleme allein lösen konntest (einschließlich der letzten Autoreparatur, dem Teppichlegen und was das Leben halt sonst so von einem erwartet).
Ich versuche auch, so gut ich kann, meine Programmierprobleme mit nahe NULL Kenntnissen zu lösen; schaffe es heute einmal nicht und bitte deshalb freundlich um Hilfe. Wenn es für Dich keine große Sache ist, freut auch das mich sehr — und hätte mich noch mehr gefreut wenn Du mich daran hättest teilhaben lassen (schon ein Tipp wäre toll gewesen).

Ansonsten - so sehr ich Deine Beiträge hier im Forum normalerweise schätze - war dieser Post in meinen Augen themenverfehlt und überflüssig. Schade.

Offline

#14 21. April 2012 13:27

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: [GELÖST] Ordinal Suffix bei englischem Datum

der Code den ich hier gepostet hatte (der Syntaktisch wohl wenigstens korrekt war aber halt nicht passt) und außer einem Crash nichts weiter bewirkt hat.

Was sagt uns das?
Dass er eben nicht korrekt war wink

1.
Die letzten beiden Zeilen sind außerhalb der Funktion.
Ein "return" außerhalb einer Funktion ergibt einen fatalen Fehler.

2.
Scheinbar hast Du den (fehlerhaften) Code als Modifikator auf eine Template-Variable im News-Template anwenden wollen, richtig? Nur wie? Deine Funktion hat den falschen Namen, um vom System als Modifikator erkannt zu werden. Und genau das ist das Problem. Du rufst im News-Template einen Modifikator auf, der für das System nicht existiert. Daher zeigen alle Fehler aufs News-Template.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#15 21. April 2012 13:45

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: [GELÖST] Ordinal Suffix bei englischem Datum

Ich hab hier übrigens mal einen sehr viel einfacheren Code gefunden. Als Modifikator könnte das dann so aussehen:

<?php
function smarty_modifier_date_format_ordinal($timestamp, $format)
{
	$suffixes = array('th','st','nd','rd','th','th','th','th','th','th');
	$day      = trim(strftime('%e', $timestamp));
	if (($day %100) >= 11 && ($day%100) <= 13)
		$suffix = 'th';
	else
		$suffix = $suffixes[$day % 10];
		
	$format = str_replace('%0', $suffix, $format);
	return strftime($format, $timestamp);
}
?>

Wieder unter /plugins/modifier.date_format_ordinal.php speichern.
Anwendung wie gehabt:

{$entry->postdate|date_format_ordinal:'%e%0'}

Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#16 21. April 2012 14:00

rage_all
kennt CMS/ms
Ort: Augsburg
Registriert: 09. März 2011
Beiträge: 288

Re: [GELÖST] Ordinal Suffix bei englischem Datum

Danke NaN,

ich hab von Deinem Modifier das Grundgerüst (sprich die Randzeilen) einfach übernommen / kopiert. Das mit dem return wusste ich nicht; auch nicht wie ich das Ding idealerweise im Template ansprechen soll. Es stand in Deinem Beispiel so da, also übernahm ich es (und Dreamweaver fand keine Fehler, deswegen).

Logisch und nachvollziehbar ist für mich z.B. das {custom_copyright}. Es wird aufgerufen wo es steht, führt sich also chronologisch gesehen in diesem Falle so ziemlich am Ende der Seitenausgabe aus, und echo't ganz banal den Text des Anfangjahres, sowie das aktuelle Jahr an genau diesem Platz aus.

Hier kommt ein Wert irgendwie aus dem News-Beitrag, ich verstehe aber nicht wie (hätte auch eigentlich angenommen, dass $timestamp die jetzige Zeit sein sollte und nicht die, dieses einen Beitrags).
Deswegen hätte ich jetzt auch gute Lust auf UDT zu gehen, weil es mir über den Kopf wächst — will aber auch nicht davonlaufen und kleinbei sondern versuche zu lernen.

Aus der "modifier.cms_date_format.php" kann ich nichts lernen; das könnte genauso gut Chinesisch sein. Dein 2½ Zeilen-Code sagt mir aber auch nichts, weil irre komprimiert und ich nicht weiß, wo ich da einhaken kann um vielleicht eine Vernünftige Abfrage aufbauen zu können.
Jetzt installiere ich mir erstmal wieder ein Testsystem, zurzeit hab ich keins und brauche es doch - auf Live-Seiten sollte man nicht sinnfrei herumspielen. Dann teste ich mal, ob ich und wie ich Modifier, etc. aufrufen kann und aufbauen sollte.

Danke für Eure Hilfe und entschuldigt bitte, wenn ich nervig war. Ich schließe jetzt den Thread und poste die Lösung sobald ich sie habe.

Offline

#17 21. April 2012 14:27

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: [GELÖST] Ordinal Suffix bei englischem Datum

Aus der "modifier.cms_date_format.php" kann ich nichts lernen; das könnte genauso gut Chinesisch sein. Dein 2½ Zeilen-Code sagt mir aber auch nichts, weil irre komprimiert und ich nicht weiß, wo ich da einhaken kann um vielleicht eine Vernünftige Abfrage aufbauen zu können.

Was genau willst Du denn da jetzt noch abfragen?
Du übergibst dem Modifikator das Erstellungsdatum des News-Artikels und ein Format nach dem es formatiert werden soll. Das Beispiel formatiert das komplette Datum mit ordinal-Suffix. War das nicht das, was Du wolltest? Was fehlt denn jetzt noch?


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#18 21. April 2012 14:41

rage_all
kennt CMS/ms
Ort: Augsburg
Registriert: 09. März 2011
Beiträge: 288

Re: [GELÖST] Ordinal Suffix bei englischem Datum

Entschuldige, das hat sich nur überschnitten.
Du hast Deinen Beitrag gepostet, während ich meinen noch schrieb. Es ist alles in Ordnung.  smile

Offline

#19 04. Mai 2012 14:56

rednose
probiert CMS/ms aus
Registriert: 28. März 2011
Beiträge: 63

Re: [GELÖST] Ordinal Suffix bei englischem Datum

NaN schrieb:
<?php
function smarty_modifier_date_format_ordinal($timestamp, $format)
{
	$suffixes = array('th','st','nd','rd','th','th','th','th','th','th');
	$day      = trim(strftime('%e', $timestamp));
	if (($day %100) >= 11 && ($day%100) <= 13)
		$suffix = 'th';
	else
		$suffix = $suffixes[$day % 10];
		
	$format = str_replace('%0', $suffix, $format);
	return strftime($format, $timestamp);
}
?>

Wieder unter /plugins/modifier.date_format_ordinal.php speichern.
Anwendung wie gehabt:

{$entry->postdate|date_format_ordinal:'%e%0'}

Auch ich schlage mich momentan hiermit um für eine 2-sprachige Seite. Nach vieles probiert zu haben, denke ich dass der modifier der beste Lösung ist. Ich habe obenstehende Code in der plugin-ordner geladen und nachher die code angepasst an der CGCalender eingefügt

 {foreach from=$events key=key item=event} <div class="calendar-event">{assign var=month_number value=$event.event_date_start|date_format:"%m"}
	{assign var=end_month_number value=$event.event_date_end|date_format:"%m"}
{assign var=start_date value=$event.event_date_start|date_format_ordinal:"%e%0"} 
	{if $event.event_date_start == $event.event_date_end || $event.event_date_end == 0}
	<div class="calendar-date-from"><span class="calendar-date-title">{$lang.date}: </span>{$start_date}{$month_names[$month_number]} </div>

Ergebnis -> Alle Daten werden auf der 1st gesetzt?!? Alles andere funktioniert prima, Titel, URL link mehr usw.
date_format:"%e" würde der richtige Tag(nummer) angeben.
Muss noch etwas geändert werden an der function, da ich kein $entry habe? Fehlt da noch eine Angabe am Anfang der Template?

Offline

#20 04. Mai 2012 15:42

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.437

Re: [GELÖST] Ordinal Suffix bei englischem Datum

Das Problem ist, das die Variablen ja garkeinen UNIX Timestamp beinhalten (wovon ich immer ausgegangen bin), sondern bereits einen formatierten String (oder einen DB Timestamp oder sowas). Der normale date_format Modifikator macht aus diesem String erst einen UNIX Timestamp und formatiert dann erst das Datum. Ich habe zwar keine Ahnung warum um alles in der Welt das so kompliziert gemacht wird (meiner Meinung nach sollte ein einfacher UNIX Timestamp völlig ausreichen), aber here we go again:

<?php
function smarty_modifier_date_format_ordinal($timestamp, $format)
{
	if(!function_exists('smarty_make_timestamp'))
	{
		$smarty = cmsms()->GetSmarty();
		$config = cmsms()->GetConfig();
		$fn     = cms_join_path($config['root_path'],'lib','smarty','plugins','shared.make_timestamp.php');
		if( !file_exists($fn) ) 
			return;
		require_once( $fn );
	}
	$timestamp = smarty_make_timestamp($timestamp);
	$suffixes  = array('th','st','nd','rd','th','th','th','th','th','th');
	$day       = trim(strftime('%e', $timestamp));
	if (($day %100) >= 11 && ($day%100) <= 13)
		$suffix = 'th';
	else
		$suffix = $suffixes[$day % 10];
		
	$format = str_replace('%e%0', $day.$suffix, $format);
	return strftime($format, $timestamp);
}
?>

Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#21 04. Mai 2012 15:50

rednose
probiert CMS/ms aus
Registriert: 28. März 2011
Beiträge: 63

Re: [GELÖST] Ordinal Suffix bei englischem Datum

Und es funktioniert!   big_smile
Vielen Dank, jetzt kann ich nach 2 Tage suchen und ausprobieren, das WE geniessen  wink

Offline