Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Anfängerfragen ›

Problem beim Schreiben einer eigenen Templatedatei

Eingetragen von AndréLebrun (5)
am 29.03.2018 - 13:40 Uhr in
  • Anfängerfragen
  • Drupal 7.x

Ich habe bartik als Haupttheme gesetzt und bin gerade dabei, css und templating zu lernen. Ich habe gesehen, dass es eine Datei /var/www/html/themes/bartik/template.php gibt, und nun ist mir folgendes Ziel vorgeschwebt. Ich wollte nun für node3 ein eigenes css wie folgt erstellen:

<?php

/**
* Add body classes if certain regions have content.
*/
function bartik_preprocess_html(&$variables) {
  if (!empty(
$variables['page']['featured'])) {
   
$variables['classes_array'][] = 'featured';
  }

  if (!empty(
$variables['page']['triptych_first'])
    || !empty(
$variables['page']['triptych_middle'])
    || !empty(
$variables['page']['triptych_last'])) {
   
$variables['classes_array'][] = 'triptych';
  }

  if (!empty(
$variables['page']['footer_firstcolumn'])
    || !empty(
$variables['page']['footer_secondcolumn'])
    || !empty(
$variables['page']['footer_thirdcolumn'])
    || !empty(
$variables['page']['footer_fourthcolumn'])) {
   
$variables['classes_array'][] = 'footer-columns';
  }


 
drupal_add_css(path_to_theme() . '/css/ie.css', array('group' => CSS_THEME, 'browsers' => array('IE' => 'lte IE 7', '!IE' => FALSE), 'preprocess' => FALSE));
 
drupal_add_css(path_to_theme() . '/css/ie6.css', array('group' => CSS_THEME, 'browsers' => array('IE' => 'IE 6', '!IE' => FALSE), 'preprocess' => FALSE));

// Hier wollte ich auf meinen node zugreifen sowie auf meine css...
if ($variables['node']->nid == 3) {
   
drupal_add_css(path_to_theme() . '/css/node3.css');
  }

}

?>

Das Problem ist, dass sich, wenn ich den node3 ansteuere nichts von den Effekten meines "custom" css bemerkbar macht, dafür bekomme ich aber folgenden Fehler:

    Notice: Undefined index: node in bartik_preprocess_html() (line 29 of /var/www/html/themes/bartik/template.php).
    Notice: Trying to get property of non-object in bartik_preprocess_html() (line 29 of /var/www/html/themes/bartik/template.php).

Wie soll ich auf die node-id zugreifen, wenn nicht mit dem -> Operator?

‹ [gelöst] node/1 target _ Blank - Dumme Frage [GELÖST] Hilfe nach Update von 7.23 -> 7.24 :: Private files directory - > Not fully protected ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Zunächst versuche dich in

Eingetragen von Zman (185)
am 29.03.2018 - 13:51 Uhr

Zunächst versuche dich in Subthemes einzulesen. Änderungen wie deine ändern die Core-Dateien, die bei einem Update von Drupal überschrieben werden würden. Du kannst jedoch ein eigenes Subtheme definieren, das als Basis ein beliebiges anderes, in deinem Fall Bartik nutzt.

Die Ursache deiner Fehlermeldung besteht darin, dass die preprocess_html() Funktion für jede Seite aufgerufen wird. Nicht auf jeder Seite wird $variables['node'] zur Verfügung stehen, da nicht jede Seite ein Node representiert. Hier musst du etwas vorsichtiger agieren.

Was du in der preprocess_html() beispielsweise machen kannst wäre folgendes

<?php
if ($node = menu_get_object()) {
  if (
$node->nid == 3) {
   
drupal_add_css(path_to_theme() . '/css/node3.css');
  }
}
?>

Hierbei wird versucht das Node der gerade geöffneten Seite zu laden (aus dem Cache, wenn schon einmal abgefragt). Wenn es vorhanden ist prüfst du noch auf die entsprechende nid und fügst die CSS hinzu.

Du kannst jedoch auch statt mytheme_preprocess_html(&$variables) die Funktion mytheme_preprocess_node(&$variables) für das Theme implementieren. Diese wird nur für Nodes aufgerufen und das Objekt würde immer zur Verfügung stehen. Hier kommt es aber darauf an, ob du die CSS für jedes Einbinden des Nodes nutzen möchtest, z.B. auch Listenansichten oder nur für die einzelne Node-Seite.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich habe mich nun in

Eingetragen von AndréLebrun (5)
am 31.03.2018 - 13:59 Uhr

Ich habe mich nun in subtheming eingelesen, stehe bei einer Sache aber noch ein bisschen auf dem Schlauch. Ich habe unter sites/all/themes ein subtheme erstellt.
Ich habe in meinem subtheme einen css-Ordner angelegt, da ich den Colorpicker zum laufen bekommen wollte, und auch style.css habe ich überschrieben, hier der Beginnn der info-Datei:

name = mysubtheme
description = A flexible, recolorable theme with many regions.
base theme = bartik
package = Core
version = VERSION
core = 7.x

stylesheets[all][] = css/style.css
stylesheets[all][] = css/colors.css

Das funktioniert auch soweit. Ich habe überdies in der template.php-Datei meines subtheme alle Funktionen meines Basethemes überschrieben, die Datei beginnt wie folgt:

