Hi,
I am having an issue with checkboxes contained by a structure and the new toStructure() function. My blueprint looks like this:
fields:
calendar:
label: Ereignisse
type: structure
fields:
weekdays:
label: Wochentage
type: checkboxes
columns: 4
options:
Mo: Montag
Di: Dienstag
Mi: Mittwoch
Do: Donnerstag
Fr: Freitag
Sa: Samstag
So: Sonntag
Using yaml(), my structure looks like this:
print_r($calendar->yaml())
....
[2] => Array
(
[summary] => Training 1a & 1b
[description] => Training der 1. und 2. Mannschaft
[weekdays[]] => Array
(
[0] => Di
[1] => Do
)
...
The issue is that if I apply toStructure() on $calendar e.g. to filter like this:
foreach ($calendar->toStructure()->filter(function($entry) {....}) as $event):
echo $event->weekdays();
the weekdays property is empty. $event->weekdays would not be not syntactically valid.
The indentation seems to be wrong… “options” must be inside weekdays… & not in the same level.
fields:
weekdays:
label: Wochentage
type: checkboxes
columns: 4
options:
Mo: Montag
Di: Dienstag
Mi: Mittwoch
Do: Donnerstag
Fr: Freitag
Sa: Samstag
So: Sonntag
The indentation got messed up as I shorted the post. The blueprint is fine. I edited my post to reflect that.
You can use get() instead:
<?php $calendar = $page->calendar()->toStructure();
foreach($calendar as $event) {
foreach($event->get('weekdays[]') as $day) {
echo "<p>" . $day . "</p>";
}
}
?>
Still looks strange …
@texnixe that works, thanks. I can live with that for the moment.
How would you go about parsing the same structure field to populate an li with the name of each selected checkbox field?
What do you mean by “with the name of each selected checkbox field”? Do you want to get “Monday” instead of Mo?
No, I tried using this on the site I am working on, but instead of getting the field name I get the count of selected checkboxes on my output.
<?php foreach($page->product()->toStructure() as $product): ?>
<h2><?php echo $product->product_name(); ?></h2></a>
<p><?php echo $product->product_desc(); ?></p><a href="#" class="product--image">
<img src="<?php echo $page->image($product->product_image())->url() ?>"/></a>
<ul class="product--features--list">
<?php foreach($product->get('features[]') as $feature) ?>
<li><?php echo ($feature); ?></li>
<?php endforeach; ?>
And my output if I select two checboxes is feature_2 or if I select 4 is feature_4 instead of the name of the feature
Could you pls. post your blueprint as well @shiftsave?
Yes of course @texnixe here it is:
pages: true
files: true
fields:
title:
label: Title
type: text
product:
label: Products
type: structure
fields:
product_name:
label: Name
type: text
product_desc:
label: Description
type: textarea
product_image:
label: Image
type: select
options: images
features:
label: Features
type: checkboxes
columns: 2
options:
feature_1: Feature 1
feature_2: Feature 2
feature_3: Feature 3
feature_4: Feature 4
Thanks!
I was to blind to see it before, but there are three syntax errors in your code, a missing colon and a missing endforeach and a missing closing ul tag:
<?php foreach($page->product()->toStructure() as $product): ?>
<h2><?php echo $product->product_name(); ?></h2></a>
<p><?php echo $product->product_desc(); ?></p><a href="#" class="product--image">
<img src="<?php echo $page->image($product->product_image())->url() ?>"/></a>
<ul class="product--features--list">
<?php foreach($product->get('features[]') as $feature) : ?>
<li><?php echo ($feature); ?></li>
<?php endforeach; ?>
</ul>
<?php endforach ?>
I would suggest to turn on debugging in your config.php:
c::set('debug', true);
Thanks! I’ll try this and let you know how t goes.
Again, thanks for all your help!