Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Themes & Theming ›

Calendar, Theme, Stripe (Streifen)

Eingetragen von sewimoeller (27)
am 14.07.2010 - 16:09 Uhr in
  • Themes & Theming

Hallo zusammen,

bei mir klappts mit den Kalander-Streifen nicht: sie werden nicht (weiss) angezeigt, wobei in der HTML-Ausgabe steht
folgendes:
<div style="background-color:#e73b3b;color:#e73b3b" class="stripe" title="Key: Störungen">&nbsp;</div>

Wenn ich den HTML-Code in eine Datei speichere und im Browser aufrufe, stehen die Streifen in Farbe da. Eine Idee?

Und noch andere Frage gleich dazu: wie kann ich auf die Streifen-Farben zugreifen und sie verändern (in Abhängigkeit von bestimmten
Spalten in eigener Tabelle, also nicht in Abhängigkeit von Vokabular, Terms oder Inhaltstypen, die es schon standardmäßig gibt)? Ich habe
eine Theme-Funktion gefunden, die die Farben ausgibt: theme_calendar_stripe_stripe($node), liegt in calendar/theme/theme.inc - Datei
Ich würde gerne die Farben vor diesem Aufruf setzen ($node->stripe[$k]) ohne die Theme-Funktion zu überschreiben.
Weiss jemand, wie ich das aus einem eigenem Module machen kann? Welche hooks kann ich dazu nutzen?

Vielen Dank im Voraus,
sewimoeller

‹ Node Add - Formular themen [gelöst] Eigene Regionen erstellen - Wie? ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Wenn du HTML-Code zeigen

Eingetragen von Exterior (2903)
am 14.07.2010 - 17:01 Uhr

Wenn du HTML-Code zeigen willst, solltest du das ganze in Code-Tags setzen ;-)

Aber ich kann dir gerade nicht folgen. Was für Streifen? Was genau willst du machen? Hast du mal einen Screenshot?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Screenshots

Eingetragen von sewimoeller (27)
am 14.07.2010 - 17:32 Uhr

hi Exterior,

sorry für "falschen code", beim nächten Mal markiere ich es als Code. Hab versicht das zu ändern:
Zeile mit Code markiert und "Code"-Button im Editor geklickt. Aber es wurde alles gelb markiert... Muss ich noch
schauen, wie ich das mache.

Ich habe zwei Screenshots gemacht. Eine aus dem Portal und andere habe ich so gemacht:
Quellcode Anzeigen
nur den Quellcode speichern als eine html-Datei
und im Browser aufgerufen.
Da ist die Anzeige zwar durcheinander, aber diese rote Streifen hätte ich gerne in der anderer Ansicht.

Lg

AnhangGröße
calendar.jpg 41.04 KB
calendar_mit_streifen.jpg 37.93 KB
  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich habe bei mir diese

Eingetragen von Exterior (2903)
am 14.07.2010 - 18:22 Uhr

Ich habe bei mir diese Streifen gar nicht im Einsatz, sondern habe den Termin komplett eingefärbt, erschien mir übersichtlicher.
Kannst du dir ja mal anschauen: http://wasserwacht-verwaltung.de/termine

Ansonsten:
Warum genau willst du nicht die Theme-Funktion überschreiben?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi Exterior, Dein Kalender

Eingetragen von sewimoeller (27)
am 14.07.2010 - 20:02 Uhr

Hi Exterior,

Dein Kalender sieht echt toll aus! Ja, komplett einfärben sieht besser aus.

Wie hast du das gemacht? Eigene CSS-Klassen definiert ("calendar-own-title" bei dir) und eine Team-Funktion überschrieben oder ein Template benutzt?
Welches? Hängt bei dir die Farbe von Taxonomy-Terms ab?

Ich habe zwei Kalender-Sichten: eine basierend auf eigenem Event-Inhaltstyp (mit CCK erstellt) mit Taxonomy-Terms für die Unterscheidung nach Termintypen.
Eigentlich wie bei dir. Da würde ich auch komplett einfärben, wenn man die Farben nicht zu grell wählt.

Andere Kalender-Sicht zeigt nur Störungen und Blockzeiten an. Sie sind in den Tabellen in der DB gespeichert (nicht mit CCK erstellt). Die Farben stehen fest: für Störungen
knall-rot, für Blockzeiten knall-orange. Da wird es nicht gehen mit komplett einfärben. Für das Design bin ich nicht zuständig, also kann nicht entscheiden. Störungen und
Blockzeiten darf ich auch nicht verändern (nur anzeigen). Unterscheidung zwischen Störungen und Blockzeiten geschieht anhand einer Spalte in der Tabelle (0=störung, 1=blockzeit).
Deswegen muss ich irgendwo auf die Farbe Einflüss nehmen.

Daher würden mich beide Lösungen interessieren (komplett einfärben und evtl. Tipps für die Streifen).

Ich wollte diese Theme-Funktion nicht überschreiben, weil sie eigentlich genau das macht, was ich im Prinzip möchte: sie ist nur für die Anzeige der Farbe zuständig und
bekommt diese Farbe von außen irgendwo ($node als Parameter wird ihr übergeben und über $node greift sie auf die Farbe zu). Also wenn ich auf die Farbe Einflüss nehmen will,
dann wäre es gut irgendwo da draußen sie zu setzen. Nur wo? Oder meinst du doch in dieser Theme-Funktion? (ich meine natürlich in die, die sie überschreibt: fkt oder template)?

