[gelöst] Blocksichtbarkeit im Artikel auswählen.
am 19.05.2009 - 11:47 Uhr in
Ich habe mehrere Blöcke erstellt die nur auf bestimmten Seiten sichtbar sein sollen.
Wenn ich nun einen neuen Artikel erstelle, dann könnte ich natürlich jedesmal in die jeweilige Konfiguration des Blockes gehen und die Seite eintragen.
Schöner wäre es natürlich wenn ich schon bei der Erstellung eines Artikels eine tickbox hätte welche die Sichtbarkeit des Blockes regeln könnte.
So haben zum Beispiel alle Unterseiten eines Buches die gleichen Blöcke sichtbar, aber jedes Buch eben einen anderen Block.
Hat jemand einen Ansatz für mich wie ich das regeln könnte? Oder gibt es dafür gar ein Modul was dies regeln kann?
Mein theme basiert auf Garland. Kann ich das in irgendeiner *.tpl.php regeln und wenn ja mit welchen Variablen.
- Anmelden oder Registrieren um Kommentare zu schreiben
Regelung über Taxomy möglich?
am 19.05.2009 - 12:29 Uhr
Ich hab da noch eine Idee, weiß aber nicth ob sich das umsetzen lässt.
Kann man die Sichtbarkeit eines Blockes auch von Taxomy abhängig machen? Dann könnte ich ja eine eigene Taxomie für die Blöcke erstellen. Wird also ein Artikel mit Taxomy "Block1" aufgerufen, dann wird der Block1 auch angezeigt. Sonst nicht.
Allerdings ist mir nicht ganz klar was passiert wenn eine Seite mehrere Artikel enthält deren Taxomy sich widersprechen. Es ist halt nur so ein Ansatz für eine Idee.
Bordmittel verwenden.
am 19.05.2009 - 12:52 Uhr
Bordmittel verwenden.
Meine Idee geht davon aus das Drupal standardmaessig Bloecke nicht anzeigt wenn sie keinen Inhalt haben.
Wenn ein View einen Block generiert kann man diesem View als Filter ein Feld geben: Das Feld heisst beispielsweise "Block anzeigen"
Mit CCK erstellst Du ein Select-Feld: 1|Block anzeigen, 0|Block nicht anzeigen
Dieses Feld (in CCK) unter "Felder anzeigen" komplett sperren (Hidden) damit es nicht mit Nodeinhalten angezeigt wird!
Dieses Feld wird als zusaetzlicher Filter des View verwendet. Der Filter Operator:
"ist gleich mit" 1
steuert ob der Block Inhalt bekommt oder nicht.
Diesen Filter kann man in allen Block-Ansichten aller Views intergrieren.
Zusaetzlich kann man in der Sichtbarkeits-Steuerung der Blockanzeige (PHP Code) festlegen das ein Bloeck nur bei der Anzeige von Nodes angezeigt wird. Dies verhindert generell die Blockanzeige bei allen URL's die nicht dem Schema node/x entsprechen.
<?php
if (arg(2) == '' && arg(0) == 'node' && is_numeric(arg(1))) {
return TRUE;
}
?>
------------------------
Quiptime Group
Da geht noch was.
Danke, das ist ein schöner
am 19.05.2009 - 13:21 Uhr
Danke, das ist ein schöner Ansatz
ich habe mich jetzt mal ein
am 19.05.2009 - 14:17 Uhr
ich habe mich jetzt mal ein wenig daran versucht und bei Deinem Ansatz ist mir eines unklar. Wie bringe ich views dazu nur den derzeit angezeigten Artikel abzufragen?
Einen View zu erstellen der mir eine Liste von Artikel/Seiten ausgibt die den Block angezeigt bekommmen bekomm ich ja hin. Mir fehlt nur irgendwie die Verbindung zur aktuell angezeigten Seite.
Noch einmal kurz zur Verdeutlichung:
Artikel 1 --> Block A
Artikel 2 --> Block B
usw.
Im Artikel habe ich nun ein Feld erstellt über welches ich den Block auswählen kann. Über dieses Feld kann ich mir in View auch eine Liste erstellen lassen. Nur wie bringe ich jetzt den Block A und B dazu nachzuschauen ob der gerade aufgerufene Artikel auch in der Liste stehen also die dort aufgelistete Nid ?
Mein View liefert mir mit folgender Abfrage alle Nids welche den gewünschten Block anzeigen sollen.
SELECT node.nid AS nid
FROM drupal_node node
LEFT JOIN drupal_content_type_story node_data_field_logoauswahl ON node.vid = node_data_field_logoauswahl.vid
WHERE (node_data_field_logoauswahl.field_logoauswahl_value) = ('logo_startseite')
Mein PHP ist allerdings nicht gut genug um das in eine Form zu bringen die dem Block sagt, dass er nur angezeigt werden darf wenn die Nid des Artikels der dieser Abfrage entspricht.
View Argument fuer Block-Ansicht + Views 2 Bug
am 19.05.2009 - 14:45 Uhr
Du definierst im View ein Argument.
Argumente -> Node: Beitrags-ID
In der Argument Konfiguration:
Die auszuführende Aktion, wenn das Argument nicht vorhanden ist -> Leerer Text anzeigen
Das ist wichtig. Alles andere so lassen.
In der View Live- Vorschau kann man nun testen in dem man einer Block-Ansicht die ID einer existierenden Node mit dem zusaetzlichen Feld angibt.
PS
Ja ja, das mit dem Argument funktioniert auch bei einer View Block-Ansicht - obwohl ein Block im Gegensatz zu einer Seiten-Ansicht nichts mit einer URL zu tun hat.
PS 2
Eben einen Bug entdeckt in der aktuellen Views-Version.
Den Block-Ansichten fehlt die CSS Klasse "clear-block" in der DIV die den View Block umschliesst.
Dadurch wird das Layout untereinander stehender Bloecke zerstoert.
Sprich, ein View Block "schmeisst" den Block-Titel des nachfolgenden Block.
Beseitigen kann man dies selbst in dem man der CSS Klasse "view-block-display" die Eigenschaft
.view-block-display {
clear: both;
}
gibt.
------------------------
Quiptime Group
Da geht noch was.
Ich bin mal jetzt nach
am 19.05.2009 - 16:07 Uhr
Ich bin mal jetzt nach Deiner Anleitung vorgegangen.
In der Datenbank habe ich 2 nodes welche den Kriterien entsprechen. Das sind die Nid 17 und Nid 65. In der Vorschau bekomme ich wenn ich diese Argumente dem Block mitgebe das gewünschte Ergebnis. Der Block wird nur angezeigt wenn eine dieser beiden IDs mitgegeben wird oder und das ist das schlimme, wenn kein Argument mitgegeben wurde. Dann zeigt er mir 65 und 17 als Ergebnis.
Wenn ich aber diesen Block nun in die Seite einbaue, funktioniert das nicht. Der Block zeigt mir als Ergebnis 65 und 17 an egal auf welcher Seite ich bin. Genauso wie wenn ich in der Vorschau keine Argumente mitgebe.
Richtig lesen:
am 19.05.2009 - 16:41 Uhr
Richtig lesen:
In der Argument Konfiguration:
Die auszuführende Aktion, wenn das Argument nicht vorhanden ist -> Leerer Text anzeigen
Das ist wichtig. Alles andere so lassen.
Wenn Du das nicht machst passiert genau das was gerade Dein Problem ist.
------------------------
Quiptime Group
Da geht noch was.
genau das scheint ja das
am 19.05.2009 - 17:05 Uhr
genau das scheint ja das Problem zu sein. Irgendwie erfährt der Block nicht von dem Argument oder findet es nicht vor!
In der Vorschau mit übergebenen Argument im Views funktioniert alles einwandfrei nur wenn ich den Block in einen Bereich einfüge um ihn anzeigen zu lassen funktioniert es nicht.
Auf allen Seiten wird das gleiche Ergebnis angezeigt.
Es liegt auch nicht an meinem abgewandelten Garland theme. Wenn ich Garland als Original einstelle, dann geht es auch nicht, bzw habe ich das gleiche Ergebnis.
views_embed_view() - viele Wege führen nach Rom
am 19.05.2009 - 17:38 Uhr
Ich habe eben ein geaendertes Szenario fuer den Block in der Block-Admistration getestet. Es funktioniert.
Neuen Block erstellen. Keinen Blocktitel festlegen. Als Inhalt, auf PHP Code umschalten, folgendes eingeben:
<?php
print views_embed_view('Testblock', 'block_1', array(arg(1)));
?>
Nun noch im View den Titel fuer den Block bereitstellen.
In der View-Ansicht -> Kopfbereich -> Eingabeformat -> Full HTML
Als Inhalt:
<h2 class="title">Test Node-Block</h2>
Nun den neu erstellten Block in einer Sidebar aktivieren.
Edit
Warum der normal verwendete Views-Block nicht das macht was er soll (nichts anzeigen wenn Argument leer) weiss ich nicht. Erstaunlich ist, das die Live-Vorschau im View dies aber macht.
------------------------
Quiptime Group
Da geht noch was.
Auf diese Art und Weise
am 19.05.2009 - 18:06 Uhr
Auf diese Art und Weise klappt es!
Super, Du hast mir ein langes WE gerettet.
Sollte ich diese Argumente nun in den durch Views erstellten Block eintragen oder muss ich immer dieses Block in Block Gebilde nutzen?
Wenn ich wüßte wo ich ansetzen könnte würde ich den Entwicklern von Views ja mal ne Info zukommen lassen. Vielleicht ist es ja auch eine Wechselwirkung mit einem anderen Modul.
Ging es bei Dir auch nicht, oder war dies nur eine Erscheinung auf meiner Seite?
so viel ich weiß sollte das
am 19.05.2009 - 18:36 Uhr
so viel ich weiß sollte das auf jeden fall per argument validation code gehen, aber eigentlich auch so
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.de
SirFiChi ist auch dein Halbgott.
Wie? Was meinst Du mit dieser Frage?
am 19.05.2009 - 18:59 Uhr
Sollte ich diese Argumente nun in den durch Views erstellten Block eintragen oder muss ich immer dieses Block in Block Gebilde nutzen?
Wie? Was meinst Du mit dieser Frage?
------------------------
Quiptime Group
Da geht noch was.
Ich habe mir überlegt wenn
am 19.05.2009 - 20:38 Uhr
Ich habe mir überlegt wenn ich
<?php
print views_embed_view('Testblock', 'block_1', array(arg(1)));
?>
Bei dem Block der durch Views erstellt wird extra noch einmal unter Blockinhalt eintrage sollte doch auch dieser Block gehen. Aber ich hab grad gesehen, dass dort das Feld Blockinhalt fehlt.
<?phpprint
am 21.05.2009 - 14:09 Uhr
<?php
print views_embed_view('Testblock', 'block_1', array(arg(1)));
?>
Also:
<?php
print views_embed_view('Testblock', 'block_1', 'block_2' ,'block_3' array(arg(1)));
?>
nein, wenn dann musste
am 21.05.2009 - 15:00 Uhr
nein, wenn dann musste mehrmals
<?php
print views_embed_view('Testblock', 'block_1', array(arg(1)));
print views_embed_view('Testblock', 'block_2', array(arg(1)));
print views_embed_view('Testblock', 'block_3', array(arg(1)));
?>
Oder alternativ verwendest du mal Views attachments
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.de
SirFiChi ist auch dein Halbgott.
Danke für Deine Hilfe beim
am 21.05.2009 - 16:13 Uhr
Danke für Deine Hilfe beim Code. Hier lernt man wirklich ständig dazu!