happywire Posted March 24, 2019 Share Posted March 24, 2019 [solution] ========================================================= This is probably more PHP than ProcessWire. <?php namespace ProcessWire; // ready.php if ($page->images) { foreach ($page->images as $image) { var_dump($image); } } The var_dump looks like this. Spoiler object(ProcessWire\Pageimage)#191 (12) { ["url"]=> string(60) "/site/assets/files/1016/sunshine.jpg" ["filename"]=> string(97) "/shared/httpd/intermediatewire/htdocs/site/assets/files/1016/sunshine.jpg" ["filesize"]=> int(514133) ["description"]=> string(0) "" ["tags"]=> string(0) "" ["created"]=> string(19) "2019-03-24 17:35:53" ["modified"]=> string(19) "2019-03-24 17:35:53" ["filemtime"]=> string(19) "2019-03-24 17:35:53" ["width"]=> int(2667) ["height"]=> int(1778) ["suffix"]=> string(0) "" ["variations"]=> array(18) { [0]=> string(42) "sunshine.0x260.jpg" [1]=> string(45) "sunshine.1024x683.jpg" [2]=> string(45) "sunshine.1140x760.jpg" [3]=> string(45) "sunshine.1280x853.jpg" [4]=> string(46) "sunshine.1600x1067.jpg" [5]=> string(44) "sunshine.180x120.jpg" [6]=> string(46) "sunshine.1920x1280.jpg" [7]=> string(46) "sunshine.2048x1365.jpg" [8]=> string(44) "sunshine.240x160.jpg" [9]=> string(46) "sunshine.2560x1707.jpg" [10]=> string(44) "sunshine.320x213.jpg" [11]=> string(44) "sunshine.425x283.jpg" } } Now when I do <?php namespace ProcessWire; // ready.php var_dump($image->variations); var_dump($image['variations']); I get NULL and bool(false). Ok for the 'variations' key I see it holds an array, is there the reason I cannot var_dump its values? Yes I do know that there are methods for this, getAllVariations() and getAllVariations() with $options. When I do <?php namespace ProcessWire; // ready.php dump($image['filename']); dump($image->filename); I get the name of the file just fine. Ok, wait. This is not only when I do that with an $image. Similar things happen with I try to var_dump a $page for example. <?php namespace ProcessWire; // ready.php var_dump($page); var_dump($page['created']); // works fine var_dump($page['hooks']); // bool(false) var_dump($page['data']); // bool(false) The var_dump($page) returns this. Spoiler object(ProcessWire\Page)#188 (19) { ["instanceID"]=> int(10) ["id"]=> int(1016) ["name"]=> string(7) "gallery" ["path"]=> string(9) "/gallery/" ["status"]=> string(0) "" ["template"]=> string(12) "gallery-page" ["parent"]=> string(1) "/" ["numChildren"]=> int(0) ["sort"]=> int(0) ["sortfield"]=> string(4) "sort" ["created"]=> string(32) "2019-03-14 11:20:11 (1 week ago)" ["modified"]=> string(32) "2019-03-24 17:35:53 (1 hour ago)" ["published"]=> string(32) "2019-03-14 11:20:11 (1 week ago)" ["createdUser"]=> string(5) "admin" ["modifiedUser"]=> string(5) "admin" ["isLoaded"]=> int(1) ["outputFormatting"]=> int(1) ["hooks"]=> array(15) { ["Page::addUrl"]=> string(59) "PagePathHistory->hookPageAddUrl() in PagePathHistory.module" ["Page::removeUrl"]=> string(62) "PagePathHistory->hookPageRemoveUrl() in PagePathHistory.module" ["Page::editable"]=> string(53) "PagePermissions->editable() in PagePermissions.module" ["Page::publishable"]=> string(56) "PagePermissions->publishable() in PagePermissions.module" ["Page::viewable"]=> string(53) "PagePermissions->viewable() in PagePermissions.module" ["Page::listable"]=> string(53) "PagePermissions->listable() in PagePermissions.module" ["Page::deleteable"]=> string(55) "PagePermissions->deleteable() in PagePermissions.module" ["Page::deletable"]=> string(55) "PagePermissions->deleteable() in PagePermissions.module" ["Page::trashable"]=> string(54) "PagePermissions->trashable() in PagePermissions.module" ["Page::restorable"]=> string(55) "PagePermissions->restorable() in PagePermissions.module" ["Page::addable"]=> string(52) "PagePermissions->addable() in PagePermissions.module" ["Page::moveable"]=> string(53) "PagePermissions->moveable() in PagePermissions.module" ["Page::sortable"]=> string(53) "PagePermissions->sortable() in PagePermissions.module" ["before Page::render"]=> string(51) "PageRender->beforeRenderPage() in PageRender.module" ["Page::render"]=> string(45) "PageRender->renderPage() in PageRender.module" } ["data"]=> array(1) { ["title"]=> string(7) "Gallery" } } So inside the $page object I only seem to be able to access the keys and values that are not nested. Anything that is a key and has an array as value will tell me NULL or bool(false). Why is that and how could I var_dump ['hooks'], ['data'] of a $page or ['variations'] of an $image? I used to use var_export a lot but get the "var_export does not handle circular references" warning a lot with ProcessWire. So I started using var_dump but there face borders where I simply cannot seem to access properties of an object. Link to comment Share on other sites More sharing options...
Autofahrn Posted March 24, 2019 Share Posted March 24, 2019 (edited) @happywire don't forget that a Page is not an array or similar, but a PHP object with protected and private fields. From the "top" (like print_r($page)) you may see some internal attributes (like the array of hooks), but you can not directly access those fields. To retrieve, for example, the table of hooks, you'll need to use an allowed method, like print_r($page->getHooks()). Same for any field placed on your template. Their content is not retrieved everytime you see a $page but only after an access. If you do something like $page->someField, then you do not access a member from that object, the Page object intercepts the access operator and retrieves 'someField' from the database, caches its content in the page object and performs any kind of output formatting specified for that particular field. So, to obtain a list of fields available on a particular page, you'll do a $page->getFields(), which you may use to enumerate all fields and dump their contents: foreach($page->getFields() as $fldName) { echo "{$fldName}: {$page->$fldName}<br/>"; echo '<pre>'; print_r($page->$fldName); echo '</pre>'; } Edit: if you print_r($page) before and after that loop you'll see the embedded ['data'] array populated. And similar will do for $image->getVariations(); Edited March 24, 2019 by Autofahrn 4 1 Link to comment Share on other sites More sharing options...
kongondo Posted March 24, 2019 Share Posted March 24, 2019 53 minutes ago, happywire said: So I started using var_dump but there face borders where I simply cannot seem to access properties of an object. Although I don't know what your reasons for using var_dump(), I really recommend that you use the module TracyDebugger instead. It will give you better and cleaner information regarding any ProcessWire objects and their properties. 6 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now