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

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

Eingetragen von weberh (149)
am 03.01.2010 - 23:05 Uhr in
  • CCK und 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 (1013)
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

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke und: Wohin damit?

Eingetragen von weberh (149)
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 (1013)
am 04.01.2010 - 18:48 Uhr

Der Code ersetzt deinen bestehenden Code.

--
XING

--
XING

  • Anmelden oder Registrieren um Kommentare zu schreiben

Die Debug- Anzeige klappt

Eingetragen von weberh (149)
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 (149)
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 (34)
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.

Im Zweifel sollte man immer das Richtige tun.

  • Anmelden oder Registrieren um Kommentare zu schreiben

vielleich ein grund

Eingetragen von Kueblert (34)
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...

Im Zweifel sollte man immer das Richtige tun.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Kueblert schrieb Da ich das

Eingetragen von Kueblert (34)
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...

Im Zweifel sollte man immer das Richtige tun.

  • Anmelden oder Registrieren um Kommentare zu schreiben

vorerst zufriedenstellend

Eingetragen von Kueblert (34)
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)

Im Zweifel sollte man immer das Richtige tun.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Finale Lösung

Eingetragen von Kueblert (34)
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

Im Zweifel sollte man immer das Richtige tun.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • "Spielankündigung"-Block mit Drupal erstellen
  • Heartbeat und Facebook Style Status
  • D7: Custom Modul, Entity API, Save/Delete Methode erweitern - entity_class oder entity_controller_class verwenden?
  • Drupal-API-Links werden nicht automatisch verlinkt
  • Views Field Language (Spracherkennung der Felder) funktiniert nicht
  • Javascript in Block geht nicht
  • [gelöst] Zwei CCK Felder verbinden
  • [gelöst]Whitespace vor HTML-Head auf jeder Seite
  • Content änderungen
  • Nächstes Datum herauslesen
  • [gelöst]Editor Problem
  • Drupal 7 User Testing bei Google im Live-Stream
Weiter

Neue Kommentare

  • Würd mich mal intressieren ob
    vor 1 Minute 56 Sekunden
  • Diesen Fehler bekomme ich
    vor 20 Minuten 36 Sekunden
  • Ok ... das hört sich logisch
    vor 40 Minuten 56 Sekunden
  • "current user" language
    vor 1 Stunde 5 Minuten
  • Hallo Frank, !username has
    vor 1 Stunde 15 Minuten
  • <script
    vor 1 Stunde 23 Minuten
  • Hallo Stephan,nochmals
    vor 1 Stunde 26 Minuten
  • Du versuchst nicht wirklich
    vor 1 Stunde 27 Minuten
  • Was hat dich in der
    vor 1 Stunde 30 Minuten
  • Hatt sich erledigt.. danke
    vor 1 Stunde 38 Minuten

Statistik

Beiträge im Forum: 173721
Registrierte User: 15465

Neue User:

  • ichauch
  • Nagazi
  • yxlan

» Alle User anzeigen

User nach Punkten sortiert:
stBorchert5515
quiptime4713
Tobias Bähr3874
wla3789
md3775
bv3699
Thoor3678
Alexander Langer3277
dereine2635
Exterior2568
» User nach Punkten
Zur Zeit sind 10 User und 51 Gäste online.

Benutzer online

  • ichauch
  • TobiasR
  • lolhonk
  • byronic
  • Carsten Logemann
  • TommyL
  • Frank Ralf
  • Bogus
  • tfranz
  • Tobias Bähr

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Showroom
  • » Forum
  • » Drupalchannel
  • » Ü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
  • Bücherecke

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed Drupal Podcast
  • 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