Weil eigentlich um die Farbe zu setzen muss ich Datenbankabfragen machen. Wenn man es streng sieht: Theme-System ist so was wie Frontend (für die Anzeige der Daten da) und
andere Funktionen sind Backend (um die Daten abzurufen, zu ändern...) dann ist das nicht wirklich gut, diese Funktionalität in die Theme-Funktion zu packen. Was meinst du?

Lg
Katja

  • Anmelden oder Registrieren um Kommentare zu schreiben

Also die komplette Einfärbung

Eingetragen von Exterior (2903)
am 14.07.2010 - 21:31 Uhr

Also die komplette Einfärbung ist eigentlich recht einfach:

Im Theme-Ordner des Calendar-Moduls findest du eine Datei namens calendar-month-node.tpl.php --> die kopierst du dir in den Ordner deines Themes (nicht direkt im Calendar-Modul ändern)

Diese Datei hat standardmäßig diesen Inhalt:

<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); ?>
    <?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 so geändert:

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

Ich habe also oben in einer Abfrage ein CCK-Feld geprüft und je nach Wert habe ich die Variable $class anders belegt.
Dann habe ich einen Div mit eben dieser Klasse um den Termin drum rum gebaut.

Die Klassen fügt man dann noch in die style.css des Themes ein und passt sie an. Mehr ist es eigentlich nicht.
Da du allerdings Streifen UND Einfärbung in unterschiedlichen Momenten verwenden willst, wäre es sinnvoll, die Ausgabe des Streifens nur dann zu machen, wenn man sie benötigt:

//Das hier:
<?php print theme('calendar_stripe_stripe', $node); ?>

//Machen wir zu sowas:
<?php
if ($full_node->type == 'Störungen-Typ')
  {
    print
theme('calendar_stripe_stripe', $node);
  }
?>

Damit wird der Streifen nur ausgegeben, wenn der Node vom Inhaltstyp für Störungen ist.

Ich weiß jetzt leider nicht, wie eure Tabelle für Störungen aufgebaut ist usw.

Die Stripes werden in calendar.module erstellt, da kannst du dich schonmal nicht einklinken.
Und es scheint, als würden die Farben dort in irgendeiner Form von den für Stripes vorgegebenen Farbwerten abhängen. Ich vermute also mal, dass du da nicht einfach so rein kommst (ich vermute es wie gesagt, kannst es dir ja selbst mal anschauen, calender.module ab Zeile 184).

Daher würde ich dennoch den Weg gehen, die Theme-Funktion zu überschreiben.

Also in die template.php deines Themes und dort könnte man zum Beispiel folgendes eintragen:

<?php
function theme-name_calendar_stripe_stripe($node) {
  if (empty(
$node->stripe) || (!count($node->stripe))) {
    return;
  }
 
$output = '';
  if(
is_array($node->stripe_label)){
    foreach(
$node->stripe_label as $k => $stripe_label){
      if(!empty(
$node->stripe[$k]) && !empty($stripe_label)) {

       
//hier führst du deine Abfrage durch
        //z.B.:
       
$sql = 'Select status from {meine_tabelle} WHERE ID = %d;';
       
$wert = db_result(db_query($sql, $node->nid));
        if (
$wert == 'Störung')
          {
           
$farbe = '#abcdef';           
          }
        else
          {
           
$farbe = '#fedcba';
          } 

       
$GLOBALS['calendar_stripes'][$stripe_label] = $farbe;
       
$output.= '<div style="background-color:'. $farbe .';color:'. $farbe .'" class="stripe" title="Key: '. $node->stripe_label[$k] .'">&nbsp;</div>'."\n";
      }
    }
  }
  return
$output;
}
?>

Das ist natürlich nur ein Beispiel. Du kannst genauso gut ein Modul schreiben und dort eine kleine Funktion implementieren, welche die SQL-Abfrage von oben ausführt und das entsprechende Argument bekommt. Dann entfällt in der theme-Funktion die ganze Abfrage und man kann dann "$farbe = meine_neue_funktion($node->nid);" machen, wäre vielleicht besser und das Modul wäre auch in 5 Minuten geschrieben.

Das wäre nur die Variante, die mir spontan einfällt, vielleicht findest du ja noch eine andere Möglichkeit, um die Streifen entsprechend einzufärben, die ich bisher übersehen habe :-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wow! Vielen Dank für den

Eingetragen von sewimoeller (27)
am 15.07.2010 - 11:36 Uhr

Wow! Vielen Dank für den Code!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
Weiter

Neue Kommentare

  • Inzwischen sind wir bei
    vor 1 Tag 21 Stunden
  • Migrieren von D7 auf D8/ D10/ D11
    vor 2 Tagen 13 Stunden
  • melde mich mal wieder, da ich
    vor 7 Wochen 6 Tagen
  • Hey danke
    vor 8 Wochen 11 Stunden
  • Update: jetzt gibt's ein
    vor 8 Wochen 1 Tag
  • Hallo, im Prinzip habe ich
    vor 8 Wochen 5 Tagen
  • Da scheint die Terminologie
    vor 8 Wochen 5 Tagen
  • Kannst doch auch alles direkt
    vor 9 Wochen 3 Tagen
  • In der entsprechenden View
    vor 9 Wochen 3 Tagen
  • Dazu müsstest Du vermutlich
    vor 9 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250235
Registrierte User: 20462

Neue User:

  • marouane.blel
  • capilclinic
  • Quabzibboter

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 18 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association