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

[gelöst] arguments (Views) mit php steuern und Kritik am O'Reilly- Buch wegen der fehlerhaften Wiedergabe von PHP- Codes

Eingetragen von weberh (163)
am 03.01.2010 - 23:05 Uhr in
  • Views
  • Drupal 6.x

Ich möchte Argumente in den Views mit php steuern.
In einem View als Block sollen die Bands des gleichen Genres ausgegeben werden, wie die Band im Node Content in der Mitte.

Code zum Argument Genre:

$nid = arg(1);
if ($this -> view -> current_display == 'block'
&& arg(0) == 'node' && is_numeric($nid))
{ $context = node_load($nid);
if ($context -> type == 'bandprofil')
{
return $context -> field_genre[0]['nid'];
}
}
return 'all';

Der Views tut zeigt nach wie vor alle Bands an, egal welchen Genres, es tut sich also nichts, ob mit oder ohne Code.

Dieses Beispiel stammt aus dem recht guten Buch von O'Reilly; "Praxiswissen Drupal6".
Ich gehe davon aus, dass ich die Einträge laut Buch alle richtig gemacht habe, auch für diesen View: "Bands gleichen Genres"
Ich habe natürlich das PHP Modul aktiviert.

Wer kann mir helfen?

Hartmut

‹ [gelöst] Blockview und kombinierte Term-ID fehlende gruppe "content" in views (Felder hinzufügen) ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Mit der Funktion var_export

Eingetragen von traxer (1009)
am 04.01.2010 - 01:11 Uhr

Mit der Funktion var_export kannst anzeigen lassen, welchen Wert eine Variable hat und mit drupal_set_message kannst du eine Statusmeldung in Drupal anzeigen.

Das kannst du dazu verwenden, um deinen Code mit Debugging-Informationen anzureichen:

<?php
$nid
= arg(1);

drupal_set_message('DBG $nid: ' . var_export($nid, true));
drupal_set_message('DBG current_display: ' . var_export($this->view->current_display, true));
drupal_set_message('DBG arg(0): ' . var_export(arg(0), true));
drupal_set_message('DBG is_numeric($nid): ' . var_export(is_numeric($nid), true));

if (
$this -> view -> current_display == 'block'
 
&& arg(0) == 'node' && is_numeric($nid))
{
 
$context = node_load($nid);

 
drupal_set_message('DBG $context->type: ' . var_export($context->type, true));

  if (
$context -> type == 'bandprofil')
  {

   
drupal_set_message('DBG $context->field_genre[0]["nid"]: ' . var_export($context->field_genre[0]['nid'], true));

    return
$context -> field_genre[0]['nid'];
  }
}

drupal_set_message('DBG: return "all" wird ausgeführt.');

return
'all';
?>

Wenn du nun ein Bandprofil besuchst, dann solltest du recht schnell erkennen ab wann dein Code und deine Vorstellungen getrennte Wege gehen.

BTW: ich glaube, $this->view->current_display == 'block_1'.
--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke und: Wohin damit?

Eingetragen von weberh (163)
am 04.01.2010 - 16:27 Uhr

Wird dein Code in eine neue Seite als PHP-Code eingefügt?

Gruß Hartmut

  • Anmelden oder Registrieren um Kommentare zu schreiben

Der Code ersetzt deinen

Eingetragen von traxer (1009)
am 04.01.2010 - 18:48 Uhr

Der Code ersetzt deinen bestehenden Code.

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Die Debug- Anzeige klappt

Eingetragen von weberh (163)
am 05.01.2010 - 00:39 Uhr

Ein interessante Möglichkeit zu debuggen. Danke für die Arbeit. Und ich weis jetzt wie es geht.
Woher kann man diese Info bekommen? Gibt es ein Buch?
Z.B. Drupal für Entwickler?

Ich werde jetzt anhand der Ausgaben prüfen, welche Fehler auftreten. Zumindest geht aber der PHP- Code überhaupt.

In dem Views/ Arguments habe ich jedoch die php-Codezeichen

<?php
....
?>
weglassen müssen.

Gruß Hartmut

  • Anmelden oder Registrieren um Kommentare zu schreiben

Deine Vermutung war richtig!

Eingetragen von weberh (163)
am 05.01.2010 - 00:37 Uhr

Du hast richtig gelegen mit der Benennung "Block_1" statt lediglich "Block".

Die erste if- Bedingung war dadurch immer false und wurde nie durchlaufen, damit auch nicht die darunterstehende Debug- Ausgabe.

Nach der Veränderung lief es richtig.

Damit hast du einen wichtigen Bug in dem O'Reilly - Buch aufgedeckt.

Und ich hab den Einstieg in das PHP - Debugging geschafft.

Nochmals Danke für die schnelle Hilfe.

  • Anmelden oder Registrieren um Kommentare zu schreiben

ähnliches Problem

Eingetragen von Kueblert (66)
am 10.02.2011 - 09:59 Uhr

Hi,
ich habe ein ähnliches Problem.

in Drupal 7 habe ich ein Inhaltstyp Partner erstellt
mit den Feldern Title und body (standartfelder) und dem feld partner_kategorie, das ein Taxonomy Kategorie zugeordnet ist.

Meine Seite hat verschieden Menuepunkte die über die Taxonomy erstellt wurden.
in Views will ich nun steuern das der Inhaltstyp Partner nur sichbar wird auf den Seiten mit der gleichen Taxonomy Kategorie.
Beispie

Mein Menue mit Taxonomie

Blubb-> Blah -> blubber

Der Inhaltstyp Partner mit den Inhalten

Title: TEST
Body: ajlöskfjöa
Kategoire: blubber

