Jump to content

Sum up fields of pages


brandy
 Share

Recommended Posts

Thanks a lot. That looks very good, but I missed one thing - the field is on the grandchild respectively on the great-grandchild of the pages.

The child is an detailed overview of numerous grandchildren, and the page itself shows all children, where I want to have the checked fields counted.
Here the structure:

-> page (should show a sum of the checked fields)
-> -> child
-> -> ->  grandchild (contains field, which is checked or not)
-> -> -> grandchild (contains field, which is checked or not)
-> -> -> grandchild (contains field, which is checked or not)

I already have a loop on the top page, to show the field of the child:

<?php foreach($page->children() as $child) {

Thanks!

Link to comment
Share on other sites

Hi!

Thanks a lot - it´s working now. But not 100%.

This is my code:
 

		<?php foreach($page->children() as $child) {
			echo "<div class='column column-block'>
						<div class='row'>
							<div class='large-12 small-12 columns'>
								<div style='border: 1px solid black; padding: 0px !important;'>
									<div style='width: 100%; background-image: url({$child->projekt_main_image->url}); background-size: cover; background-position:center center; height: 400px;'></div>
									<div style='text-align:center; background-color: black; color: white; padding: 10px 10px;'>
											<h4><strong><i>{$child->title}</i></strong></h4>
									</div>
									<div class='row' style='margin-top: 20px; margin-bottom: 20px;'>
										<div class='large-4 small-4 columns' style='padding: 10px; border-right: 1px solid black; text-align: center;'><div style='text-transform:uppercase;'>Tops gesamt</div><div style='font-size: 3.5rem;'><strong>{$child->count('template=tops')}</strong></div></div>
										<div class='large-4 small-4 columns' style='padding: 10px; border-right: 1px solid black; text-align: center;'><div style='text-transform:uppercase;'>Tops zu mieten</div><div style='font-size: 3.5rem;'><strong>{$child->count('template=tops, projekt_top_vermietet=0')}</strong></div></div>
										<div class='large-4 small-4 columns' style='padding: 10px; text-align: center;'><div style='text-transform:uppercase;'>Tops zu kaufen</div><div style='font-size: 3.5rem;'><strong>{$child->count('template=tops, projekt_top_verkauft=0')}</strong></div></div>
									</div>
									<div class='row'>
										<div class='large-8 small-centered columns' style='text-align: center;'><a href='{$child->url}' class='button expanded rounded' style='background-color: black;'>Alle Informationen</a></div>
									</div>
								</div>
							</div>
						</div>
					</div>";
			} ?>

$child->count('template=tops') works and the right number is shown, but {$child->count('template=tops, projekt_top_vermietet=0')} and {$child->count('template=tops, projekt_top_verkauft=0')} are showing the same number as the first count, although the fields 'projekt_top_vermietet' and 'projekt_top_verkauft' have different states in the different pages.

Thanks a lot!

 

 

Link to comment
Share on other sites

  • 3 weeks later...

Ok, it works now with this code:
 

		<?php foreach($page->children() as $child) {
			echo "<div class='column column-block'>
						<div class='row'>
							<div class='large-12 small-12 columns'>
								<div style='border: 1px solid black; padding: 0px !important;'>
									<div style='width: 100%; background-image: url({$child->projekt_main_image->url}); background-size: cover; background-position:center center; height: 400px;'></div>
									<div style='text-align:center; background-color: black; color: white; padding: 10px 10px;'>
											<h4><strong><i>{$child->title}</i></strong></h4>
									</div>
									<div class='row' style='margin-top: 20px; margin-bottom: 20px;'>
										<div class='large-4 small-4 columns' style='padding: 10px; border-right: 1px solid black; text-align: center;'><div style='text-transform:uppercase;'>Tops gesamt</div><div style='font-size: 3.5rem;'><strong>{$pages->count('template=tops')}</strong></div></div>
										<div class='large-4 small-4 columns' style='padding: 10px; border-right: 1px solid black; text-align: center;'><div style='text-transform:uppercase;'>Tops zu mieten</div><div style='font-size: 3.5rem;'><strong>{$pages->count('template=tops, projekt_top_vermietet=0')}</strong></div></div>
										<div class='large-4 small-4 columns' style='padding: 10px; text-align: center;'><div style='text-transform:uppercase;'>Tops zu kaufen</div><div style='font-size: 3.5rem;'><strong>{$pages->count('template=tops, projekt_top_verkauft=0')}</strong></div></div>
									</div>
									<div class='row'>
										<div class='large-8 small-centered columns' style='text-align: center;'><a href='{$child->url}' class='button expanded rounded' style='background-color: black;'>Alle Informationen</a></div>
									</div>
								</div>
							</div>
						</div>
					</div>";
			} ?>

Now the fields are summed up, which are supposed to be summed up.
This means he sums up the fields from all pages under "Projects".

Home
- Projects
- - Project 1
- - - TOP 1
- - - TOP 2
- - - ...
- - Project 2
- - - TOP 1
- - - TOP 2
- - - ...
- - Project 3
- - - TOP 1
- - - TOP 2
- - - ...

How can I differ between the different pages under "Projects" by its parent?
I tried it with "has_parent=$child", as the template is set in "Projects"!

Thanks a lot!

  • Like 1
Link to comment
Share on other sites

Try: $pages->count("has_parent=$child, template=tops, projekt_top_vermietet=1")

notice that I changed the single quotes to double quotes, so the variable inside them can be evaluated.

  • Like 2
Link to comment
Share on other sites

  • 2 months later...

Can I change the tag

$pages->count("has_parent=$child, template=tops, projekt_top_vermietet=1") 

so that the template is "tops" OR "tops_2"?

Short: I want to count the grandchildren with two different templates.

Thanks a lot!

Link to comment
Share on other sites

Or the easier way:
How do I check if the grandchild has at least a children?

It should like something like this:

			if($page->$child->$child->hasChildren()) {
				...
				}

I know the syntax above is totally wrong - how do I can reproduce this right?

Link to comment
Share on other sites

25 minutes ago, brandy said:

How do I check if the grandchild has at least a children?

You can do that with hasChildren() just like you proposed, but you have to get the grandchild first. If you want to get the first child of $page and then the first child of that, and then check if that has children, you can do $page->child()->child()->hasChildren(). You can also put selector strings between each of the parentheses to only get specific children.

 

3 hours ago, brandy said:

Can I change the tag


$pages->count("has_parent=$child, template=tops, projekt_top_vermietet=1") 

so that the template is "tops" OR "tops_2"?

Short: I want to count the grandchildren with two different templates.

Yeah, I’m pretty sure this should work:

$pages->count("has_parent=$child, template=tops|tops2, projekt_top_vermietet=1") 

If you already know there aren’t any other templates under $child, you can just remove the template selector entirely.

  • Like 2
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...