[gelöst] dynamische Views als Blockanzeige
Eingetragen von tomx (771)
am 12.03.2010 - 17:37 Uhr in
am 12.03.2010 - 17:37 Uhr in
Wie zeigt man einen Block dynamisch an?
Ja, mit Views arguments. Aber es geht nicht für Blocks, oder doch?
Ein Block hat keine URL
Es soll ein Block abhängig von einem Begriff angezeigt werden.
Argument im view ist: Taxonomie: Begriff + filter/% (welcher mit dem pathautopfad für Begriffe entspricht)
Wie kann also ein view als Block angezeigt werden?
- Anmelden oder Registrieren um Kommentare zu schreiben
...Du kannst...
am 12.03.2010 - 21:51 Uhr
...den View bei der Erstellung bzw. Bearbeitung als Block ausgeben, gehst dann in die Blockverwaltung (...admin/build/block) und setzt ihn an die gewünschte Stelle.
Oder Du kreierst zuerst den Block und schreibst dann (Eingabeformat PHP) hinein:
<?php
print views_embed_view($name, $display_id = 'default')
?>
...wobei "name" der Name Deines Views ist.
Biel Erfolg und viele Grüße,
Friedrich
Es klappt beides nicht. Der
am 12.03.2010 - 23:26 Uhr
Es klappt beides nicht. Der Block wird nicht sichtbar...
Nur noch mal zur Klärung:
Ist es denn prinzipiell möglich einen Block trotz fehlender Pfadangabe abhängig von Term ID anzuzeigen?
...nur mal...
am 12.03.2010 - 23:50 Uhr
...zur Sicherheit: als page lässt sich Dein view darstellen, oder?
Viele Grüße,
Friedrich
Ja. Aber dieser kann ja nur
am 13.03.2010 - 00:05 Uhr
Ja.
Aber dieser kann ja nur als Seite dargestellt werden.
Block geht auch dynamisch trotz fehlendem SeitenURL?
Wie schon oben gesagt wurde,
am 14.03.2010 - 22:20 Uhr
Wie schon oben gesagt wurde, geht es am einfachsten mit einem Block, in den Du mittels PHP-Code den View einsetzt:
print views_embed_view ('name-des-views', 'display-id', arg1, arg2, ......);
Der Trick liegt in der Diplay-ID. Views nummeriert einfach alle Seiten-Displays durch und alle Block-Displays durch also page-1, page_2, .... und block-1, block_2..... Die Nummern hinter dem Typ hängen nur von der Art des Displays ab. Es kan also für einen View page_1 und block_1 geben.
Die Sichtbarkeit des Blocks kannst Du dann zum Beispiel über den Aufruf-Pfad steuern.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
wla schrieb Wie schon oben
am 16.03.2010 - 12:42 Uhr
Wie schon oben gesagt wurde, geht es am einfachsten mit einem Block, in den Du mittels PHP-Code den View einsetzt:
print views_embed_view ('name-des-views', 'display-id', arg1, arg2, ......);
Müssen den arg1, arg2... angegeben werden? Sie sind doch im view blog bereits definiert.
Und wie müssten sie aussehen wenn z.B 241 das Argument von taxonomy/term/241 ist?
Muss im view Block das Argument angegeben werden oder im code oder bei beiden?
Und sollte der Block auch angezeigt werden wenn nur die Begriffs-id als Argument definiert ist? Also ohne den php code. Sind obiger phpcode und der viewsblock Alternativen oder bedingen sie einander und in welcher Form?
Ich frage das, weil mir das Prinzip nicht 100% klar ist und in keiner Variante ein Block sichtbar wird.
So sieht der codeblock aus, der ausgegeben werden sollte, aber nicht wird:
<?php
$view->taxonomie
$view = stdClass Object (
[db_table] => [views_view]
[base_table] => [node]
[args] => array (
)
[use_ajax] => []
[result] => array (
)
[pager] => array (
[use_pager] => []
[items_per_page] => [10]
[element] => [0]
[offset] => [0]
[current_page] => [0]
)
[old_view] => array (
[0] => []
)
[vid] => [38]
[name] => [taxonomie]
[description] => []
[tag] => []
[view_php] => []
[is_cacheable] => [0]
[display] => array (
[default] => stdClass (
)
[page_1] => stdClass (
)
[page_2] => stdClass (
)
[node_content_1] => stdClass (
)
[block_1] => stdClass (
)
)
[type] => [Normal]
[loaded] => [1]
[executed] => []
[built] => []
[build_info] => array (
)
[attachment_before] => []
[attachment_after] => []
[current_display] => [default]
[display_handler] => stdClass (
)
[preview] => [1]
);
?>
...sorry...
am 16.03.2010 - 12:51 Uhr
...daß ich nochmal simpel nachfrage: Lässt sich dein Block denn generell darstellen (...schieb mal den Code beiseite und schreib irgendwas rein)? Oder ist evtl. irgendwas mit den Blockeinstellungen?
Viele Grüße,
Friedrich
Wenn Du über views_embed_view
am 16.03.2010 - 13:03 Uhr
Wenn Du über views_embed_view einen View aufrufst, weiß der View nichts von der Stelle, wo er erscheint. Also kann er auch keine Argumente aus der URL beziehen, wie das sonst der Fall ist. Also mußt Du die Argumente beim Aufruf mitgeben. Dafür kannst Du auf diese Weise auch ein Block-Display eines Views aufrufen und die Parameter mitgeben.
Der PHP-Code mit views_embed_view ist der einzige Eintrag in dem neuen Block (den View hast Du ja bereits vorher definiert). Das bewirkt, daß der View in diesem Block aufgerufen wird (egal, ob der als Seiten- oder Block-Display definiert wurde). Das Eingabeformat für den Block muß dann natürlich auf PHP gestellt werden.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
friedrich schrieb
am 16.03.2010 - 13:25 Uhr
Lässt sich dein Block denn generell darstellen ?
ja, nur ohne den Inhalt des view blocks
Default Argument
am 16.03.2010 - 13:26 Uhr
Du kannst ein Default Argument setzen, wenn keine URL vorhanden ist. Da kannst du dann php Code eingeben oder eine node id auslesen etc.
tiger schrieb Du kannst ein
am 16.03.2010 - 15:21 Uhr
Du kannst ein Default Argument setzen, wenn keine URL vorhanden ist. Da kannst du dann php Code eingeben oder eine node id auslesen etc.
Wie und wo setz man ein Default Argument?
Im views block als "fester Eintrag" unter Begriffs ID?
Wie sähe das Argument dann aus???
Im View bei Deinem
am 16.03.2010 - 15:49 Uhr
Im View bei Deinem Argument
Dort: was tun, wenn kein Argument angegeben ist => Standard Argument bereitstellen, über PHP-Code
Jetzt gibt es verschiedene Möglichkeiten, je nach Argument. Mußt Du hier im Forum mal die Suche bemühen.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Mühsam ernährt sich das
am 16.03.2010 - 18:26 Uhr
Mühsam ernährt sich das Eichhörnchen...
Ich komme der Sache näher.
Wenn ich nur als Standartargument "Festern Eintrag" auswählen und in diesen eine Beispiel Begriffs ID eintrage erscheint der gewünsche Eintrag.
Die Beispiel ID ist die term id von taxonomy/term/241, also 241 als "Fester Eintrag".
Diese soll nun dynamisch sein.
Dann sollte doch 241 als arg(2) übergeben werden.
Ich habe verschiedene Argumente ausprobiert und so über geben:
<?php
$term = arg(1);
return $term;
?>
Es wird nicht das richtige Argument übergeben arg(0)-arg(2) und args[0]-args[2] habe ich probiert.
Wie bekomme ich die zahl aus taxonomy/term/241?
Ein Alias dazu besteht auch.
Fast
am 16.03.2010 - 19:02 Uhr
Das ist hier eine "path-alias". Da geht das mit dem Argument etwas anders:
$path = drupal_get_path_alias($_GET['q']); //get alias of URL
$path = explode('/', $path); //break path into an array
if ($path[0] == 'taxonomy' && $path[1] == 'term' && is_numeric(path[2])) {
return $path[2];
}
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Danke für den
am 16.03.2010 - 19:55 Uhr
Danke für den Beispielcode.
Ich habe ihn als PHP-Argumentcode: eingefügt. Aber das Ergebnis bleibt gleich. Es wird etwas angezeigt was mit dem gewünschten argument nichts zu tun hat.
Wie kann ich kontrollieren was in den Argumenten steht, sprich debuggen, variablen/arrays ausgeben?
Ich verzweifle langsam...
Land in Sicht... Dieser code
am 17.03.2010 - 00:12 Uhr
Land in Sicht...
Dieser code erzeugt das gewünschte Ergebnis, eingefügt in einen separaten Block.
<?php
print views_embed_view('taxonomie', $display_id = 'block_1',arg(2));
?>
Der block view "taxonomie", "block_1" wurde vorher erzeugt und als Argument die Begriffs ID ("Ansicht ausblenden") übergeben.
Wie bekommt man den Block nun angezeigt ohne zusätzlichen code im "manuellen" Block, sprich wie kann arg(2) als Standardargument als
PHP-Argumentcode über geben werden?
Also nochmals
am 17.03.2010 - 08:19 Uhr
Argument bearbeiten, bei was wenn keine Resultate vorhanden sind, 'Standardargument zu Verfügung stellen' auswählen, dann php Code und dort arg(2) eingeben.
tiger schrieb Argument
am 17.03.2010 - 11:34 Uhr
Argument bearbeiten, bei was wenn keine Resultate vorhanden sind, 'Standardargument zu Verfügung stellen' auswählen, dann php Code und dort arg(2) eingeben.
Ich hatte verschiedenes probiert, daher meine Frage.
Es klappt mit
return arg(2);
im php Feld als Standardargument.DANKE für Eure Tipps.