Jak znaleźć elementy w tablicy renderowania

8

Spędziłem dużo czasu na znajdowaniu elementu w tablicy renderowania. Zwykle używam dpm()do wydrukowania tablicy, a następnie rozwijam opcje, aż znajdę to, czego szukam.

Na większych tablicach jest to uciążliwe. Kiedy używam print_r(), mogę wyszukiwać tekst, ale wtedy trudno jest zobaczyć strukturę tablicy i znaleźć ścieżkę do elementu.

Jakie inne metody możesz zasugerować?

uwe
źródło
To pytanie jest warte dodania moich pełnych powtórzeń !!
niksmac
Istnieje kilka modułów do upiększania całej tej kakao . Jestem zbyt leniwy, żeby się rozejrzeć, ale moduł dewelopera integruje się z krumo i innymi modułami zrzutu, jeśli dobrze pamiętam. Następnie zawsze jest dobry stary debugger, w którym można nawet sprawdzać i zjeżdżać z obiektów.
stefgosselin
@stefgosselin OP korzysta już z modułu Devel z dpm(), myślę, że szuka funkcji do znalezienia podelementu w tablicy renderowania o podanej nazwie / kluczu
Clive
@MotoTribe Jeśli mam rację i szukasz funkcji, jakiego rodzaju danych wejściowych / wyjściowych chciałbyś udzielić / uzyskać? Czy byłoby coś $elements = find_elements_by_key($render_array, 'element_name');w stylu zwrócenia tablicy wszystkich elementów w tablicy renderowania za pomocą pasującego klucza?
Clive
poprawny. W wersji „krumo display = disabled” pokazuje lepiej sformatowaną tablicę, w której mogę użyć wyszukiwania tekstowego. Idealnie powinna być funkcja wyszukiwania w wyjściu krumo i funkcja „kopiuj”, w której mogę skopiować pełną ścieżkę tablicy ['...'] ['...'] bez konieczności wpisywania. Tak, twoja funkcja też byłaby świetna. To nie jest funkcja Drupala ani PHP, prawda?
uwe

Odpowiedzi:

9

Istnieje moduł rozszerzeń dla Devel: Search Krumo . Używa Javascript, aby znaleźć tekst w wiadomościach Krumo / dpm i otworzyć tablicę w tych miejscach.
Wygląda tak:
wprowadź opis zdjęcia tutaj

Aktualizacja

Po 22 kwietnia 2012 r. Należy użyć sdpm()funkcji, aby wyświetlić pole wyszukiwania.

kalabro
źródło
nie ma mowy, właśnie tego szukałem !!! Dzięki!!!
uwe
@MotoTribe, więc myślę, że można to zaakceptować :)
kalabro
przepraszam, tęskniłem za tym. To niesamowite narzędzie, używaj go cały czas teraz !!!
uwe
gdzie umieścić ten moduł rozszerzeń? w katalogu devel [\ www \ drupal \ sites \ all \ modules \ devel] lub w katalogu modułów wniesionych [\ www \ drupal \ sites \ all \ moduły]
GiLL
Czy możesz wspomnieć o tym, jak korzystać z funkcji sdpm ()? gdzie wkleić? Bardzo dziękuję.
CodeNext
5

Jednym z poważnych problemów z tablicami renderującymi jest to, że często istnieje zbiór tylko do odczytu kopii informacji, których szukasz. Jeśli chcesz zmienić wyjście renderowania, musisz znaleźć właściwy. Zwykle używam dpm (), a następnie przeglądam źródło strony i przeszukuję tam dane wyjściowe, przewracając tam iz powrotem między dwoma wyświetlaczami, aż znajdę to, czego potrzebuję.

Jeśli chcesz zrzucić zawartość tablicy renderowania dla danej ścieżki do terminala (np. Aby przekazać ją przez grep), możesz zrobić coś takiego:

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);'

Możesz także po prostu „wyświetlić źródło strony” w przeglądarce i oczywiście użyć schowka, ale powyższe może być początkiem polecenia Drush, aby wyświetlić tablice renderowania.

Aktualizacja: Znalazłem naprawdę dobry artykuł na ten temat: Scary Render Array - prawdopodobnie najlepsze podejście do renderowania tablic, jakie do tej pory widziałem. Powinienem również wspomnieć o module devel_themer z góry; sprawdza się w „powiększaniu” tej części tablicy renderowania, którą jesteś zainteresowany.

greg_1_anderson
źródło
Nie mogę ci podziękować za linkowanie do The Scary Render Array - świetny artykuł!
Andy