So nun soll im Menuepunkt blubber, und nur das das TEST teil erscheinen.
Ich haben einen neuen View erstellt (Typ Nodes)
Die Felder Title und body reingeschrieben und bei Arguments den Taxonomy:Begriff hinzugefügt.
Wenn das Argument nicht vorhanden ist soll es Ausgeblendet werden.
Nun muss es Validiert werden.

Da scheint nun wieder php gefragt.
Wie kann ich dem mitteilen das er als Argument das nehmen soll was im der url drin ist also der ausgewählte link.

sowas wie

return arg(1); ging nicht.

Wenn ich die entsprechenden Argumente in der Vorschau von Hand eingebe klappts.
Ich hoffe ich drücke mich verstänlich aus. Es ist nicht ganz so einfach.

EDIT:
Soweit wie ich das verstanden habe, gibt es bei mir folgende abweichungen.
Da ich Drupal 7 habe steht in der URL nix von node sondern der echte lesbare name. Ich weiß nicht wie das intern gehandelt wird, aber im prinzip müsste er nur als standartargument sowas wie arg(1) zurück liefern.

zb. URL = cge.tkuebler.de/Frauenchor
arg(1) = Frauenchor
oder nicht???

Ich habe 2 Taxonomy Vokabulare
Kategorie und Tags.

das was ich verwenden will ist Kategorie. In meinem Inhaltstyp benutze ich auch ein Begriff aus dem Vokabular Kategorie.
Nun soll eben nur was angezeigt werden wenn der Inhaltstyp mit der Taxonomy Kategorie Begriff Frauenchor, mit dem arg(1) der URL Angezeigt wird.

Dreck es klappt einfach nicht. Bitte kann mir einer Helfen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

vielleich ein grund

Eingetragen von Kueblert (66)
am 10.02.2011 - 10:42 Uhr

Da ich das ganze als Block darstellen will muss ich wohl das hier Berücksichtigen.

Block display

Block displays will show up on your blocks administration page. Once a block display is created and saved, it can be enabled and positioned in your theme by visiting administer >> site building >> blocks and selecting it from the list.

Blocks do not accept arguments from any source; the only way to get arguments to a block is to provide defaults to it, possibly via the PHP Code default setting.

* Edit the argument in question; you may want to override this argument if you have multiple displays using it.
* Change the "Action to take if argument is not present" to "Provide default argument". This will bring up a new box called "Provide default argument options".
* The most common default argument type used for blocks is Node from URL, where it attempts to determine if the URL refers to a node, for example if visiting 'node/1' or 'node/1/edit'. User ID from URL is also very common.
* If you change the default argument type to 'PHP Code' (note: You must have permission to use PHP code on your site) you can enter PHP to define the argument needed. Simply return the argument.

Ich bleib dran...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Kueblert schrieb Da ich das

Eingetragen von Kueblert (66)
am 10.02.2011 - 10:44 Uhr
Kueblert schrieb

Da ich das ganze als Block darstellen will muss ich wohl das hier Berücksichtigen.

Block display

Block displays will show up on your blocks administration page. Once a block display is created and saved, it can be enabled and positioned in your theme by visiting administer >> site building >> blocks and selecting it from the list.

Blocks do not accept arguments from any source; the only way to get arguments to a block is to provide defaults to it, possibly via the PHP Code default setting.

* Edit the argument in question; you may want to override this argument if you have multiple displays using it.
* Change the "Action to take if argument is not present" to "Provide default argument". This will bring up a new box called "Provide default argument options".
* The most common default argument type used for blocks is Node from URL, where it attempts to determine if the URL refers to a node, for example if visiting 'node/1' or 'node/1/edit'. User ID from URL is also very common.
* If you change the default argument type to 'PHP Code' (note: You must have permission to use PHP code on your site) you can enter PHP to define the argument needed. Simply return the argument.

Ich bleib dran...

mh andererseites bestätigt das nur das ich mit php arbeiten muss ARGL...dreck...

  • Anmelden oder Registrieren um Kommentare zu schreiben

vorerst zufriedenstellend

Eingetragen von Kueblert (66)
am 10.02.2011 - 10:59 Uhr

HA es geht auch ohne php.

In views habe ich das Standart Taxonomy teil kopiert und
dort habe ich einen Block eingfügt mit folgenden Einstellungen

Im Argument Taxonomy Begriffs ID

Title = %1
Flag = Standardargument zu Verfügung stellen
Flag = Taxonomy Term ID from URL
Flag = Load default argument from term page

Dadruch wird im Block der Inhaltstyp angezeigt der mit der URL und der eingabe übereinstimmen.
Oh mann das war ne schwere Geburt.

Jetzt muss ich mal schauen ob ich das noch vom Layout her anpassen kann.

Ach ja für alle die es interessiert hier ein Link wie das Endergebnis ausschaut.

cge.tkuebler.de

in der Rubrik Männerchor und Frauenchor erscheint nun auf der Rechten Seite ein Block mit dem Ansprechpartner (Spezieller Inhaltstyp)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Finale Lösung

Eingetragen von Kueblert (66)
am 10.02.2011 - 17:11 Uhr

Jetzt erst habe ich die wirkliche Lösung gefunden.

http://das-drupal-magazin.de/taxonomy-view-einem-block
hat mir dabei geholfen.

Der Knackpunkt ist einfach das sowohl intern, bei der Taxonomy nur nummern gespeichert werden z.b. taxonomy/term/12 und nicht die namen die in der URL zu sehen sind.
Und zweitens das ein Block keine Argumente aus der URL lesen kann.

Jetzt hat es jedenfalls geklappt :-D
ENDE

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • lstin tombent homophonic wikke
  • 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
Weiter

Neue Kommentare

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

Statistik

Beiträge im Forum: 250238
Registrierte User: 20466

Neue User:

  • StevenEness
  • FoxPiola
  • ocvk2810

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