So finden Sie Elemente in einem Render-Array

8

Ich habe gerade viel Zeit damit verbracht, ein Element in einem Render-Array zu finden. Normalerweise drucke ich dpm()das Array und erweitere dann die Optionen, bis ich das finde, wonach ich suche.

Bei größeren Arrays ist das umständlich. Wenn ich benutze print_r(), kann ich eine Textsuche durchführen, aber dann ist es schwierig, die Struktur des Arrays zu erkennen und den Pfad zum Element zu finden.

Welche anderen Methoden können Sie vorschlagen?

uwe
quelle
Diese Frage ist es wert, meine vollständigen Wiederholungen hinzuzufügen !!
Niksmac
Es gibt einige Module, um all diesen Caca zu verschönern . Ich bin zu faul, um nachzuschauen, aber das Dev-Modul lässt sich in Krumo und andere Dump-Enhancer integrieren, wenn ich mich richtig erinnere. Dann gibt es immer einen guten alten Debugger, in dem Sie sogar Objekte inspizieren und herunterfahren können.
Stefgosselin
@stefgosselin OP verwendet bereits das Devel-Modul mit dpm(), ich denke, er sucht nach einer Funktion, um ein Unterelement innerhalb eines Render-Arrays unter einem bestimmten Namen / Schlüssel zu finden
Clive
@MotoTribe Wenn ich das richtig verstanden habe und Sie nach einer Funktion suchen, welche Art von Eingabe / Ausgabe würden Sie hoffen, daraus zu geben / zu erhalten? Wäre es so etwas wie $elements = find_elements_by_key($render_array, 'element_name');ein Array aller Elemente im Render-Array mit einem passenden Schlüssel zurückzugeben?
Clive
richtig. In der Entwicklung zeigt "krumo display = disabled" ein besser formatiertes Array, in dem ich eine Textsuche verwenden kann. Idealerweise sollte es eine Suchfunktion in der Krumo-Ausgabe und eine "Kopier" -Funktion geben, mit der ich den vollständigen Array-Pfad ['...'] ['...'] kopieren kann, ohne ihn eingeben zu müssen. Ja, deine Funktion wäre auch großartig. Das ist keine Drupal- oder PHP-Funktion, oder?
Uwe

Antworten:

9

Es gibt ein Erweiterungsmodul für Devel: Search Krumo . Es verwendet Javascript, um Text in Krumo / dpm-Nachrichten zu finden und an diesen Stellen ein Array zu öffnen.
Sieht aus wie das:
Geben Sie hier die Bildbeschreibung ein

Aktualisieren

Nach dem 22. April 2012 sollten Sie die sdpm()Funktion verwenden, um das Suchfeld anzuzeigen.

Kalabro
quelle
Auf keinen Fall, genau das habe ich gesucht !!! Vielen Dank!!!
Uwe
@MotoTribe, so kann es akzeptiert werden, denke ich :)
Kalabro
Entschuldigung, habe das verpasst. Dies ist ein fantastisches Tool, benutze es jetzt die ganze Zeit !!!
Uwe
Wo habe ich dieses Erweiterungsmodul platziert? entweder im Entwicklungsverzeichnis [\ www \ drupal \ sites \ all \ modules \ devel] oder im Verzeichnis der bereitgestellten Module [\ www \ drupal \ sites \ all \ modules]
GiLL
Könnten Sie bitte erwähnen, wie die Funktion sdpm () verwendet wird? wo einfügen? Vielen Dank.
CodeNext
5

Eines der großen Probleme bei Render-Arrays besteht darin, dass häufig eine Reihe von schreibgeschützten Kopien der gesuchten Informationen vorhanden sind. Wenn Sie die Renderausgabe tatsächlich ändern möchten , müssen Sie die richtige finden. Normalerweise verwende ich dpm (), zeige dann die Seitenquelle an und durchsuche dort die Ausgabe, wobei ich zwischen den beiden Anzeigen hin und her blättere, bis ich das finde, was ich brauche.

Wenn Sie den Inhalt eines Render-Arrays für einen bestimmten Pfad zum Terminal sichern möchten (z. B. um ihn über grep zu übergeben), können Sie Folgendes tun:

drush ev '$router_item=menu_get_item("node/7"); require_once(DRUPAL_ROOT .
"/" . $router_item["include_file"]);
$render_array=call_user_func_array($router_item["page_callback"],
$router_item["page_arguments"]); print_r($render_array);'

Sie können die Seitenquelle auch einfach in Ihrem Browser anzeigen und die Zwischenablage verwenden. Dies kann jedoch der Beginn eines Drush-Befehls zum Anzeigen von Render-Arrays sein.

Update: Ich habe einen wirklich guten Artikel zu diesem Thema gefunden: Das Scary Render Array - wahrscheinlich die beste Behandlung für Render-Arrays, die ich bisher gesehen habe. Ich hätte auch das Modul devel_themer im Voraus erwähnen sollen . Es macht einen guten Job beim "Vergrößern" des Abschnitts des Render-Arrays, an dem Sie interessiert sind.

greg_1_anderson
quelle
Ich kann Ihnen nicht genug für den Link zu The Scary Render Array danken - großartiger Artikel!
Andy