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

"state of the art"-drupal theme

Eingetragen von loomie (63)
am 02.07.2009 - 09:50 Uhr in
  • Themes & Theming
  • Drupal 6.x

huhu,

mich würde mal interessieren, wie andere Leute, sagen wir mal erfahrene Leute drupal Themes machen. Ich meine jetzt nicht dieses Grund-Setup des Zen-Themes, sondern, im Detail. Wie sieht ein gut gemachter View oder node aus? was man mit cck nicht einfach zusammen draggen kann.

ich bin einfach nicht sicher, ob meine Arbeitsweise optimal oder überhaupt orthodox ist

‹ [Gelöst] Kein Admin Zugang mehr bei eigenem Admin-Theme Nur Blöche rechts themen ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Theme erstellen

Eingetragen von stBorchert (6003)
am 02.07.2009 - 11:00 Uhr

Moin.
Ich kann ja mal kurz meine Erfahrungen zusammenschreiben.
Zuerst mal kurz bemerkt: ich bin kein Designer, sondern würde mich hauptsächlich als Entwickler sehen. Da ich Drupal schon seit Längerem kenne und auch dafür entwickel, kenne ich auch die internen Strukturen und Abläufe ganz gut, was wiederum beim Umsetzen von Designs hilfreich ist.

Bei einem größeren Projekt hatten wir ein ziemlich festes Design vorgegeben. Dies bestand größtenteils aus Designvorlagen (kein HTML, nur Bilder).
Also habe ich mir erstmal anhand der vorgegeben Struktur überlegt, welche Regionen ich benötige. Als diese klar waren, konnte ich damit dann die .info des Themes erstellen.
Ausgehend von garland habe ich dann die page.tpl.php so angepasst, dass die Seite dann vom grundlegenden Aufbau schonmal wie gewünscht aussieht (inkl. CSS).
Jetzt kamen die Views und die eigentlichen Templates.
Ich bin ein Freund von klaren, einfachen Variablen in Templates. Standardmäßig werden in den Templates von Views (und auch in einigen Anderen) Inhalte in etwa so ausgegeben:

<?php print $fields['profile_field_firstname_value']->content; ?>

Gruselig.

Um dies für einen Themer freundlicher zu gestalten, habe ich dem View also eine preprocess Funktion spendiert, die das obige Konstrukt in eine einfache Variable packt.
Im Template sieht das dann jetzt also so aus:

<?php print $profile_firstname; ?>

Irgendwie angenehmer, oder?!
Das Schöne an den preprocess Funktionen ist auch, dass man hier gleich noch ein paar evtl. notwendige Berechnungen und Formatierungen vornehmen kann, so dass sich der Themer (also der, der die Templates erstellt) überhaupt nicht darum kümmern muss. Er hat seine einfachen Variablen und kann die ganz simpel ausgeben.

Bei Eingabeformularen (Node und Webform) bin ich dann übrigens genauso vorgegangen. Erst alle Daten mittels preprocess Funktion in einfache Variablen packen (und gegebenenfalls noch ein paar Felder anpassen -> z.B. '#size' angepasst oder das Label) und dann in einem eigenen Template ausgeben.

Ob das nun "gut" ist oder nicht, bleibt eigentlich jedem selbst überlassen. Ich bin damit bisher eigentlich ganz gut gefahren.
Und falls sich jemand in ein paar Monaten mal die Templates anschauen sollte, bekommt er möglicherweise nicht gleich einen Anfall wegen diverser seltsamer PHP-Konstrukte.

hth,

 Stefan

(PS: es sind übrigens 33 Templates für Views und insgesamt 34 preprocess Funktionen :-) )

--
sei nett zu Deinem Themer

  • Anmelden oder Registrieren um Kommentare zu schreiben

ich schreib einfach mal wie

Eingetragen von loomie (63)
am 02.07.2009 - 11:17 Uhr

ich schreib einfach mal wie bei mir ein beliebiges node-template normalerweise aussieht:

<?php
if($page == 0){
//für die Voransicht zb für views die ich nicht themen kann



} else
{
//für die Nodeansicht



}
?>

dann benutze ich prinzipiell

<?php



$this_node
=node_load($node->nid);




?>

dann später zb

<?php

echo '<h2>'.$this_node->title.'</h2>';
?>

ausserdem benutze ich immer check_markup. ich wüsste gar nicht wie man da drum herum kommt

<?php

echo     '<div class="node-teaser">';
echo       
check_markup($this_node->teaser);
echo   
'</div>';


?>

das ist alles etwas umständlich und unelegant. sicher geht das besser oder?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Du brauchst die $node nicht

Eingetragen von Tobias Bähr (4019)
am 02.07.2009 - 13:03 Uhr

Du brauchst die $node nicht laden, weil die dort schon vorhanden ist.

Schau Dir die Standard node.tpl.php unter /modules/node/node.tpl.php an, wenn du nicht genau weißt was rein muss oder nicht.

----------------------------------------

http://tobiasbaehr.de/
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Ein Forum ist kein Ersatz für das www (Google.de).

  • Anmelden oder Registrieren um Kommentare zu schreiben

also in der

Eingetragen von loomie (63)
am 02.07.2009 - 13:10 Uhr

also in der /modules/node/node.tpl.php steht nur

<?php print $content ?>

