Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Views ›

Views: Argument Handling Code mit if-Schleife...?

Eingetragen von wflorian (251)
am 29.01.2009 - 21:14 Uhr in
  • Views
  • Drupal 5.x

Hallo,

heute habe ich es irgendwie mit if-Schleifen.
Ich habe einen "Monthly Archive" View (http://drupal.org/node/52037) mit einer vid von 64. Also einfach eine Monatsübersicht wie man es von Blogs kennt.. Diese wird momentan beim Inhaltstyp "Nachrichten" als Block angezeigt.

Ich möchte nun die Breadcrumbs des Archivs anpassen. Da momentan lediglich folgendes anzeigt wird, wenn man in das Archiv reinklickt: Startseite >> Archiv
Ich möchte allerdings folgenden Breadcrumb: Startseite >> Nachrichten >> Archiv

Also dachte ich mir, passe ich die Breadcrumbs vom View manuell an mit:(IN DAS FELD: ARGUMENT HANDLING CODE)

$arr_bc = array(
l(t('Startseite'), '<front>'),
l(t('Nachrichten'), 'nachrichten'),
l(t('Archiv'), 'nachrichten/archiv')
);
drupal_set_breadcrumb($arr_bc);

Da aber der Block des Views auf allen Seiten des Inhaltstyps "Nachrichten" angezeigt wird, wird die manuelle Anpassung der Breadcrumbs auf allen Seiten wo der Block eingeblendet wird auch ausgeführt. Also habe ich überlegt eine Schleife mit das Argument Handling Code Feld zu schreiben:

if ($view->vid == 64 and $view->title == 'Archiv') {

$arr_bc = array(
l(t('Startseite'), '<front>'),
l(t('Nachrichten'), 'nachrichten'),
l(t('Archiv'), 'nachrichten/archiv')
);
drupal_set_breadcrumb($arr_bc);

}

Das ganze scheint aber nicht so wirklich zu funktionieren. Ich weiß nicht ob eine if-Schleife in den Argument Handling Code Feld überhaupt möglich ist. Ich hoffe ihr versteht meine Situation, wie kann ich die Breadcrumbs Anpassung durchsetzen, so dass sie lediglich IM Archiv angezeigt werden?

Freue mich auf Eure Antworten.

Grüße
Florian

‹ Views Funktion gesucht Content organisation abhänigkeiten ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

$view

Eingetragen von stBorchert (6003)
am 30.01.2009 - 09:37 Uhr

Moin!
Prinzipiell müsste das so funktionieren. Lass Dir mal die Variable $view ausgeben, damit Du siehst, ob die Attribute wirklich vid und title heissen (und der gewünschte Wert drinsteht):

<?php
drupal_set_message
('<pre>'. print_r($view, 1) .'</pre>');
?>

Nicht erschrecken, die Ausgabe ist ziemlich lang.

--------------
Edit:
Solltest Du views2 verwenden, muss der PHP-Code TRUE zurückgeben! Also:

if ($view->vid == 64 and $view->title == 'Archiv') {
  $arr_bc = array(
    l(t('Startseite'), '<front>'),
    l(t('Nachrichten'), 'nachrichten'),
    l(t('Archiv'), 'nachrichten/archiv'),
  );
  drupal_set_breadcrumb($arr_bc);
  return TRUE;  // <--- !!!
}

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

hth,

 Stefan

PS: http://www.if-schleife.de/

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke für Deine

Eingetragen von wflorian (251)
am 30.01.2009 - 11:11 Uhr

Danke für Deine Antwort.

Habe Views 1, nutze D5.

Habe jetzt mal mit Deinem Code die Attribute ausgegeben. Es war ein Fehler drin. Hätte wie folgt heißen müssen:

if ($view->vid == 64 and $view->page_title == 'Archiv von Nachrichten') {
  $arr_bc = array(
    l(t('Startseite'), '<front>'),
    l(t('Nachrichten'), 'nachrichten'),
    l(t('Archiv'), 'nachrichten/archiv'),
  );
  drupal_set_breadcrumb($arr_bc);
}

Aber weiterhin das gleiche Problem. Wie gesagt die Nachrichten Seite ist selber ein View, der Block des Archivs ist auch ein View, irgendwie funktioniert deswegen die SChleife nicht und die Breadcrumbs werden auch auf der Nachrichten Seite ebenfalls verändert gezeigt.

Irgendeine Idee für eine Schleife die das Problem behebt? Habe auch den Umkehrschluss getestet:

if ($view->vid == 38) { } else {

$arr_bc = array(
l(t('Startseite'), '<front>'),
l(t('Nachrichten'), 'nachrichten'),
l(t('Archiv'), 'nachrichten/archiv'),
);
drupal_set_breadcrumb($arr_bc);

}

vid 38 ist hier der Nachrichten View, also da wo nicht der Breadcrumb geändert werden soll, aber gemacht wird. Auch mit dieser SChleife wird es allerdings geändert. Ich verstehe es nicht.

Hier noch die Ausgabe der Attribute:

stdClass Object
(
    [vid] => 64
    [name] => nachrichten_archiv
    [description] =>
    [access] => Array
        (
            [0] => 4
        )

    [page] => 1
    [page_title] => Archiv von Nachrichten
    [page_header] =>
    [page_header_format] => 1
    [page_empty] =>
    [page_empty_format] => 1
    [page_footer] =>
    [page_footer_format] => 1
    [page_type] => teaser
    [use_pager] => 1
    [nodes_per_page] => 20
    [url] => nachrichten/archiv
    [menu] => 0
    [menu_tab] => 0
    [menu_tab_weight] => 0
    [menu_title] =>
    [menu_tab_default] => 0
    [menu_tab_default_parent_type] => tab
    [menu_parent_title] =>
    [menu_parent_tab_weight] => 0
    [block] => 1
    [block_title] => Archiv
    [block_use_page_header] => 0
    [block_header] =>
    [block_header_format] => 1
    [block_use_page_footer] => 0
    [block_footer] =>
    [block_footer_format] => 1
    [block_use_page_empty] => 0
    [block_empty] =>
    [block_empty_format] => 1
    [block_type] => list
    [nodes_per_block] => 12
    [block_more] => 1
    [breadcrumb_no_home] => 0
    [changed] => 1233309202
    [view_args_php] => drupal_set_message('

'. print_r($view, 1) .'

');

if ($view->vid == 64 and $view->title == 'Archiv von Nachrichten') {

$arr_bc = array(
l(t('Startseite'), ''),
l(t('Nachrichten'), 'nachrichten'),
l(t('Archiv'), 'nachrichten/archiv')
);
drupal_set_breadcrumb($arr_bc);

}
    [is_cacheable] => 0
    [sort] => Array
        (
            [0] => Array
                (
                    [vid] => 64
                    [position] => 0
                    [field] => node.created
                    [sortorder] => DESC
                    [options] => normal
                    [tablename] =>
                    [id] => node.created
                )

        )

    [argument] => Array
        (
            [0] => Array
                (
                    [vid] => 64
                    [type] => monthyear
                    [argdefault] => 5
                    [title] => %1
                    [options] =>
                    [position] => 0
                    [wildcard] =>
                    [wildcard_substitution] =>
                    [id] => monthyear
                )

        )

    [field] => Array
        (
            [0] => Array
                (
                    [vid] => 64
                    [tablename] => node
                    [field] => title
                    [label] =>
                    [handler] => views_handler_field_nodelink
                    [sortable] => 0
                    [defaultsort] => 0
                    [options] => link
                    [position] => 0
                    [fullname] => node.title
                    [id] => node.title
                    [queryname] => node_title
                )

        )

    [filter] => Array
        (
            [0] => Array
                (
                    [vid] => 64
                    [tablename] =>
                    [field] => node.status
                    [value] => 1
                    [operator] => =
                    [options] =>
                    [position] => 0
                    [id] => node.status
                )

            [1] => Array
                (
                    [vid] => 64
                    [tablename] =>
                    [field] => node.type
                    [value] => Array
                        (
                            [0] => nachrichten
                        )

                    [operator] => OR
                    [options] =>
                    [position] => 1
                    [id] => node.type
                )

        )

    [exposed_filter] => Array
        (
        )

    [build_type] => block
    [type] => list
)

  • Anmelden oder Registrieren um Kommentare zu schreiben

view

Eingetragen von stBorchert (6003)
am 30.01.2009 - 11:31 Uhr
wflorian schrieb

if ($view->vid == 64 and $view->page_title == 'Archiv von Nachrichten') {
  $arr_bc = array(
    l(t('Startseite'), '<front>'),
    l(t('Nachrichten'), 'nachrichten'),
    l(t('Archiv'), 'nachrichten/archiv'),
  );
  drupal_set_breadcrumb($arr_bc);
}

Ok. Mal ne Zwischenfrage: warum fragst Du immer den Titel ab? Da sind Leerzeichen und wer weiss, was was sonst noch, drin. Mach doch einfach

if ($view->name == 'nachrichten_archiv' && $view->vid == 64) { ... }

Zur Not auch kurz mit Debug-Ausgabe:

drupal_set_message('$view->vid: '. $view->vid);
drupal_set_message('$view->name: '. $view->name);

if ($view->name == 'nachrichten_archiv' && $view->vid == 64) {
  drupal_set_breadcrumb(array(
    l(t('Startseite'), '<front>'),
    l(t('Nachrichten'), 'nachrichten'),
    l(t('Archiv'), 'nachrichten/archiv'),
  ));
}

 Stefan

PS:

wflorian schrieb

Irgendeine Idee für eine Schleife die das Problem behebt?

Mit "Schleifen" wird das Problem zwar auch lösbar sein, ich würde jedoch eine if Anweisung bevorzugen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

IF-Schleife meinte ich auch.

Eingetragen von wflorian (251)
am 30.01.2009 - 11:56 Uhr

IF-Schleife meinte ich auch. Sorry.

Dein Vorschlag funktioniert leider aber auch nicht. Ich würde allerdings sagen, dass es logisch ist, dass es nicht funktioniert.

Den wie gesagt auf der Nachrichten Hauptseite wird der Block des Archiv-View ja angezeigt, dementsprechend ist die Abfrage der IF-Schleife erfüllt und somit wird auch der Breadcrumb auf der Nachrichten Hauptseite mit geändert.

Kann man die IF-Schleife nicht so formulieren, dass noch abgefragt wird, dass der View "nachrichten_aktuelles" als "page" erscheinen muss.

Aber wie gesagt nicht einfach eine Abfrage view->type == "page", weil die Nachrichten Hauptseite ja ebenfalls ein View ist und als "page" angezeigt wird.

Du verstehst mich? :D

Grüße
Florian

  • Anmelden oder Registrieren um Kommentare zu schreiben

views

Eingetragen von stBorchert (6003)
am 30.01.2009 - 13:01 Uhr
wflorian schrieb

IF-Schleife meinte ich auch. Sorry.

Es gibt keine if Schleifen! Schleifen umfassen Code-Blöcke, die wiederkehrend aufgerufen werden.

wflorian schrieb

Dein Vorschlag funktioniert leider aber auch nicht. Ich würde allerdings sagen, dass es logisch ist, dass es nicht funktioniert.
Den wie gesagt auf der Nachrichten Hauptseite wird der Block des Archiv-View ja angezeigt, dementsprechend ist die Abfrage der IF-Schleife erfüllt und somit wird auch der Breadcrumb auf der Nachrichten Hauptseite mit geändert.
Kann man die IF-Schleife nicht so formulieren, dass noch abgefragt wird, dass der View "nachrichten_aktuelles" als "page" erscheinen muss.
Aber wie gesagt nicht einfach eine Abfrage view->type == "page", weil die Nachrichten Hauptseite ja ebenfalls ein View ist und als "page" angezeigt wird.
Du verstehst mich? :D

Hm, weiss ich noch nicht so ganz.

Was ist der Unterschied zwischen Deinem Archiv-View und der "Nachrichten Hauptseite"?

Wann genau soll die Breadcrump-Navigation geändert werden?

$view->type == 'page' bezieht sich auf das aktuelle View-Objekt, funktioniert also, wenn der Archiv-View als eigenständige Seite angezeigt wird.

leicht verwirrt,

 Stefan

  • Anmelden oder Registrieren um Kommentare zu schreiben

Gut. Dann nehme ich alles

Eingetragen von wflorian (251)
am 30.01.2009 - 13:22 Uhr

Gut. Dann nehme ich alles zurück. Ich darf mich selber als PHP Beginner bezeichnen. ;)

Also unter /nachrichten wird ein View angezeigt mir verschiedenen Nodes (Anrisstexte etc.). Dieser "Nachrichten" View hat einen Archiv Block, dieser Block ist der View mit der besagten vid=64. Von dem Archiv Block aus, kann man sich ins Archiv klicken. (Genauer Aufbau, kannst Du durch den Link im ersten Beitrag einsehen).
Die Breadcrumb Struktur soll nur geändert werden, wenn man sich ins Archiv reinklickt! Sprich auf der Hauptseite also dem "Nachrichten" View soll die Breadcrumbs Struktur nicht mitverändert werden.

Versteht Du jetzt besser was ich meine?

if ($view->name == 'aktuelles_archiv' && $view->vid == 64 && $view->type == 'page') scheint auch nicht zu helfen....

grüße
florian

  • Anmelden oder Registrieren um Kommentare zu schreiben

views

Eingetragen von stBorchert (6003)
am 30.01.2009 - 13:33 Uhr
wflorian schrieb

Gut. Dann nehme ich alles zurück. Ich darf mich selber als PHP Beginner bezeichnen. ;)

