Calendar - PHP-Code für Title + Breadcrumbs
Eingetragen von mauk (78)
am 07.09.2009 - 21:17 Uhr in
am 07.09.2009 - 21:17 Uhr in
Hallo,
ich möchte gerne das Calendar-Modul ändern, komme aber leider mit dem php-code nicht zurecht.
Es geht um diese Code-Passage:
$view->year = $value;
return $view->year;
case 'MONTH':
return t('Veranstaltungen im Monat @month', array('@month' => date_format_date($view->min_date, 'F Y')))
Es soll das Jahr- und die Monatsausgabe geändert werden.
Bei dem Jahr komme ich überhaupt nicht weiter und bei der Monatsausgabe erscheint
Veranstaltungen im Monat Die, 01/09/2009 - 00:00
soll aber sein Veranstaltungen im Monat September 2009
Beim Jahr entsprechend Veranstaltungen im Jahr 2009
etc.
Kann da jemand helfen?
Gruß
mauk
- Anmelden oder Registrieren um Kommentare zu schreiben
Kann mir hier jemand
am 08.09.2009 - 21:56 Uhr
Kann mir hier jemand helfen??
:o
mauk
Das freut die iPhone-Fans: iPhone News.
Modulausgabe
am 09.09.2009 - 07:24 Uhr
ich möchte gerne das Calendar-Modul ändern
Solltest Du einen Fehler gefunden haben oder eine Funktionalität zum Modul hinzufügen wollen, empfiehlt sich die Issue-Queue von Calendar (und evtl. auch Creating patches).
Ich gehe jedoch mal aufgrund Deiner nachfolgenden Sätze davon aus, dass Du mit einer speziellen Ausgabe des Moduls unzufrieden bist und diese gerne anpassen möchtest. Dazu ist keine Änderung am Modulcode nötig sondern nur eine Anpassung der Ausgabe.
Es geht um diese Code-Passage: ...
Leider schreibst Du nicht, in welcher Datei diese Zeilen stehen (verwendest Du wirklich Drupal 5?).
$view->year = $value;
return $view->year;
case 'MONTH':
return t('Veranstaltungen im Monat @month', array('@month' => date_format_date($view->min_date, 'F Y')))
Ich bin mir 100%ig sicher, dass es diese Zeilen so definitiv nicht im Modul gibt. Standardsprache in Drupal ist englisch.
Sofern die Ausgabe über die Funktion
t()
erfolgt, kannst Du sie ganz einfach über die Oberfläche übersetzen und dabei anpassen (den Text, nicht das Datumsformat). Das Format des Datums sollte laut Dokumentation korrekt als Monatsname + Jahr ausgegeben werden.Schreib mal bitte, in welcher Datei das steht, dann kann man da evtl. weiterhelfen. Ansonsten wird das äusserst schwierig.
hth,
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Hallo Stefan, vielen Dank
am 09.09.2009 - 18:29 Uhr
Hallo Stefan,
vielen Dank für Deine Antwort. Ja, ich bin mir sicher, dass ich Drupal 5 verwende.
Die Codepassage ist aus der Datei calendar.theme (ab Zeile 228). Der Originalcode ist:
/**
* Theme the calendar title and breadcrumbs
* Arguments are evaluated in year, month, day or year, week order
* so you can track previous values in the session.
*
* @param string $field_type - 'YEAR', 'MONTH', 'DAY', 'WEEK'
* @param integer $value - the current number for the field type as selected in the view argument.
* @return string formatted title
*/
function theme_calendar_arg_title($field_type, $value, $query) {
$value = intval(check_plain($value));
if (empty($value)) {
return '';
}
else {
$view = $GLOBALS['current_view'];
switch (strtoupper($field_type)) {
case 'YEAR':
$view->year = $value;
return $view->year;
case 'MONTH':
return date_format_date($view->min_date, 'custom', 'F');
case 'DAY':
return date_format_date($view->min_date, 'custom', 'l, F j Y');
case 'WEEK':
return t('Week of @date', array('@date' => date_format($view->min_date, 'F j')));
}
}
return $value;
}
daraus habe ich bisher gemacht:
/**
* Theme the calendar title and breadcrumbs
* Arguments are evaluated in year, month, day or year, week order
* so you can track previous values in the session.
*
* @param string $field_type - 'YEAR', 'MONTH', 'DAY', 'WEEK'
* @param integer $value - the current number for the field type as selected in the view argument.
* @return string formatted title
*/
function theme_calendar_arg_title($field_type, $value, $query) {
$value = intval(check_plain($value));
if (empty($value)) {
return '';
}
else {
$view = $GLOBALS['current_view'];
switch (strtoupper($field_type)) {
case 'YEAR':
$view->year = $value;
return $view->year;
case 'MONTH':
return t('Veranstaltungen im Monat @month', array('@month' => date_format_date($view->min_date, 'F Y')));
case 'DAY':
return t('Veranstaltungen am @day', array('@day' => date_format_date($view->min_date, 'custom', 'l, j. F Y')));
case 'WEEK':
return t('Veranstaltungen in Woche ab @date', array('@date' => date_format($view->min_date, 'j. F Y')));
}
}
return $value;
}
Tages- und Wochenausgabe funktionieren so wie sie es sollen. Nur beim Monat und Jahr leider nicht.
Es wäre schön, wenn mir jemand helfen könnte.
:o
mauk
Das freut die iPhone-Fans: iPhone News.
theme-Funktionen
am 09.09.2009 - 21:47 Uhr
Da das innerhalb einer theme-Funktion steht, kannst Du das ganz einfach in der template.php Deines Themes überschreiben.
Dazu kopierst Du einfach die komplette Funktion in die template.php Deines Themes (z.B. "garland") und nennst die kopierte Funktion dann
garland_calendar_arg_title
(wenn Dein Theme anders heisst, ersetzt Du "garland" im Funktionsnamen durch den entsprechenden Namen).Dann kannst Du in dieser Funktion alle Deine gewünschten Änderungen vornehmen (und nachdem Du den Theme-Cache geleert hast, werden die Änderungen auch angezeigt).
hth,
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Hallo Stefan, die
am 09.09.2009 - 22:10 Uhr
Hallo Stefan,
die Änderungen, die ich bisher gemacht habe, funktionieren auch ohne, das ich sie in die template.php kopiere. Vielleicht liest Du nochmals mein Ursprungpost.
:o
Bernt
Das freut die iPhone-Fans: iPhone News.
Geht, aber anders ist es richtiger
am 09.09.2009 - 23:26 Uhr
mauk, natürlich kannst du den Original-Code überschreiben.
Was Stefan meint ist: So sollte man es nicht machen. Der richtige Weg ist die Funktion im eigenen template.php zu überschreiben. Das ist unabhängig von deinem Problem, einfach nur die richtige Herangehensweise. (wg. Update der Module)
Was dein Problem angeht, kann ich leider auch nicht weiterhelfen. Ich hätte gedacht, dass man so etwas einfacher einstellen kann und keinen eigenen Code dafür schreiben muss. Reicht es nicht, die Drupal-internen Formate fürs Datum richtig einzustellen?
--
textformer mediendesign | Webkrauts
Funktionsaufruf
am 10.09.2009 - 06:55 Uhr
Wenn Du meine Antwort und die darin verlinkten Artikel gelesen hättest, würdest Du den Modulquellcode nicht überschreiben, sondern den vorgeschriebenen Weg eingehen.
Des Weiteren solltest Du die Funktion
date_format_date
auch richtig aufrufen.<?php date_format_date($view->min_date, 'F Y') ?>
kann kein richtiges Ergebnis liefern, da der zweite Parameter den verwendeten Format-Typen bestimmt ('small', 'medium', 'large' oder 'custom'). Du übergibst da jedoch die Formatierungsanweisung.Und wie bereits vorab erwähnt: Standardsprache innerhalb von Drupal ist Englisch. Aufrufe wie
<?php t('Veranstaltungen im Monat @month', ...); ?>
sind schlicht und ergreifend falsch.Sämtliche Texte innerhalb von
t()
sind in englischer Sprache zu schreiben und werden über die Oberfläche übersetzt.hth,
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Hallo Stefan, nichts für
am 10.09.2009 - 09:29 Uhr
Hallo Stefan,
nichts für Ungut. Dein beschriebener Weg mag richtig sein, aber für mich als "normalen" Anwender erscheint mein Weg passender. Ich erstelle diese Seite für meine Zwecke. Die Übersetzungssuche liefert mir häufig viele unklare Suchergebnisse und darum ändere ich darüber ungern etwas.
Ich bin kein PHP-Freak. Was meinst Du hier mit dem zweiten Parameter? F steht für Monat und Y für Jahr.
<?php
date_format_date($view->min_date, 'F Y')
?>
Auch wenn es jetzt nicht den Drupal-Richtlinien entspricht. Ich habe die Konstante in deutsch direkt in den PHP-Code geschrieben
und für die Monatsausgabe jetzt so gelöst:
case 'MONTH':
return t('Veranstaltungen im Monat @month', array('@month' => date_format($view->min_date,'F Y')));
Leider fehlt mir jetzt noch die Ausgabe für das Jahr.
:o
Bernt
Das freut die iPhone-Fans: iPhone News.
Regeln
am 10.09.2009 - 09:39 Uhr
Dein beschriebener Weg mag richtig sein
Er mag nicht nur richtig sein, er ist es sogar.
, aber für mich als "normalen" Anwender erscheint mein Weg passender.
Der Schein trügt leider viel zu oft.
Ich erstelle diese Seite für meine Zwecke.
Wenn Du für Dich selbst schon nicht sauber und nach den bestehenden Regeln von Drupal arbeitest, was machst Du dann, wenn Du mal etwas für Andere tun möchtest?
Fang lieber gleich an, die Coding-Guidelines richtig umzusetzen, dann wirst Du in Deinem späteren Drupal-leben weniger Probleme haben.
Die Übersetzungssuche liefert mir häufig viele unklare Suchergebnisse und darum ändere ich darüber ungern etwas.
Die obigen Texte sind eigentlich relativ eindeutig und daher auch gut zu übersetzen.
Ich bin kein PHP-Freak. Was meinst Du hier mit dem zweiten Parameter? F steht für Monat und Y für Jahr.
Du übergibst der Funktion 2 Parameter. Sie benötigt jedoch 3, wobei der 2.
'custom'
sein sollte.Auch wenn es jetzt nicht den Drupal-Richtlinien entspricht. Ich habe die Konstante in deutsch direkt in den PHP-Code geschrieben und für die Monatsausgabe jetzt so gelöst: ...
Damit werden Dir jedoch nicht die Tage und Monatsnamen übersetzt.
Warum verwendest Du die Funktion nicht einfach so, wie im Original beschrieben?
<?php date_format_date($view->min_date, 'custom', 'F') ?>
funktioniert wunderbar.Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Zitat: <?php
am 10.09.2009 - 09:59 Uhr
<?php
date_format_date($view->min_date, 'custom', 'F')
?>
Ja, das habe ich auch gar nicht bestritten, aber die Ausgabe sowohl im Title-, H1-Tag als auch eigentlich der URL ist sehr dürfig, nämlich z.B. September 2009 oder in der URL 2009/09. Das sieht nicht so suchmaschinenfreundlich aus und finde ich für den User auch nicht sonderlich ansprechend, daher meine ergänzenden Angaben.
Wenn jetzt noch jemand mir etwas zur Jahresausgabe sagen könnte, wäre ich glücklich.
:o
mauk
Das freut die iPhone-Fans: iPhone News.
Ausgabe
am 10.09.2009 - 10:11 Uhr
Was hindert Dich daran, einfach statt
<?php
return $view->year;
?>
Folgendes zu schreiben:
<?php
return t('Events in @year', array('@year' => $value));
?>
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
stBorchert schrieb Was
am 10.09.2009 - 10:17 Uhr
Was hindert Dich daran, einfach statt
Meine Unwissenheit. Vielen Dank für Deine Geduld!!
Gruß aus Hamburg
Bernt
Das freut die iPhone-Fans: iPhone News.
Ausgabe leider in englisch
am 13.09.2009 - 22:35 Uhr
Ich habe doch noch eine Frage. Die Ausgabe des Monats erfolgt jetzt im Title und H1 Tag in englisch. Über die Lokalisierung lässt sich das leider nicht ändern.
Wie könnte man das lösen?
:o
mauk
Das freut die iPhone-Fans: iPhone News.
date_format_date
am 14.09.2009 - 06:47 Uhr
Du verwendest die Funktion
date_format
zur Ausgabe des Monats. Mit dieser werden keine Übersetzungen berücksichtigt.Verwende stattdessen
date_format_date
(wie auch bei den anderen Ausgaben), dann werden die Monatsnamen auch übersetzt ausgegeben.hth,
Stefan
--
sei nett zu Deinem Themer
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Du bist super. Mit dem
am 14.09.2009 - 08:51 Uhr
Du bist super. Mit dem richtigen Format hat es dann auch geklappt. Fällt Dir zu diesem Problem eventuell auch noch etwas ein:
http://www.drupalcenter.de/node/21378
:o
Bernt
Das freut die iPhone-Fans: iPhone News.