Pip Posted May 23, 2021 Share Posted May 23, 2021 Hi Everyone Need some help on page reference (PR) field type in repeaters. I've checked other threads and it seems straightforward by referring to the object name and down to "title", "name" etc. I tried it on my side and it seems "title" and "name" and "id" of the PR is blank. But if I refer to the object itself, the page ID is given no problem. Problem is when I try to query the page (ingredient template) using $pages->find, it returns none as well. I did strval none (yes was that annoyed). Some background: Quote batch (template) - menu (PR, checkbox for pizza template) - start date - end date pizza (template) - topping (repeater) - ingredient (PR) - quantity (textfield) --- how many of the ingredient is being used in the pizza itself ingredient (template) - name - quantity (textfield) --- total number in stock What I am trying to do: I am trying to create an online order form for a pizza place where menu rotates and comes in batches. In the order form (page), it will check if today is in any batch. If yes, it will display all items in the menu BUT provided they have the available ingredients (ingredient->quantity > 0). My problem: I can't query the page which is weird and I need to check if there's still some stocks. ? See codes below. <?php // Check if today is in a batch foreach ($pages->find("template=batch, batchdatestart<=today, batchdateend>=today") as $batch): ?> <br> Title: <?php echo $batch->name; ?><br> <?php // Print pizzas available today foreach ($batch->menu as $menuitem): echo $menuitem->title . "<br> Ingredient: <br>"; // Print ingredients of this pizza foreach ($menuitem->topping as $pizza): // The problematic line belo. // If $pizza->ingredient->title/name/id, none appears. // If $pizza->ingredient, page ID appears BUT if you use in the $pages->find, it returns none. echo $pizza->ingredient . "<br>"; endforeach; endforeach; ?> <?php endforeach; ?> Link to comment Share on other sites More sharing options...
BillH Posted May 23, 2021 Share Posted May 23, 2021 One thing I'd try is using Pages > Find to make the same selection, and then simplified version, and see if you get any results. If you have debug set to true in config.php, you can see the selector being used towards the bottom of the page. Another thing would be to try displaying the results of the find using the selector – and variations of it – on a page using print_r(). Or if you have Tracy Debugger installed (highly recommended!), return the result using bd(). BTW, it might be more efficient and a little easier to debug if you find and loop through the pages something like this: $batches = $pages->find("template=batch, batchdatestart<=today, batchdateend>=today"); foreach ($batches as $batch) ... 1 Link to comment Share on other sites More sharing options...
cehlo Posted May 24, 2021 Share Posted May 24, 2021 If you are getting ID of ingredient possible workaround could be this: $ingredient = $pages->get($pizza->ingredient); Then use $ingredient as page, eg. $ingredient->title... Maybe check settings of your field in Pw if nothing is out of ordinary. 1 Link to comment Share on other sites More sharing options...
Pip Posted May 24, 2021 Author Share Posted May 24, 2021 11 hours ago, BillH said: One thing I'd try is using Pages > Find to make the same selection, and then simplified version, and see if you get any results. If you have debug set to true in config.php, you can see the selector being used towards the bottom of the page. Another thing would be to try displaying the results of the find using the selector – and variations of it – on a page using print_r(). Or if you have Tracy Debugger installed (highly recommended!), return the result using bd(). BTW, it might be more efficient and a little easier to debug if you find and loop through the pages something like this: $batches = $pages->find("template=batch, batchdatestart<=today, batchdateend>=today"); foreach ($batches as $batch) ... Debug is now on. Thanks on the efficiency. Implemented it. As for print_r, I got these. Quote ProcessWire\PageArray Object ( [count] => 1 [items] => Array ( [Page:0] => Array ( [id] => 1018 [name] => prosciutto [parent] => /ingredients/ [template] => ingredient [title] => Prosciutto ) ) [selectors] => ) ProcessWire\PageArray Object ( [count] => 1 [items] => Array ( [Page:0] => Array ( [id] => 1040 [name] => mushroom [parent] => /ingredients/ [template] => ingredient [title] => Mushroom ) ) [selectors] => ) Link to comment Share on other sites More sharing options...
cehlo Posted May 24, 2021 Share Posted May 24, 2021 Ok, so according to your previous post variable $pizza->ingredient is page array so you must use foreach also for ingredients. 1 Link to comment Share on other sites More sharing options...
Pip Posted May 24, 2021 Author Share Posted May 24, 2021 55 minutes ago, cehlo said: Ok, so according to your previous post variable $pizza->ingredient is page array so you must use foreach also for ingredients. Let me face palm for a sec. LOL It works. So I needed to foreach another time so weird. Thank you so much! Link to comment Share on other sites More sharing options...
fredrickk655 Posted June 2, 2021 Share Posted June 2, 2021 Hello, i am new to this prompt ingredient as page for example. $ ingredient-> name ... is this the correct structure? (frederic, manager, employee monitoring) Link to comment Share on other sites More sharing options...
Pip Posted June 8, 2021 Author Share Posted June 8, 2021 On 6/2/2021 at 11:13 PM, fredrickk655 said: Hello, i am new to this prompt ingredient as page for example. $ ingredient-> name ... is this the correct structure? It depends on how you use it. $ingredient is just a name. 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