:-)

wflorian schrieb

... Versteht Du jetzt besser was ich meine?

Ja.

wflorian schrieb

if ($view->name == 'aktuelles_archiv' && $view->vid == 64 && $view->type == 'page') scheint auch nicht zu helfen....

Vorhin hiess der View noch 'nachrichten_archiv' :-) Das macht dann eigentlich die Abfrage nach der vid überflüssig.

if ($view->name == 'nachrichten_archiv' && $view->build_type == 'page') { ... }

Das müsste es jetzt eigentlich sein. Ich hatte bisher nicht daran gedacht, dass es "$view->type == 'page'" gar nicht gibt, sondern das über "build_type" angefragt werden kann.
Falls das auch nicht funktioniert, fragen wir einfach den Pfad ab:

if (arg(0) == 'nachrichten' && arg(1) == 'archiv' { ... }

Ich geh aber mal davon aus, das die erste Variante mit $view->build_type funktionieren wird. Hoffe ich jedenfalls :-).

 Stefan

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja sorry. Eigentlich heißt

Eingetragen von wflorian (251)
am 30.01.2009 - 14:49 Uhr

Ja sorry. Eigentlich heißt die Hauptseite Aktuelles, aber ich habe es mal der Verständnishalber wegen in Nachrichten umbenannt.

So jetzt aber zu Deinem Vorschlag: Ich darf Dich rettenden Gott nennen!;)

Merci, build_type hat wunderbar funktioniert. Es geht jetzt alles genauso wie es soll! Vielen, vielen Dank Dir!

Lieben Gruß
Florian

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Rolle erstellen nicht zu finden
  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • 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
Weiter

Neue Kommentare

  • Rollen
    vor 4 Tagen 7 Stunden
  • Inzwischen sind wir bei
    vor 2 Wochen 1 Tag
  • Migrieren von D7 auf D8/ D10/ D11
    vor 2 Wochen 1 Tag
  • melde mich mal wieder, da ich
    vor 9 Wochen 5 Tagen
  • Hey danke
    vor 9 Wochen 6 Tagen
  • Update: jetzt gibt's ein
    vor 10 Wochen 8 Stunden
  • Hallo, im Prinzip habe ich
    vor 10 Wochen 4 Tagen
  • Da scheint die Terminologie
    vor 10 Wochen 4 Tagen
  • Kannst doch auch alles direkt
    vor 11 Wochen 2 Tagen
  • In der entsprechenden View
    vor 11 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250237
Registrierte User: 20467

Neue User:

  • StevenEness
  • ocvk2810
  • marouane.blel

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