[gelöst] Calendar - Textfarbe ändern

am 07.03.2010 - 01:06 Uhr in
Hey Leute, ich habe mal eine Frage zum Calendar-Modul.
Mit diesem Modul kann man schön einen Calender erstellen, dann noch die View entsprechend einstellen und man bekommt Nodes als Termine im Kalender angezeigt.
Jetzt kommt aber die große Frage:
Weiß jemand von euch, wie ich die Schriftfarbe ändern kann?
Standardmäßig ist die Schriftfarbe der Termine im Kalender ja schwarz. Ich hätte aber gerne bestimmte Termine dort in rot. Und zwar sollen die Termine eine rote Schriftfarbe bekommen, wenn ein bestimmtes CCK-Feld ausgefüllt ist.
Ich möchte also einen Termin anlegen, lasse dort das CCK-Feld frei und der Termin wird ganz normal im Kalender angezeigt.
Danach lege ich noch einen Termin an und fülle das CCK-Feld aus - dieser Termin soll in roter Schrift im Kalender angezeigt werden. Aber eben nur dieser Termin, der andere nicht.
Weiß jemand, ob und wie das möglich ist?
mfg Exterior
- Anmelden oder Registrieren um Kommentare zu schreiben
Zwei Typen definieren
am 07.03.2010 - 01:38 Uhr
Das würde darauf hinauslaufen, dass Du ein class="wichtig" in das Terminfeld bringen musst, abhängig davon, ob das zweite CCK-Feld ausgefüllt ist. Das dürfte nur über eine preprocess-Funktion gehen.
Ein alternativer Ansatz wäre vielleicht, 2 verschiedene Terminfelder zu definieren, field_termin_normal und field_termin_wichtig. Die Erklärung, welches wann ausgefüllt werden soll, packst Du in die Beschreibung. Wenn Du im View unter Fields beide Felder angibst, landet auch nur ein Termin im Kalender, und zwar der, dessen Feld ausgefüllt ist. Aber Du hast jetzt eine Unterscheidung in den Klassen, an die Du die Schriftformatierung problemlos anknüpfen kannst.
Ob Du mit diesem Ansatz etwas anfangen kannst, hängt natürlich von Deiner Anwendung ab und was Du Deinen Endnutzern zumuten kannst oder willst. Unter zwei alternativen Terminfeldern das richtige auszuwählen kann etwas verwirrender sein als ein Terminfeld plus ein Kästchen abhaken oder eben nicht. Andererseits, so schlimm muss das nicht unbedingt sein - es kommt halt drauf an ...
Taxonomie könnte auch noch gehen
am 07.03.2010 - 12:38 Uhr
Da Calendar bereits Out-of-the-Box eine farbliche Markierung über Taxonomien erlaubt, könnte ich mir vorstellen, dass du auch damit was erreichen kannst. Ich habe jetzt nicht nachgeschaut, wie das genau abläuft, aber eine Idee bzw. Lösungsansatz ist alle mal besser als nichts.
Gruss Roger
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen (1. Posting vom Thema) <==> das erleichtert das finden von Lösungen
So, mal kurz eine
am 09.03.2010 - 22:28 Uhr
So, mal kurz eine Statusmeldung meinerseits:
Ich habe hier (klick mich) den folgenden Code gefunden:
<div class="view-item view-item-<?php print $view->name ?>">
<?php
$class = 'calendar monthview type-' . $node->type;
if (module_load_include('inc', 'pathauto') !== FALSE) {
$full_node = node_load(array('nid'=>$node->nid));
foreach ($full_node->taxonomy as $term) {
$class .= ' taxonomy-' . drupal_strtolower(pathauto_cleanstring($term->name));
}
}
?>
<div class="<?php print $class?>" id="<?php print $node->date_id ?>">
<?php print theme('calendar_stripe_stripe', $node); ?>
<?php foreach ($fields as $field): ?>
<div id="<?php print $field['id']; ?>" class="view-field view-data-<?php print $field['id'] ?>">
<?php if ($field['label']): ?>
<div class="view-label-<?php print $field['id'] ?>"><?php print $field['label'] ?></div>
<?php endif; ?>
<?php print $field['data']; ?>
</div>
<?php endforeach; ?>
</div>
</div>
Da ich allerdings nicht mit den Taxonomy-Terms arbeiten wollte, sondern mit einem Feld namens "field_checkmeldung", habe ich das ganze mal folgendermaßen geändert:
<div class="view-item view-item-<?php print $view->name ?>">
<?php
$full_node = node_load(array('nid'=>$node->nid));
if ($full_node->field_checkmeldung[0]['value'] == 'aktivieren')
{
$class = 'termin_meldung';
}
else
{
$class = 'termin_normal';
}
?>
<div class="<?php print $class?>" id="<?php print $node->date_id ?>">
<?php print theme('calendar_stripe_stripe', $node); ?>
<?php foreach ($fields as $field): ?>
<div id="<?php print $field['id']; ?>" class="view-field view-data-<?php print $field['id'] ?>">
<?php if ($field['label']): ?>
<div class="view-label-<?php print $field['id'] ?>"><?php print $field['label'] ?></div>
<?php endif; ?>
<?php print $field['data']; ?>
</div>
<?php endforeach; ?>
</div>
</div>
Das ganze habe ich in die calendar-month-node.tpl.php kopiert (und das alte damit ersetzt) und habe diese Datei dann in mein Theme-Verzeichnis verschoben.
Mmmh, soweit, so gut, wenn ich jetzt den Kalender aufrufe und mir den Quelltext ansehe, dann finde ich dort auch richtiger Weise 2 mal "termin_normal" und einmal "termin_meldung" vor. Diese Klassen stehen auch bei den richtigen Terminen.
Aber erstens habe jetzt ein Darstellungsproblem... Vorher sah das ganze so aus:
Vorher
Und jetzt sieht es so aus:
Nachher
Aber das eigentliche Problem ist, dass ich das ganze ja über die Klassen "termin_normal" und "termin_wichtig" stylen wollte und das klappt nicht. Meine CSS-Kentnisse sind leider noch nicht ganz so ausgefeilt, vielleicht mache ich etwas falsch?! Ich habe folgenden Code in die calendar.css eingefügt (ziemlich weit oben, hinter den zweiten Eintrag) und diese dann in den Modul-Ordner von Calendar geladen:
.termin_meldung {
background-color:#e7ffcf;
}
Leider passiert da überhaupt nichts =( Habt ihr da Tipps für mich, was ich bei diesem Lösungsansatz falsch mache? Stimmt was beim CSS nicht oder schon wo anders? Würde mich über eure Hilfe sehr freuen =)
mfg Exterior
Es kann sein, dass die
am 09.03.2010 - 23:01 Uhr
Es kann sein, dass die CSS-Definition weiter unten durch eine andere Klasse wieder überschrieben wird. Es gilt jeweils die spezifischere oder bei gleichwertigen überschreibt die spätere die frühere. Ich kann Dir hier leider nur den Tipp geben, nochmal per Firebug zu schauen, welche Klasse ggf. noch beteiligt ist.
Also ich habe das ganze jetzt
am 10.03.2010 - 01:52 Uhr
Also ich habe das ganze jetzt noch ein wenig geändert, sieht jetzt so aus:
<?php
$full_node = node_load(array('nid'=>$node->nid));
if ($full_node->field_checkmeldung[0]['value'] == 'aktivieren')
{
$class = 'event_type_termin_meldung';
}
else
{
$class = 'event_type_termin_normal';
}
?>
<div class="view-item view-item-<?php print $view->name ?>">
<div class="calendar monthview" id="<?php print $node->date_id ?>">
<?php print theme('calendar_stripe_stripe', $node); ?>
<div class="<?php print $class; ?>">
<?php foreach ($fields as $field): ?>
<div id="<?php print $field['id']; ?>" class="view-field view-data-<?php print $field['id'] ?>">
<?php if ($field['label']): ?>
<div class="view-label-<?php print $field['id'] ?>"><?php print $field['label'] ?></div>
<?php endif; ?>
<?php print $field['data']; ?>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
Und in die calendar.css habe ich noch folgendes eingefügt:
.event_type_termin_meldung {
background-color:#ffa07a !important;
}
.event_type_termin_normal {
background-color:#e7ffcf !important;
}
(Wenn ich das !important nicht setze, wird der Hintergrund grau...)
Außerdem habe ich in der calendar.css noch ab Zeile 344 folgendes geändert:
.calendar-calendar td .inner div.calendar div,
.calendar-calendar td .inner div.calendar div a {
border:none;
background:inherit;
padding:0 2px;
}
Ich habe dort die Hintergrundfarbe durch "background:inherit;" ersetzt, weil sonst zwar der Hintergrund die Farbe ändert, aber die Items (Datum und Titel) behalten ihre gesetzte Farbe. Dann hätte ich nur zwei farbige Balken links und rechts. Daher lasse ich dort die Farbe erben.
Das Ende vom Lied: es hat im Grunde so geklappt, wie ich mir das gedacht habe und sieht jetzt (vorerst) so aus:
So sieht's aus
Aber dabei ist ein neues Problem aufgetaucht, welches man auf dem Bild auch schon sehen kann:
Ich verwende das Modul DatePopup, das heißt, man klickt im Kalender auf einen Node und es öffnet sich ein Popup, in dem man den Node nachlesen kann.
Aber seit meiner Änderung in der calendar-month-node.tpl.php ist dieses Popup leer =( ich habe mal mit Firebug nachgeschaut: Wenn ich in einem funktionierenden Kalender auf einen Node klicke und das Popup erscheint, erscheint im Firebug ganz unten ein neuer Div mnit der ID "calpopup". Darin ist ein weiterer Div mit der ID "calpopup-body" und darin verschachtelt wird in weiteren Divs der Inhalt des Nodes ausgegeben.
Nachdem ich die calendar-month-node.tpl.php geändert habe, erscheint der Div "calpopup" zwar noch, aber der Div "calpopup-body" ist komplett leer, keine weiteren Divs, kein Inhalt =(
Die calendar-month-node.tpl.php unterscheidet sich ja eigentlich nur durch diese Zeile:
<div class="<?php print $class?>">
(Und durch die PHP-Anweisung, um $class zu bestimmen)
Hat also irgendjemand eine Ahnung, warum das Popup auf einmal leer ist?
Ich würde das Modul nur ungern deaktivieren =( Helft mir bitte =(
Hat keiner eine Ahnung, woran
am 10.03.2010 - 20:08 Uhr
Hat keiner eine Ahnung, woran das liegen könnte? =(
Nur mal ganz vage gemutmaßt,
am 10.03.2010 - 20:38 Uhr
Nur mal ganz vage gemutmaßt, ohne dass ich in Deinen Code oder den Code der beteiligten Module tiefer eingestiegen wäre:
Diese Popup-Dinger sind ja Jquery bzw. Javascript und setzen daher auf irgendwelchen CSS-IDs bzw. -Klassen der zugrunde liegenden Seite auf. Könnte es sein, dass durch die Änderung die vom DatePopup benötigten Klassen/IDs nicht mehr da sind?
Entfernt habe ich ja nichts,
am 10.03.2010 - 21:10 Uhr
Entfernt habe ich ja nichts, lediglich einen weiteren Div drumrum gebaut.
Also, ich habe etwas
am 11.03.2010 - 15:34 Uhr
Also, ich habe etwas herausgefunden, nämlich, dass das Problem im Modul jcalendar (welches mit im Ordner von Calendar liegt) steckt.
Um genau zu sein in diesem Bereich in der jcalendar.module:
<?phpfunction get_calendar_node($nid, $id) {
$GLOBALS['devel_shutdown'] = FALSE;
if (is_numeric($nid)) {
if ($node = node_load($nid)) {
if (node_access("view", $node)) {
$node->date_id = $id;
$node->date_repeat_show = FALSE;
print theme('jcalendar_view', $node);
}
}
}}?>
Wenn ich dort $nid mit einer Zahl bzw. einer existenten Node-ID belege, dann funktioniert's und ich bekomme Inhalt angezeigt (dann eben immer den Inhalt der hardcodet ID).
Also kann das Modul an dieser Stelle die Node-ID nicht korrekt ermitteln und übergeben.
Die Node-ID wird (soweit ich das erkennen konnte) in der jcalendar.js ab Zeile 47 ermittelt:
// Get NodeID and ItemID
var ids = $(this).parent().parent().attr('id');
var arr = ids.split(":");
var nid = arr[1];
var id = arr[4];
Leider kann ich damit noch nicht besonders viel anfangen =( Weiß jemand, was man da ändern müsste, damit es wieder klappt?
Edit:
Hab's hinbekommen. Habe in der Zeile
var ids = $(this).parent().parent().attr('id');
noch ein .parent() eingefügt und "var id = arr[4];" in "var id = arr[5];" geändert. Und schon klappt's =)
Habe jetzt also einen Kalender mit unterschiedlichen Hintergrundfarben und das Kalender-PopUp funktioniert noch (Außerdem habe ich bei der Gelegenheit das Popup größer gemacht, war mir zu klein ^^)
Alles wunderbar =)
Vielen Dank für eure Denk-Anstöße =)