Verweis auf Block im Node gesucht.
am 20.07.2009 - 23:56 Uhr in
Hallo,
meine beiden folgenden Fragen können die Admins auch gerne in den Anfäger-Bereich verschieben ;)
Auf meiner Startseite sollen zu einem Willkommenstext und einem Hintergrundbild 3 Produkte angezeigt werden.
Ich habe diese 3 Produkte als Inhaltstyp definiert.
Dann habe mir eine Ansicht erstellt, welche diese 3 Produkte als Block darstellen.
Diesen Block lasse ich mir auf meiner Startseite im Inhalt anzeigen (Das habe ich bei Blöcke verwalten so angelegt)
Nun meine Fragen:
Wo ist denn das nun auf der Startseite hinterlegt, dass hierzu auch der Block angezeigt wird?
Hintergrund ist folgender: Ich lese per node.get - Methode aus dem Service-Modul die Nodes aus. Das Ganze ist für eine Flash-Anwendung.
Aber leider kann ich nun im Node der Startseite nichts von diesem Block finden.... Wo ist denn auf der Seite der Verweis auf den Block definiert?
Wie komme ich von einem Node auf den Block, der mit dem Node angezeigt wird?
Hier mal meine Rückgabe von node.get:
stdClass Object
(
[nid] => 15
[type] => startseite_single
[language] => de
[uid] => 1
[status] => 1
[created] => 1248124049
[changed] => 1248127088
[comment] => 0
[promote] => 0
[moderate] => 0
[sticky] => 0
[tnid] => 0
[translate] => 0
[vid] => 15
[revision_uid] => 1
[title] => Welcome Willkommen
[body] => sadfasdfsadfsafdsfdsfd
[teaser] => sadfasdfsadfsafdsfdsfd
[log] =>
[revision_timestamp] => 1248127088
[format] => 1
[name] => XXX
[picture] =>
[data] => a:0:{}
[path] => home
[field_hintergrundbild] => Array
(
[0] => Array
(
[imceimage_path] => /www/xxx/sites/default/files/wohnshop.jpg
[imceimage_width] => 277
[imceimage_height] => 156
[imceimage_alt] =>
)
)
)
Hier hatte ich gehofft auch etwas von meinem selbst definierten Block zu erkennen, der auf der Seite ja auch angezeigt wird.
Hier noch Frage 2:
Mach ich das zu Umständlich?
Also würde es auch nur mit einer Ansicht funktionieren, die mir meine 3 Produkte und zusätzlich eine Headline und Text und einem Hintergrundbild ausgibt ?
Vielen Dank!
MfG
- Anmelden oder Registrieren um Kommentare zu schreiben
Also falls du jetzt per
am 21.07.2009 - 09:14 Uhr
Also falls du jetzt per Flash-Anwendung die 3 Produktbilder in einer Slideshow darstellen wölltest könntest du auch einfach das Modul Views Slideshow verwenden...
Sonst hilft dir vielleicht das Modul Flash Node oder ähnliches weiter.
Grundsätzlich würde ich mich zuerst auf die Suche machen, ob es ein Modul gibt was mein Problem/Feature lösen kann. Oftmals gibt es schon eins.
Die Information wo der Block angezeigt wird liegt beim Block:
http://api.drupal.org/api/file/modules/system/block.tpl.php/6
-----------
Luca Curella
Kooperative Netze - Berlin
Insert Block Modul
am 21.07.2009 - 09:35 Uhr
So ganz verstehe ich nicht warum Du es so machst, aber wenn ich ein Block (oder mehrere) in einem Node anzeigen möchte, verwende ich das Modul Insert Block (Inserts the contents of a block into into a node using [block:module=delta] tags)
Service-Modul
am 21.07.2009 - 10:12 Uhr
Meine Flashanwendung besteht aus nur einer swf. Diese soll aber die komplette Website abbilden.
Über das Sevice-Modul und Amfphp holt sich die Anwendung die Daten aus Drupal.
Drupal soll lediglich als Backoffice dienen. (Netter Effekt ist dann die SEO und die HTML-Seite für Anwender, denen kein Flash-Player zur Verfügung steht)
Mit dem Service-Modul kann ich das Menü auslesen (menu.get) und in Flash darstellen und die im Menü-Objekt angegebenen Nodes auslesen (node.get). Allerdings soll ein Klick auf einen Link keine neue HTML-Seite aufrufen, sondern wiederum nur die Inhalte per Service-Modul (node.get) holen und in dieser einen swf darstellen!
Und nun suche ich nach einer Möglichkeit, auch den mit dem Node angezeigten Block in Flash zu erhalten.
Das Modul Views Slideshow und Modul Flash Node sind mir hierzu keine Hilfe.
Aber vielleicht ist ja das Modul Insert-Block tatsächlich die Lösung, wenn mir dieses Modul meine Ansicht in das Node integriert?
Ich werd mir das mal ansehen, allerdings habe ich gerade gesehen, dass sich dieses noch im Dev-Status befindet...
Vielleicht geht das auch anders?
Kann ich denn meine erstellte Ansicht aus den 3 Produkten irgendwie anders um ein weiteres zusätzlichen Bild (Soll als Hintergrundbild dienen) erweitern.
Kann ich aus aus meiner Ansicht einen normale Seite (node) erstellen??
edit:
Wenn die Information wo und wann ein Block angezeigt wird beim Block selbst liegt müsste ja bei jedem neuen Seitenaufruf jeder Block aufgerufen werden, damit diese nachsehen, ob sie sich nun zeigen oder nicht. Ist das so?
Vielen Dank
MfG
Schweig oder sprich Worte die besser sind als Schweigen!
Insert view - Modul
am 21.07.2009 - 10:56 Uhr
Nun habe ich das "Insert view" - Modul gefunden.... aber irgendwie verstehe ich das nicht ganz.
was ist gemeint mit:
Enable 'insert view filter' in an input format and use this input format anytime you need the Insert View functionality...
Vielen Dank
MfG
Schweig oder sprich Worte die besser sind als Schweigen!
Modul Viewfield
am 21.07.2009 - 12:25 Uhr
Habe nun das Modul Viewfield installiert. Damit kann ich per CCK dem Node ein View zuweisen. Damit liegt dann zwar nicht der konkrete Inhalt des Views drin, aber der Name des Views. Und per view.get im Service-Modul kann ich mir dann den Inhalt des Views besorgen.
stdClass Object
(
[nid] => 17
[type] => starttest
[language] => de
...
...
[data] => a:0:{}
[field_start_hauser] => Array
(
[0] => Array
(
[vname] => Hausansicht|default <---------------------------- HIER
[vargs] =>
)
)
)
Mit view.get kann ich dann den Inhalt des Views "Hausansicht" holen:
Array
(
[0] => stdClass Object
(
[nid] => 6
[node_title] => Landhaus
[node_revisions_body] => Landhaus ist schön ländlich
[node_revisions_format] => 1
[node_data_field_haus_bild_field_haus_bild_imceimage_path] => /www/XXX/sites/default/files/Landhaus.jpg
[node_data_field_haus_bild_field_haus_bild_imceimage_width] => 277
[node_data_field_haus_bild_field_haus_bild_imceimage_height] => 156
[node_data_field_haus_bild_field_haus_bild_imceimage_alt] =>
[node_type] => haus
[node_vid] => 6
[node_data_field_haus_bild_field_haus_adresse_value] => Bla Bla
)
[1] => stdClass Object
(
[nid] => 7
[node_title] => Modernes Wohnen
[node_revisions_body] => Wohnen Modern
[node_revisions_format] => 1
[node_data_field_haus_bild_field_haus_bild_imceimage_path] => /www/XXX/sites/default/files/modernes_wohnen.jpg
[node_data_field_haus_bild_field_haus_bild_imceimage_width] => 277
[node_data_field_haus_bild_field_haus_bild_imceimage_height] => 156
[node_data_field_haus_bild_field_haus_bild_imceimage_alt] =>
[node_type] => haus
[node_vid] => 7
[node_data_field_haus_bild_field_haus_adresse_value] => Bla Bla
)
[2] => stdClass Object
(
[nid] => 8
[node_title] => Wohnshop
[node_revisions_body] => Bla Bla
[node_revisions_format] => 1
[node_data_field_haus_bild_field_haus_bild_imceimage_path] => /www/XXX/sites/default/files/wohnshop.jpg
[node_data_field_haus_bild_field_haus_bild_imceimage_width] => 277
[node_data_field_haus_bild_field_haus_bild_imceimage_height] => 156
[node_data_field_haus_bild_field_haus_bild_imceimage_alt] =>
[node_type] => haus
[node_vid] => 8
[node_data_field_haus_bild_field_haus_adresse_value] => Bla bla
)
)
Ich hätte halt gerne diesen Inhalt des Views direkt in meinem Node gehabt... :(
MfG
Schweig oder sprich Worte die besser sind als Schweigen!
Inhalt einer View in einem Node: views_embed_view()
am 21.07.2009 - 14:14 Uhr
Z.B:
<?php
print views_embed_view('RegioTermine','NeueTermine','Berlin');
?>
zeigt aus der View RegioTermine' die Anzeige 'NeueTermine', und da ich ein Taxonomie-Feld verwende "filtere" ich alles wo dieses Feld =Berlin ist.
Beschreibung: http://drupalcontrib.org/api/function/views_embed_view/6
Nebenbei Insert Blocks funktioniert problemlos bei mir:
Insert Block has been upgraded for Drupal 6 and is currently in a fully-functioning state (6.x-1.x-dev)
Leider gibt es bei den Drupal Module verschiedene Einstellungen über was ein dev, beta usw. Modul ist. z.B: beim date Modul gilt:
"People are sometimes confused figuring out which version is 'the latest code'. Official releases like 2.0 and 2.1 (with the green background in the box below) are released and never touched again so the only time they are 'the latest code' is at the moment they are released. All fixes after that go into the -dev version "
print views_embed_view
am 21.07.2009 - 15:23 Uhr
Edit:
Habe gerade mal das mit dem PHP-Code direkt im Textfeld ausprobiert.
Im Node selbst steht dann nur:
[body] => <?php echo "HALLO" ?>
Und nicht das Ergebnis der Ausgabe.
Kann man das irgendwo einstellen, dass der PHP-Code beim Speichern des Nodes Ausgeführt und das Ergebnis ins body geschrieben wird und nicht erst beim Aufruf? Dass sozusagen das Ergebnis gleich in der Datenbank gecached eingetragen wird ???
Aber ein Super Tipp!!
Edit Ende
print views_embed_view wird aber in die tpl.php geschrieben, oder?
Wenn das so wäre könnte ich das aus Flash mit dem node.get nicht aufrufen, weil es dann im Node selbst ja nicht drinsteht...
Wenn nicht, wo kann ich den php-Code sonst integrieren?
Vielleicht sollte ich mir das Insert Block genauer ansehen!
Danke!!
MfG
Schweig oder sprich Worte die besser sind als Schweigen!
Computed Fields
am 21.07.2009 - 15:47 Uhr
Komplexer gehts mit dem Modul Computed Fields (zu hoch für mich):
About Computed Field
Computed Field is a very powerful CCK field module that lets you add a custom "computed fields" to your content types. These computed fields are populated with values that you define via PHP code. You may draw on anything available to Drupal, including other fields, the current user, database tables, you name it. (Feeling the power yet? :) ) You can also choose whether to store your computed field values in the database with other content fields, or have them "calculated" on the fly during node views. (Although you should note that Views use requires database stored values.) This field is literally the Swiss Army knife of CCK fields. So start cooking up your PHP based values!
Um welchen Node geht es da
am 21.07.2009 - 17:04 Uhr
Um welchen Node geht es da eigentlich, einen page-node?
Und nun suche ich nach einer Möglichkeit, auch den mit dem Node angezeigten Block in Flash zu erhalten.
Kenne das Service Modul nicht aber es klingt als ob view.get das gleiche macht wie views_embed_view() nähmlich eine View laden und deren Inhalt ausgeben.
Im Node selbst steht dann nur:
[body] =>
<?php
echo "HALLO"
?>
Und nicht das Ergebnis der Ausgabe.
Das liegt vielleicht an deinem Eingabe Format, musst du auf PHP einstellen.
In den Modulen musst du PHP ausführen aktivieren, falls noch nicht geschehen.
Computed Fields ist nicht dynamisch. Es speichert nur feste Werte in die DB. Also für deinen Fall glaube ich nicht das richtige.
Wenn ich richtig verstehe brauchst du einen Node in PHP-Format oder ein node-xy.tpl.php in dem du mit views_embed_view() deine Ansicht ausgibst und dann hoffst node.get vom Service-Modul nimmt alles mit.
Ob das funktioniert...
Und warum du das Ganze überhaupt so machst hast du dir ja wahrscheinlich gut überlegt
:)
-----------
Luca Curella
Kooperative Netze - Berlin
Ja es ist ein normaler
am 21.07.2009 - 21:17 Uhr
Ja es ist ein normaler Page-Node erweitert um ein Feld für ein Hintergrundbild. Dieses wird zusätzlich um meinen View erweitert (Inzwischen über das Viewfield-Modul).
Mein View enthält wiederum 3 Inhalte des selben Inhaltstypen (Headline, Body, Beschreibung, Image, Color).
In meinem 4ten Post oben Hier
siehst Du das Ergebnis meines view.get
Es gibt das View als Objekt zurück, mit allen seinen Werten. So möchte ich das in Flash auch haben!
Ich erhalte den Text, den Title, den Pfad zum Bild, Bildgrößen u.s.w.
Damit kann ich in Flash die vom Redakteur in Drupal eingetragenen Inhalte komplett wiedergeben.
Mein Textfeld ist als PHP-Feld eingestellt. Wenn ich mir die Seite in Drupal ausgeben lasse steht dort auch richtigerweise
Hallo
Das liegt daran, dass das PHP-Script bei einer http-Anfrage serverseitig in html umwandelt und wiedergegeben wird.
Wenn Du aber nun mal in die Datenbank schauen würdest, wo auch immer sich diese View befinden mag, wird das eben als
<?php echo "Hallo" ?>
dort drin stehen.
Und die view.get-Methode liefert genau dieses an mein Flash!
Mit einer php-Datei kann ich gar nichts anfangen! Ich brauche die Daten als Variablen oder XML oder am besten eben als Objekt.
Und warum du das Ganze überhaupt so machst hast du dir ja wahrscheinlich gut überlegt
Ich bin mir bei meinem Flash-Teil und der Auswahl der Kommunikation "Service-Modul" mit AMFPHP ganz sicher...
Ob nun Drupal die richtige Wahl war, wird sich wohl noch rausstellen, ich bin recht zuversichtlich.
Leider befinden sich meine Kenntnisse in Drupal noch im Anfänger-Stadium....
Das mit meinem Node, der dann das View mit den 3 Produkten anzeigen soll, da bin ich mir sogar recht sicher, das dass besser geht!
Am Ende will ich doch nur einen Node, der gleich mein View mit integriert hat.
Statt zwei Objekten hätt ich gerne nur eines!
IST-Zustand
Objekt 1
Service -> node.get(17)
stdClass Object
(
[nid] => 17
[type] => starttest
[language] => de
[uid] => 1
[status] => 1
[created] => 1248174502
[changed] => 1248205968
[comment] => 0
[promote] => 0
[moderate] => 0
[sticky] => 0
[tnid] => 0
[translate] => 0
[vid] => 17
[revision_uid] => 1
[title] => Willkommen
[body] => Willkommen-Text
[teaser] => Willkommen-Text
[log] =>
[revision_timestamp] => 1248205968
[format] => 1
[name] => Admin
[picture] =>
[data] => a:0:{}
[field_start_hauser] => Array /***************** DIESES ARRAY *********/
( /***************** WÜRDE ERSETZT ... ******/
[0] => Array
(
[vname] => Hausansicht|default
[vargs] =>
)
)
[field_start_background] => Array
(
[0] => Array
(
[imceimage_path] => /www/XXX/sites/default/files/StartHintergrund.jpg
[imceimage_width] => 277
[imceimage_height] => 156
[imceimage_alt] =>
)
)
)
Daraus kann ich nun erkennen, dass dort die Hausansicht enthalten ist die ich über:
view.get("Hausansicht") mein 2tes Objekt holen:
Array /***************** DURCH DIESES ************/
( /*************** WELCHEN DEN WAHREN INHALT ENTHÄLT *************/
[0] => stdClass Object
(
[nid] => 6
[node_title] => Titel
[node_revisions_body] => BlaBla
[node_revisions_format] => 1
[node_data_field_haus_bild_field_haus_bild_imceimage_path] => /www/XXX/sites/default/files/Bild2.jpg
[node_data_field_haus_bild_field_haus_bild_imceimage_width] => 277
[node_data_field_haus_bild_field_haus_bild_imceimage_height] => 156
[node_data_field_haus_bild_field_haus_bild_imceimage_alt] =>
[node_type] => haus
[node_vid] => 6
[node_data_field_haus_bild_field_haus_adresse_value] => Bla Bla Bla
)
[1] => stdClass Object
(
[nid] => 7
[node_title] => Titel 2
[node_revisions_body] => Titel 2 Bla
[node_revisions_format] => 1
[node_data_field_haus_bild_field_haus_bild_imceimage_path] => /www/XXX/sites/default/files/neuesBild.jpg
[node_data_field_haus_bild_field_haus_bild_imceimage_width] => 277
[node_data_field_haus_bild_field_haus_bild_imceimage_height] => 156
[node_data_field_haus_bild_field_haus_bild_imceimage_alt] =>
[node_type] => haus
[node_vid] => 7
[node_data_field_haus_bild_field_haus_adresse_value] => BlaBlaBla
)
[2] => stdClass Object
(
[nid] => 8
[node_title] => Titel 3
[node_revisions_body] => Super Titel 3!
[node_revisions_format] => 1
[node_data_field_haus_bild_field_haus_bild_imceimage_path] => /www/XXX/sites/default/files/Bild3.jpg
[node_data_field_haus_bild_field_haus_bild_imceimage_width] => 277
[node_data_field_haus_bild_field_haus_bild_imceimage_height] => 156
[node_data_field_haus_bild_field_haus_bild_imceimage_alt] =>
[node_type] => haus
[node_vid] => 8
[node_data_field_haus_bild_field_haus_adresse_value] => Bla Bla Bla
)
)
SOLL-Zustand wäre aber nur ein Objekt:
node.get(17)
stdClass Object
(
[nid] => 17
[type] => starttest
[language] => de
[uid] => 1
[status] => 1
[created] => 1248174502
[changed] => 1248205968
[comment] => 0
[promote] => 0
[moderate] => 0
[sticky] => 0
[tnid] => 0
[translate] => 0
[vid] => 17
[revision_uid] => 1
[title] => Willkommen
[body] => Willkommen-Text
[teaser] => Willkommen-Text
[log] =>
[revision_timestamp] => 1248205968
[format] => 1
[name] => Admin
[picture] =>
[data] => a:0:{}
[field_start_hauser] => Array
(
[0] => stdClass Object
(
[nid] => 6
[node_title] => Landhaus
[node_revisions_body] => Landhaus BlaBla
[node_revisions_format] => 1
[node_data_field_haus_bild_field_haus_bild_imceimage_path] => /www/XXX/sites/default/files/Bild2.jpg
[node_data_field_haus_bild_field_haus_bild_imceimage_width] => 277
[node_data_field_haus_bild_field_haus_bild_imceimage_height] => 156
[node_data_field_haus_bild_field_haus_bild_imceimage_alt] =>
[node_type] => haus
[node_vid] => 6
[node_data_field_haus_bild_field_haus_adresse_value] => Bla Bla Bla
)
[1] => stdClass Object
(
[nid] => 7
[node_title] => Titel 2
[node_revisions_body] => Titel 2 Bla
[node_revisions_format] => 1
[node_data_field_haus_bild_field_haus_bild_imceimage_path] => /www/XXX/sites/default/files/neuesBild.jpg
[node_data_field_haus_bild_field_haus_bild_imceimage_width] => 277
[node_data_field_haus_bild_field_haus_bild_imceimage_height] => 156
[node_data_field_haus_bild_field_haus_bild_imceimage_alt] =>
[node_type] => haus
[node_vid] => 7
[node_data_field_haus_bild_field_haus_adresse_value] => BlaBlaBla
)
[2] => stdClass Object
(
[nid] => 8
[node_title] => Titel 3
[node_revisions_body] => Super Titel 3!
[node_revisions_format] => 1
[node_data_field_haus_bild_field_haus_bild_imceimage_path] => /www/XXX/sites/default/files/Bild3.jpg
[node_data_field_haus_bild_field_haus_bild_imceimage_width] => 277
[node_data_field_haus_bild_field_haus_bild_imceimage_height] => 156
[node_data_field_haus_bild_field_haus_bild_imceimage_alt] =>
[node_type] => haus
[node_vid] => 8
[node_data_field_haus_bild_field_haus_adresse_value] => Bla Bla Bla
)
)
[field_start_background] => Array
(
[0] => Array
(
[imceimage_path] => /www/XXX/sites/default/files/StartHintergrund.jpg
[imceimage_width] => 277
[imceimage_height] => 156
[imceimage_alt] =>
)
)
)
Da steckt alles drin!
Schweig oder sprich Worte die besser sind als Schweigen!
Insert view: embed a view into a node
am 21.07.2009 - 22:12 Uhr
Jetzt hab ich das auch mal mit dem Insert-View-Modul versucht.
Ergebnis node.get
stdClass Object
(
[nid] => 19
[type] => home
[language] => de
[uid] => 1
...
[title] => HELLO
[body] => [view:Hausansicht]
[teaser] => [view:Hausansicht]
...
)
Ich nehme an, dass das so auch bei Insert Block der Fall sein wird.
Vielleicht ist das auch anders gar nicht möglich, da sich bei einem Editieren des Views ja auch das Node aktualisieren müsste, welches das View beinhaltet.
MfG
Schweig oder sprich Worte die besser sind als Schweigen!
Computed Fields speichert Ergebnis
am 22.07.2009 - 07:43 Uhr
Laut Beschreibung (siehe vorherigen computed fields post) bietet dieses Modul was Du suchts: Ergebnisse der php Skripte in der DB speichern.
Zitat: Am Ende will ich
am 22.07.2009 - 08:09 Uhr
Am Ende will ich doch nur einen Node, der gleich mein View mit integriert hat.
Statt zwei Objekten hätt ich gerne nur eines!
Aus zwei Objekten eines machen:
Das müsstest du selber scripten und dann an Services übergeben. Hab kurz die Projektseite und das Handbuch überflogen und gesehen, dass es einen hook_service()gibt. Damit müsste sich das doch umsetzen lassen.
-----------
Luca Curella
Kooperative Netze - Berlin
Hook
am 22.07.2009 - 09:41 Uhr
Habe mir das ComputedField-Modul installiert und werde das mal testen.
Über dieses "hook" bin ich schon öfter gestolpert, was ist denn das?
Vielen Dank für Eure Hilfe!
Wenn das alles nichts Hilft habe ich noch immer 2 Alternativen:
Einfach das mit den Views sein lassen und eben die 3 Produkte direkt in die Startseite einbauen. (Ist aber nicht schön)
Im Flash eine Funktion schreiben, die mir bei einem Node mit Verweis auf ein View, dieses View eben gleich besorgt.
MfG
Schweig oder sprich Worte die besser sind als Schweigen!
Hook...
am 22.07.2009 - 10:17 Uhr
Hallo hans dampfer,
ein Hook nennt man vor allem Funktionen die sich über den Modulnamen oder ähnliches ansprechen lassen. Somit ist "Hook" auch nur ein Ersatz-Begriff.
das wäre z.B. ein Hook:
/**
* Implementierung von hook_install(). // Name des Hooks
*/
mymodul_install() { // Hookaufruf mit dem zugehörigen Wert.
...
}
wobei hier hook_install() die Funktion an sich ist und das "mymodul" beschreibt dann denn Wert dieses "Hakens" für die weitere Bearbeitung.
Hoffentlich habe ich das genau genug ausgedrückt, lasse mich gerne verbessern...
Gruss
minou