Views und Blocks, grundlegende Fragen

am 23.09.2010 - 16:45 Uhr in
Hallo,
ich bin mit kleinen Änderungen bzw. Erweiterungen an einer Drupal-Website beauftragt worden. Mein Kenntnisstand bzgl Drupal ist niedrig. Ich kann mit (X)html, CSS, PHP oder MySql umgehen, habe bereits tpl-Dateien für Drupal erstellt, stehe aber regelmäßig vor einer Wand und werde nicht ganz schlau.
Was bereits geschah: Es gibt eine Blog-Seite, die die neuesten Blogeinträge (Titel und Anrisstext) anzeigt.Ich konnte eine TPL-Datei erstellen und dort dafür sorgen, dass zusätzlich Autor und Datum ausgegeben werden. Über die Einstellungen der Ansicht ist mir dies nicht gelungen, weil dort unter "Felder" lediglich "Das ausgewählte Design verwendet keine Felder." steht und ich daher nicht wusste, wie ich die Felder Autor und Datum hinzufügen sollte.
Nebenbemerkung: In der Administration, auf der Übersichtsseite der Ansichten, gibt es zwei Blog-Ansichten:
---------------------------------------------------------------
Normal Node-Ansicht: blog (Blog)
Titel: Neueste Blogeinträge
Pfad: blog
Block, Seite
---------------------------------------------------------------
Blog-Ansicht für Frontpage
Normal Node-Ansicht: blog_frontpage (Frontpage)
Titel: Neueste Blogeinträge
Pfad: blog-teaser
Seite
---------------------------------------------------------------
Ich vermute, dass die zweite gar nicht verwendet wird.
Auf der Übersichtsseite der Blöcke gab es einen deaktivierten Block "Neueste Blogeinträge". Den habe ich dann aktiviert, in die right_sidebar gelegt und so eingestellt, dass er nur auf der Blog-Seite sichtbar ist.
In der View "blog" habe ich für den Block definiert, dass er lediglich die Titel der neusten Blog-Einträge anzeigen soll. Den "Weiter"-Link habe ich deaktiviert und zum Testen eingestellt, dass nur 2 Einträge angezeigt werden sollen.
Der (bzw. irgendein Block) Block erscheint nun auch, aber mit Weiter-Link und mit mehr Einträgen. Es scheint also nicht der Block zu sein, dessen Einstellungen ich gerade geändert habe. Wenn ich den Titel der Ansicht ändere, so ändert sich der beim Block angezeigte Titel nicht.
Testweise habe ich auch das Datum des Blog-Eintrags als weiteres in der Blockansicht anzuzeigendes Feld definiert. Doch auch das wirkt sich nicht aus. Es scheint sich also um einen anderen Block zu handeln, und ich habe keine Ahnung, woher er kommt.
Nun frage ich mich erstens: Woher kommt dieser Block, wo ist er definiert? Wie kann ich so etwas heraus finden?
Oder andersherum: Wo ist die Block-Anzeige dieser Ansicht zu finden. Das, was ich dort auf der Block-Übersichtsseite als "Neueste Blogeinträge" gefunden und aktiviert habe, scheint es nicht zu sein, denn der Block sieht nicht so aus, wie ich es in der Ansicht definiert habe.
Caching ist in der Testumgebung deaktiviert, daran dürfte es also nicht liegen.
Ich bin für jeden Tipp und jeden Erkenntnisgewinn dankbar.
Viele Grüße,
Christian
- Anmelden oder Registrieren um Kommentare zu schreiben
Zitat: Nun frage ich mich
am 24.09.2010 - 08:38 Uhr
Nun frage ich mich erstens: Woher kommt dieser Block, wo ist er definiert? Wie kann ich so etwas heraus finden?
Blöcke können auf verschiedene Arten zustande kommen. Z.B. durch Module ("Neueste Blogeinträge"), Views-Ansichten, durch "Block hinzufügen" in der Verwaltung...
Einen Aufschluss gibt die
div id="xyz"
Bezeichnung im Quelltext.Oder andersherum: Wo ist die Block-Anzeige dieser Ansicht zu finden.
Normalerweise in der Verwaltung der Blöcke. Es gibt auch eine Vorschau innerhalb von Views für die einzelnen Ansichten. Daran kannst du sehen, wie dein Block später aussieht.
Es gibt eine Blog-Seite, die die neuesten Blogeinträge (Titel und Anrisstext) anzeigt.Ich konnte eine TPL-Datei erstellen und dort dafür sorgen, dass zusätzlich Autor und Datum ausgegeben werden.
Was ist das für eine .tpl? Wie heisst die?
Hallo, vielen Dank erst
am 24.09.2010 - 10:56 Uhr
Hallo,
vielen Dank erst einmal für die Antwort.
Die Id des Blocks ist "block-blog-0", daher vermute ich, dass der Block sehr wohl aus der Ansicht "blog" kommt. Die Live-Vorschau des Blocks in der Administration der Ansicht "blog" ist genau so, wie ich es dort im Moment eingestellt habe:
- Die Felder Titel und Datum werden angezeigt
- Es werden nur die zwei neuesten Beiträge angezeigt
- Es gibt keinen "Weiter"-Link
Auf der Blog-Seite selbst (/blog) erscheint aber etwas ganz anderes (aber eben mit der Id "block-blog-0"), daher vermute ich, dass dieser Block irgendwo anders herkommt.
Doch unter "/admin/build/block/list" gibt es nur einen Block "Neueste Blogeinträge", und den habe ich aktiviert und in die "right sidebar" gelegt. Das scheint aber nicht der Block zu sein, den ich in der Ansicht "blog" angelegt habe.
Die TPL-Datei ist nicht für eine Ansicht oder einen Block, sondern für Nodes (wie heißen Drupal-Nodes auf deutsch?) des Types "Blog". Der Dateiname lautet node-blog.tpl.php. Darin schreibe ich lediglich vor der Ausgabe von $content noch eine kleine div-Struktur, in der der Autor und das Datum ausgegeben werden:
[...]
<div class="meta">
<div class="author"><?php print "von <strong>".ucwords(implode(" ", explode(".", $node->name)))."</strong>"; ?></div>
<div class="date"><?php print "am ".date("d.m.Y", $node->created); ?></div>
</div>
<div class="content">
<?php
print $content;
?>
</div>
[...]
Unsere Benutzernamen sind nach dem Muster vorname.nachname aufgebaut, daher das implode-explode-Konstrukt für den Namen. Die divs bzw. deren Klassen benötige ich, um sie im CSS formatieren zu können.
Die TPL-Datei hat aber denke ich nichts mit dem Problem zu tun.
Zu den Screenshots:
- "Screen Ansichten.jpg" zeigt, dass es eine Ansicht "blog" mit dem Titel "Neueste Blogeinträge" gibt, und bei ihr wird angezeigt, dass sie eine Ansicht des Typs "Seite" und eine des Typs "Block" enthält. Die andere Ansicht "blog_frontpage" hat ebenfalls den Titel "Neueste Blogeinträge", aber nur eine Ansicht "Seite", von dort dürfte der Block also nicht kommen.
- "Screen Ansicht 'blog'.jpg" zeigt die Einstellungen der Block-Ansicht und dessen Live-Vorschau. Titel und Datum werden angezeigt, zwei Einträge, kein "Weiter"-Link
- "Screen Blog-Seite.jpg" zeigt die Seite "/blog" und ein wenig vom Firebug. Der BLock rechts enthält mehr als zwei Einträge, zeigt nur den Titel (nicht das atum) und zeigt zudem einen "Weiter"-Link. Das kann also eigentlich nicht der Block sein, denn ich eingestellt habe. Die Id wie man unten im Firebug sieht, ist "block-blog-0"
Nun könnte ich natürlich versuchen, auf für diesen Block eine TPL-Datei zu erstellen und den Html-Output komplett selbst zu schreiben, aber das kann ja nicht Sinn der Sache sein. Ich würde das ganze Drupal-System ja auch gerne besser verstehen und möchte daher gerne herausfinden, wie ich diesen Block, der da angezeigt wird, nun ändern kann.
Für jegliche weitere bin ich äußerst dankbar.
Viele Grüße,
Christian
Also zum grundsätzlichen
am 28.09.2010 - 09:47 Uhr
Also zum grundsätzlichen Vorgehen würde ich dir empfehlen eine Testumgebung mit einem frischen Drupal zu installieren und Stück für Stück zu forschen.
Dann kannst du nämlich sehen, dass durch die Aktivierung des Blog-Moduls keine Ansicht generiert wird - allerdings ein Block zur Verfügung steht mit der id "block-blog-0"
Importierst du eine deiner Ansichten und deaktivierst den Standard-Block... Was passiert dann? Gibt es einen Block und falls ja mit welcher id, usw...
So kannst du dich langsam an das ganze herantasten.
Hallo, und vielen dank für
am 28.09.2010 - 10:05 Uhr
Hallo,
und vielen dank für die Antwort. Unter Laborbedingungen ist das sicher eine vernünftige Vorgehensweise. Allerdings arbeite ich ja bereits mit dem, was unsere Testumgebung ist, und ich habe nicht die Möglichkeit, weitere Testumgebungen zu erstellen.
Andererseits macht dies - zumindest aus meiner Sicht - einen ganz klaren Mangel von Drupal klar. Denn ich kann mir keinen Grund vorstellen, warum das System im Admin-Bereich nicht bei jedem Block genau herleiten könnte, woher dieser Block kommt, ob aus einem Modul, einer Ansicht, etc.
Der Devel Themer kann das vielleicht, doch der will bei uns nicht laufen...
Ich werde weiter forschen.
Viele Grüße,
Christian
Nur mal so geraten ...
am 28.09.2010 - 10:24 Uhr
Hallo Christian,
eigentlich dürfte es damit nichts zu tun haben, aber .... eventuell ist es ein Problem, dass der Standardblock für den Blog und der Block, der durch Views erstellt wird, den gleichen Titel haben. Benenne den Views Block doch einfach anders und schaue dann nach, ob er angezeigt wird.
Bei mir ist es auch schon vorgekommen, dass ich in der Datenbank händisch alle Tabellen mit *cache* leeren mußte und dann noch einmal die Theme Registry geleert habe mit Admin Menu und den Cache des Browsers leeren mußte, damit die Änderungen alle übernommen wurden.
Einen Versuch ist sicherlich beides wert.
Ach so wenn es eine
am 28.09.2010 - 10:24 Uhr
Ach so wenn es eine Testumgebung ist dann kannst du ja mal den Block aus der Blöckeverwaltung deaktivieren...
Und vielleicht gibt es noch ein Missverständnis:
An der id "block-blog-0" kannst du normalerweise sehen, dass dieser Block vom Blog-Modul kommt.
Aus einer Ansicht hätte er eine id "block-views-xyz-block" oder ähnlich. Dann weisst du er kommt vom Views-Modul.
Legt ein User den Block in der Blöcke-Verwaltung an dann ist die id "block-block-1", usw...
Aber dein System ist ja nicht frisch...
Danke wiederum für die
am 28.09.2010 - 13:24 Uhr
Danke wiederum für die Antwort.
Ich verstehe nicht ganz, warum ich den Block deaktivieren sollte. Er war deaktiviert, als ich mit den Änderungen begann, und ich habe ihn dann aktiviert.
Der Block hat die Id "block-blog-0". Kann ich dessen Erscheinung dann überhaupt irgendwo ändern, oder ginge das generell nur über eine View.
Ich habe mittlerweile eine View angelegt, dort eine Block-Ansicht erstellt und diesen Block eingebunden. Der tut auch was er soll.
Den anderen Block habe ich deaktiviert. Ich finde es nur etwas redundant, diesen anderen Block (der mit der Id "block-blog-0" im Html-Code erschien und direkt vom Blog-Modul kommt) zwar im Angebot zu haben, ihn aber nicht nutzen zu können, weil ich seine Erscheinungsform nicht ändern kann. Aber vielleicht fehlt mir da entweder die Kenntnis, wie ich ihn anpassen kann, oder das nötige Abstraktionsvermögen um zu verstehen, warum das nicht möglich ist.
Wahrscheinlich ginge es mit einer TPL-Datei für diesen Block, sodass ich dessen Inhalt selbst nach meinen Wünschen aufbaue.
Aber es funktioniert nun mit der Block-View, und damit will ich zufrieden sein.
Viele Grüße,
Christain