Calendar - Tagesansicht verändern
Eingetragen von Kreba (88)
am 03.11.2007 - 21:09 Uhr in
am 03.11.2007 - 21:09 Uhr in
Hallo,
ich habe das Calendar-Modul installiert. Ich lass einen Inhaltstyp über das Modul anzeigen, in den ich zusätzliche Felder eingefügt hab. In der Monatsansicht kann ich festlegen, welche Felder angezeigt werden sollen. Da lass ich nur den Titel und die Startzeit der Veranstaltung zu. In der Tagesansicht werden leider alle Felder angezeigt. Ich möchte aber auch da nur bestimmte Felder anzeigen lassen. Kann ich das irgendwo einstellen?
- Anmelden oder Registrieren um Kommentare zu schreiben
Nimm Dir mal das Calendar
am 03.11.2007 - 21:50 Uhr
Nimm Dir mal das Calendar Modul zur Brust.
In der Moduldatei calendar.theme:
<?php
/**
* Format a calendar view
*
* @param day
* The day to display.
*/
function theme_calendar_day($op, $header, $rows) {
if (strstr($header[0]['data'], '<table')) {
$output = $header[0]['data'];
$header = array();
}
$output .= theme("table", $header, $rows);
return '<div class="calendar-calendar"><div class="day-view">'. $output ."</div></div>\n";
}
/**
* Format an calendar node for display in an expanded calendar, like a calendar page
*
* @param node
* The node being displayed
*/
function theme_calendar_node_day($node) {
$output .= '<div class="calendar dayview">'."\n";
$output .= theme('calendar_stripe_stripe', $node);
$output .= '<h2 class="title">'. l($node->title, "$node->url", array('title' => t('view this item'))) .'</h2>'."\n";
$output .= '<div class="times">';
$output .= '<span class="start">'. $start_label . $node->start_format .'</span>'."\n";
if ($node->calendar_start != $node->calendar_end && $node->calendar_end) {
$output .= '<span class="end"> - '. $end_label . $node->end_format .'</span>'."\n";
}
$output .= '</div>';
if ($node->teaser) {
$output .= '<div class="content">'. ($node->teaser) ."</div>\n";
}
$output .= '<div class="links">'. theme('links', $node->calendar_links) ."\n</div>";
$output .= "</div>\n";
return $output;
}
?>
ist der Ansatzpunkt. Nun ist die Frage welche Felder "abgeschalten" werden sollen. Vermutlich braucht man noch ne andere theme Funktion.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Ich habe die Ausgabe auf
am 03.11.2007 - 22:10 Uhr
Ich habe die Ausgabe auf diese Zeile eingegrenzt:
$output .= '<div class="content">'. check_markup($node->teaser) ."</div>\n";
wohin aber check_markup($node->teaser) verweist habe ich noch nicht raus.
node_view($node, TRUE, FALSE);
am 03.11.2007 - 22:38 Uhr
OK, gleich in der ersten Funktion wird $node->teaser festgelegt
function theme_calendar_calendar_node($node, $type) {
// Display the regular teaser view for local events.
if (!$node->remote && $type == 'calendar_node_day') {
$node = node_load($node->nid);
$node->teaser = node_view($node, TRUE, FALSE);
$node->title = '';
}
// For other views, construct a teaser out of the provided fields.
else {...
in der Zeile $node->teaser = node_view($node, TRUE, FALSE); wird eine Funktion aufgerufen, die leider nicht in der Datei calendar.theme enthalten ist. Die Suche kann also weiter gehen ;)
Zitat: in der Zeile
am 04.11.2007 - 00:23 Uhr
in der Zeile $node->teaser = node_view($node, TRUE, FALSE); wird eine Funktion aufgerufen, die leider nicht in der Datei calendar.theme enthalten ist. Die Suche kann also weiter gehen
Guckst Du:
http://api.drupal.org/api/function/node_view/5
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Zitat: wohin aber
am 04.11.2007 - 00:25 Uhr
wohin aber check_markup($node->teaser) verweist habe ich noch nicht raus.
Guckst Du:
http://api.drupal.org/api/function/check_markup/5
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Das heißt dann aber jetzt
am 04.11.2007 - 09:19 Uhr
Das heißt dann aber jetzt für mich, dass ich mir in der Funktion theme_calendar_calendar_node($node, $type) eine eigene Routine schreiben muss, die mir die Ausgabe so wie ich sie will zusammenstellt. Da sich die Funktion bisher bei anderen Modulen bedient, die ich nicht verändern möchte, da ich nicht weiß was dann wo anders passiert. Oder gibt es jetzt mit der Erkenntnis, dass sich das Calendar-Modul bei den anderen Modulen bedient doch noch eine Möglichkeit über Einstellungen etwas zu verändern?
Deine Fruehstuecksbroetchen
am 04.11.2007 - 09:52 Uhr
Deine Fruehstuecksbroetchen kannst Du doch auch kaufen wo Du willst. Oder Du taust welche aus dem Frost auf.
So ist es auch bei der/einer theme Funktion. Wenn diese an einer Stelle eine bestimmte Funtionalitaet mittels einer anderen Funktion aus einem anderen Modul realisiert dann kannst Du das in Deinem selbst erstellten Template veraendern.
Du kannst diesen Aufruf anderer Module so aendern wie Du moechtest. Kannst dabei auch auf das Ansprechen anderer Module voellig verzichten und eigenen PHP-Code implementieren wie Du willst.
Damit Du nun nicht eigene PHP-Funktionalitaeten entwickeln musst bietet es sich aber an, auf Drupal zurueckzugreifen. Man muss ja das Fahrad kein zweites Mal erfinden. Oft sind Funktionalitaeten zur Realisierung bestimmter Dinge, in anderen Modulen eben, schon vorhanden.
http://api.drupal.org
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
quiptime wrote: Damit Du
am 04.11.2007 - 10:35 Uhr
Damit Du nun nicht eigene PHP-Funktionalitaeten entwickeln musst bietet es sich aber an, auf Drupal zurueckzugreifen. Man muss ja das Fahrad kein zweites Mal erfinden. Oft sind Funktionalitaeten zur Realisierung bestimmter Dinge, in anderen Modulen eben, schon vorhanden.
Genau deshalb frag ich hier doch, weil ich diese andere Module bzw. Möglichkeiten noch nicht kenne.
ich habe das Problem jetzt
am 06.11.2007 - 12:55 Uhr
ich habe das Problem jetzt für mich in der Weise gelöst, indem ich jetzt die dev-Version des Calendar-Modules verwende. ich habe immer noch keinen Weg gefunden, wie ich aus der Template-Datei heraus den Inhalt der Tagesansicht bestimmen kann bzw. wie ich einzelne Felder meines Nodes, das ich anzeigen will anspreche. So wie es mit der dev-Version angezeigt wird ist aber akzeptabel und damit auch OK.
Zitat: wie ich aus der
am 06.11.2007 - 13:03 Uhr
wie ich aus der Template-Datei heraus den Inhalt der Tagesansicht bestimmen kann bzw. wie ich einzelne Felder meines Nodes, das ich anzeigen will anspreche
Was soll denn in der Tagesansich nicht angezeigt werden?
Poste bitte den Link der Tagesansicht.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
der Link ist
am 06.11.2007 - 13:12 Uhr
der Link ist http://aktiv.jh-skunk.de/calendar/2007/11/8
Mir würde der Titel, die Uhrzeit des aktuellen Termins so wie in der Monatsansicht, der Veranstaltungsort und der Anrisstext reichen.
Die weiteren Termine, das Datum und der Link sind überflüssig.
mein ursprüngliches Problem war aber, dass die Anzeige bei der ursprünglichen Calendar-Version nicht Formatiert war. Da sah es so aus:
Datum: 25.10.2007 - 19:0008.11.2007 - 19:0029.11.2007 - 19:0013.12.2007 - 19:00Veranstaltungsort: Jugendhaus Hochdorf SKUNK
Der Hardrock-Cafe-Abend im Jugendhaus. Marcel Ruppert legt zweimal im Monat, immer am zweiten und am letzten Donnerstag von 19 bis 21 Uhr Rockmusik auf. Es soll ein Querschnitt durch die Vielfalt der Rockmusik laufen. Von Hard and Heavy bis zur Rockballade. Tendenz eher etwas härter. Freunde der Rockmusik sind eingeladen an diesen Abenden ins Jugendhaus zu kommen - Hip-Hop läuft wann anders - versprochen! :-)
Link zur Veranstaltung:
hier klicken
Und das hat mir, denk ich mal, zurecht nicht gefallen. Deshalb hatte ich einen Weg gesucht, die felder, die ich nicht wollte rauszufiltern. So wie es jetzt mit der dev-Version angezeigt wird, ist aber auch OK.
Ok, ich glaube Du machst es
am 06.11.2007 - 13:42 Uhr
Ok, ich glaube Du machst es Dir schwerer als es ist.
Die Loesung Deines Problemes wurde hier bereits gepostet.
Wenn Du in einem Template irgendwelche Funktionen aufrufst um im Template etwas bestimmtes auszugeben, dann wird durch diesen Aufruf an keiner anderen Stelle etwas veraendert. Siehe Deine Post's:
Ich habe die Ausgabe auf diese Zeile eingegrenzt:
$output .= '
\n";
wohin aber check_markup($node->teaser) verweist habe ich noch nicht raus.
und
OK, gleich in der ersten Funktion wird $node->teaser festgelegt
function theme_calendar_calendar_node($node, $type) {
// Display the regular teaser view for local events.
if (!$node->remote && $type == 'calendar_node_day') {
$node = node_load($node->nid);
$node->teaser = node_view($node, TRUE, FALSE);
$node->title = '';
}
// For other views, construct a teaser out of the provided fields.
else {...
in der Zeile $node->teaser = node_view($node, TRUE, FALSE); wird eine Funktion aufgerufen, die leider nicht in der Datei calendar.theme enthalten ist. Die Suche kann also weiter gehen ;)
Mir scheint, Du hast mit die Logik der Templateverwendung noch nicht ganz verstanden.
Wenn der Code der function theme_calendar_node_day($node) den Inhalt der Tagesansich ausgibt dann ist das auch der Ausgangspunkt fuer den Inhalt der Template-Datei "calendar_node_day.tpl.php".
Wenn Du nun bei diesem Code in der Template-Datei bestimmte Teile weglaesst und damit bestimmte Teile nicht ausgegeben werden ist das ok. Im Template ist es egal, welche Drupaleigenen Funktionen aufgerufen werden. Der Aufruf dieser Funktionen im Template-Code entspricht dem Sinn der Anwendung dieser Funktionen - dazu sind diese Funktionen ja auch da.
Einzig etwas "knifflig" ist beim Falle sich wiederholender Termine die Beschraenkung des Datums nur auf das aktuelle Datum. Hier kann man keine Funktion aufrufen um die Anzeige mehrerer Termine auf nur einen Termin zu beschraenken. Um dies zu erreichen muss man mit eigener Programmlogik (PHP programmieren) aus allen Terminen den Termin des aktuellen Datums herausloesen.
Anders wird es nicht gehen. Ich weiss nicht was Du erwartet hast bzw. Du glaubst das es funktionieren soll. Templates erstellen heisst eben oft selbst programmieren. Das ist eines der Prinzipien von Drupal.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
quiptime wrote: Wenn der
am 06.11.2007 - 14:23 Uhr
Wenn der Code der function theme_calendar_node_day($node) den Inhalt der Tagesansich ausgibt dann ist das auch der Ausgangspunkt fuer den Inhalt der Template-Datei "calendar_node_day.tpl.php".
Wenn Du nun bei diesem Code in der Template-Datei bestimmte Teile weglaesst und damit bestimmte Teile nicht ausgegeben werden ist das ok. Im Template ist es egal, welche Drupaleigenen Funktionen aufgerufen werden. Der Aufruf dieser Funktionen im Template-Code entspricht dem Sinn der Anwendung dieser Funktionen - dazu sind diese Funktionen ja auch da.
ich habe schon versucht über div. Funktionen die ich gefunden hab den Inhalt zu verändern. Ich habe eben immer noch nicht die Richte Funktion gefunden. Ich hab nach einer Funktion gesucht, der ich sagen kann, gib mir den Inhalt von dem Feld X im Node Y.
Einzig etwas "knifflig" ist beim Falle sich wiederholender Termine die Beschraenkung des Datums nur auf das aktuelle Datum. Hier kann man keine Funktion aufrufen um die Anzeige mehrerer Termine auf nur einen Termin zu beschraenken. Um dies zu erreichen muss man mit eigener Programmlogik (PHP programmieren) aus allen Terminen den Termin des aktuellen Datums herausloesen.
Was ich dabei nicht verstehe ist, warum das bei der Monatsansicht klappt. Da wird nur die jeweils richtige Uhrzeit angezeigt und nur die Uhrzeit. Ich hab mir den Quelltext angeschaut, bin aber noch nicht schlau daraus geworden.
Anders wird es nicht gehen. Ich weiss nicht was Du erwartet hast bzw. Du glaubst das es funktionieren soll. Templates erstellen heisst eben oft selbst programmieren. Das ist eines der Prinzipien von Drupal.
Ich erwarte nichts anderes. Klar will und werde ich noch selber programmieren. Aber zunächst muss ich doch die Anknüpfpunkte finden. Wie spreche ich welches Feld in einem Node an. Wenn ich das weis, dann ist der Rest kein Problem mehr. Bisher habe ich aber nur eine Funktion gefunden, die mir einen ganzen Node liefert.
Aber wie gesagt, es ist gerade nicht mehr meine Hauptbaustelle, da ich mit der jetzigen Lösung auch leben kann. Vielleicht löse ich es ja später mal wenn ich mehr durchblick habe und denke dann, ach wie einfach. Ich habe diesen Thread nur wieder aufgegriffen um anderen Hilfesuchenden mitzuteilen, dass es sich lohnen kann die dev-Version anzuschauen.
Natürlich, wenn ich noch einen Hinweis bekomme, der mir weiterhilft, dann freut mich das auch.