<?php

/**
* Add body classes if certain regions have content.
*/
function mysubtheme_preprocess_html(&$variables) {
  if (!empty(
$variables['page']['featured'])) {
   
$variables['classes_array'][] = 'featured';
  }

  if (!empty(
$variables['page']['triptych_first'])
    || !empty(
$variables['page']['triptych_middle'])
    || !empty(
$variables['page']['triptych_last'])) {
   
$variables['classes_array'][] = 'triptych';
  }

  if (!empty(
$variables['page']['footer_firstcolumn'])
    || !empty(
$variables['page']['footer_secondcolumn'])
    || !empty(
$variables['page']['footer_thirdcolumn'])
    || !empty(
$variables['page']['footer_fourthcolumn'])) {
   
$variables['classes_array'][] = 'footer-columns';
  }

 
// Add conditional stylesheets for IE
 
drupal_add_css(path_to_theme() . '/css/ie.css', array('group' => CSS_THEME, 'browsers' => array('IE' => 'lte IE 7', '!IE' => FALSE), 'preprocess' => FALSE));
 
drupal_add_css(path_to_theme() . '/css/ie6.css', array('group' => CSS_THEME, 'browsers' => array('IE' => 'IE 6', '!IE' => FALSE), 'preprocess' => FALSE));

if (
$node = menu_get_object()) {
  if (
$node->nid == 3) {
   
drupal_add_css(path_to_theme() . '/css/node3.css');
  }
}

}

?>

Ich habe content mit der Node id==3, das habe ich verifiziert. Ich habe in dem css-Ordner meines Subtheme eben die node3.css, mit welcher ich bezwecken wollte, dass eben der gesamte body mit einem Hintergrndbild hinterlegt wird, der Gesamtinhalt der Datei ist dieser:

body {
    background-image: url("./sites/all/themes/mysubthemepixxx/water.jpg");
    background-repeat: no-repeat;
}

Bin ich auf dem Holzweg oder wieso übernimmt er das nicht?

  • Anmelden oder Registrieren um Kommentare zu schreiben

if ($node =

Eingetragen von caw (2762)
am 01.04.2018 - 05:31 Uhr

if ($node = menu_get_object()) {
ist glaube ich falsch

  • Anmelden oder Registrieren um Kommentare zu schreiben

@caw:Es ist zwar seh

Eingetragen von qb (149)
am 10.04.2018 - 16:32 Uhr

@caw:
Es ist zwar sehr umstritten, ob man so etwas machen sollte, da es halt eine potentielle Fehlerquelle darstellt, die sehr schwer zu finden ist.
Aber syntaktisch und logisch ist es korrekt - Es wird ein Objekt abgeholt und gleichzeittig überprüft ob überhaupt ein gültiges Objekt oder NULL zurück geliefert wird.

@topic:
Ich würde Dir ja empfehlen dich erst mal systematisch in Drupal einzuarbeiten. Auf mich wirkt das hier so, als ob Du zunächst Drupal installiert hast und jetzt mal guckst wo Du den Code modifizieren kannst. Das ist eine Vorgehensweise wie man sie offt bei WP antriff. das führt bei Drupal aber garantiert in eine Sackgasse.

Wenn Du keine Bücher magst schau halt mal in die online Doku zu Drupal (aufgrund der TPL-Datein bist Du wohl mit D7 beschäftigt).
Hier wird das Template-System beschrieben: https://www.drupal.org/node/1089656

@und noch zur Frage:

body {
    background-image: url("./sites/all/themes/mysubthemepixxx/water.jpg");
    background-repeat: no-repeat;
}

Der Pfad zu dem Image ist relativ zum root. Dein CSS liegt aber mit Sicherheit nicht im root.

LG
Peter

  • Anmelden oder Registrieren um Kommentare zu schreiben

ein guter Anfang ist,

Eingetragen von ronald (3857)
am 10.04.2018 - 09:12 Uhr

du holst dir das Theme "ZEN", das hervorragend dokumentiert ist, machst eine Kopie davon, die du nach Drupalvorgaben individualisierst und nach eigenem Gutdünken umbenennst.
Daraus machst du dein eigenes Theme.

Da in ZEN alles sehr ausführlich dokumentiert ist, wirst du schnell erfolgreich werden und das Theming verstehen lernen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Vielen Dank für die Tipps,

Eingetragen von AndréLebrun (5)
am 10.04.2018 - 16:30 Uhr

Vielen Dank für die Tipps, sie haben mir sehr geholfen.

  • 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 Woche 1 Tag
  • Migrieren von D7 auf D8/ D10/ D11
    vor 1 Woche 2 Tagen
  • melde mich mal wieder, da ich
    vor 8 Wochen 6 Tagen
  • Hey danke
    vor 9 Wochen 5 Stunden
  • Update: jetzt gibt's ein
    vor 9 Wochen 23 Stunden
  • Hallo, im Prinzip habe ich
    vor 9 Wochen 5 Tagen
  • Da scheint die Terminologie
    vor 9 Wochen 5 Tagen
  • Kannst doch auch alles direkt
    vor 10 Wochen 2 Tagen
  • In der entsprechenden View
    vor 10 Wochen 2 Tagen
  • Dazu müsstest Du vermutlich
    vor 10 Wochen 2 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 29 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