und in $content ist der gensammte Inhalt der node, ohne das ich die Inhalte in ihre einzelnen Bestandteile zerlegen könnte. :/

  • Anmelden oder Registrieren um Kommentare zu schreiben

$node

Eingetragen von stBorchert (6003)
am 02.07.2009 - 13:21 Uhr

Wozu verwendest Du denn <?php $this_node = node_load($node->nid); ?>?
Sämtliche Daten des Node sind bereits in der Variable $node enthalten.

Mit Deiner Version erzeugst Du nur unnötig Datenbankzugriffe und Serverlast (da Du das komplette Node-objekt noch ein weiteres Mal lädst).

 Stefan

--
sei nett zu Deinem Themer

  • Anmelden oder Registrieren um Kommentare zu schreiben

node.tpl.php

Eingetragen von stBorchert (6003)
am 02.07.2009 - 13:22 Uhr
loomie schrieb

also in der /modules/node/node.tpl.php steht nur ...

Wenn Du mal in den Kommentar im oberen Bereich der node.tpl.php schaust siehst Du sämtliche verfügbare Variablen. Unter Anderem auch $node.

hth,

 Stefan

--
sei nett zu Deinem Themer

  • Anmelden oder Registrieren um Kommentare zu schreiben

super, dieser threat hat

Eingetragen von loomie (63)
am 02.07.2009 - 13:26 Uhr

super, dieser threat hat sich schon gelohnt ;)

ich kann also an Stelle von

<?php

$this_node
=node_load($node->nid);

echo
'<h2>'.$this_node->title.'</h2>';
?>

einfach schreiben:

<?php

echo '<h2>'.$title.'</h2>';

?>

Danke

  • Anmelden oder Registrieren um Kommentare zu schreiben

loomie schrieb super,

Eingetragen von Alexander Langer (3416)
am 02.07.2009 - 13:55 Uhr
loomie schrieb

super, dieser threat hat sich schon gelohnt ;)

Ein Threat lohnt sich niemals, außer für Erpresser, Bankräuber, dergleichen Gesindel. Aber so ein Thread, der kann mitunter schon was... ;-)

--
mortendk: everytime you use contemplate... Thor is striking down from above with his mighty hammer - crushing and killing a kitten!

webseiter.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

ok, aber wo bekomme ich in

Eingetragen von loomie (63)
am 03.07.2009 - 09:33 Uhr

ok, aber wo bekomme ich in diesem Fall den body-text her?

in $node->body ist nochmal der gesammte Inhalt der node enthalten bzw. das was ich bei admin/content/node-type/page/display eingestellt hab.

was ist wenn ich ein ganz bestimmtes feld abgreifen will?

  • Anmelden oder Registrieren um Kommentare zu schreiben

z.B. $node->field_myfield[0][

Eingetragen von farbkonstrukt (19)
am 03.07.2009 - 09:46 Uhr

z.B.
$node->field_myfield[0]['mydata']

   <pre>
    <?php print_r($node); ?>
    </pre>
in der node.tpl.php hilft dir beim suchen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

an den Inhalt komme ich mit

Eingetragen von loomie (63)
am 03.07.2009 - 11:37 Uhr

an den Inhalt komme ich mit echo $node->content['body']['#value']; aber wie komme ich an den teaser?

Edit: vergesst es. ich habs gerade om der API gefunden.
<?php echo node_teaser($node->content['body']['#value']); ?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Re: $this_node = node_load($node->nid)

Eingetragen von traxer (1009)
am 03.07.2009 - 12:17 Uhr
stBorchert schrieb

Wozu verwendest Du denn <?php $this_node = node_load($node->nid); ?>? ... Mit Deiner Version erzeugst Du nur unnötig Datenbankzugriffe und Serverlast (da Du das komplette Node-objekt noch ein weiteres Mal lädst).

Der Node wird als statische Variable in der Funktion node_load gespeichert, so das ein zweites "Laden" normalerweise lediglich den Overhead für den Funktionsaufruf und den Zugriff auf die Variable erzeugt, nicht jedoch Overhead durch Datenbankabfragen.

Trotzdem sollte man es vermeiden, sich den Node erneut zu holen:

  1. Wenn nichts anderes angegeben ist, dann liefert node_load die aktuelle Revision des Nodes. Das muss aber nicht unbedingt die Revision sein, die der Benutzer sehen will.
  2. Veraltete Revisionen eines Nodes werden nicht als statische Variable vorgehalten, so daß tatsächlich Datenbankabfragen abgesetzt werden wenn diese ein zweites mal "geladen" werden.
  3. $node wurde bereits durch node_build_content verarbeitet. Das ist besonders wichtig weil
    • die direkte Ausgabe von Attributen des Nodes zu Sicherheitslücken führt. Erst durch node_build_content wird ein entsprechender Eintrag in $node->content angelegt, der dann mit drupal_render sicher ausgegeben werden kann,
    • ohne node_build_content wird hook_nodeapi($op = 'view') umgangen.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • 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?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 12 Stunden
  • Hey danke
    vor 2 Wochen 1 Tag
  • Update: jetzt gibt's ein
    vor 2 Wochen 2 Tagen
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 6 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 6 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 3 Tagen
  • In der entsprechenden View
    vor 3 Wochen 3 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 3 Tagen
  • gelöst
    vor 6 Wochen 9 Stunden
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 1 Tag

Statistik

Beiträge im Forum: 250233
Registrierte User: 20452

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» 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 19 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