
dfile
-
Posts
9 -
Joined
-
Last visited
Posts posted by dfile
-
-
-
Thanks for your feedback.
I ended up doing this:
For each product I store the parend category for each category in the page reference field. This way I can easy count all products in the parent category.$this->addHookBefore('Pages::saved', function(HookEvent $event) { $pages = $event->object; $page = $event->arguments(0); if($page->template == 'produkt') { //remove parent kategorie foreach($page->pro_kategorie_parent as $item) { $page->pro_kategorie_parent->remove($item); } $page->save(pro_kategorie_parent); foreach($page->pro_raeume_parent as $item) { $page->pro_raeume_parent->remove($item); } $page->save(pro_raeume_parent); //add parent kategorie if ($page->pro_kategorie){ foreach($page->pro_kategorie as $item) { $cat_parent=$item->parent; $page->setAndSave(pro_kategorie_parent, $cat_parent); } } if ($page->pro_raeume){ foreach($page->pro_raeume as $item) { $raum_parent=$item->parent; $page->setAndSave(pro_raeume_parent, $raum_parent); } } } });
-
The page reference field (pro_kategorie) have only the level 3 category.
Here i can count the products, but then i have to go up to level 2 and
add all products in all level 3 categories to the count of level 2.Sorry if that was not clear.
I have to search the categories from bottom to top like this
$parentId=$pages->find($id)->parent();
this doesn't make things easy in processwire, or did I miss something? -
1 hour ago, Matzn said:
Hi,
use $pages->count https://processwire.com/api/ref/pages/count/
for each category like:
$cnt = $pages->count('parent=yourCategory,id=yourProductId');
yes, i know count, so far i have this result, but only for level 3 of the categories:
//categories level3 $kategorienId=getCategoryLevel3($page); $produktCount=WireArray(); foreach ($kategorienId as $id){ $count=$pages->count("template=produkt, pro_kategorie=$id"); $produktCount->add($count); } $kategorienId->data('count', $produktCount); var_dump($kategorienId->data('count'));
and this is the ugly function getCategoryLevel3:
function getCategoryLevel3($page){ $pages=wire('pages'); $id=WireArray(); $p=''; $data=''; if ($page->children!=''){ $children=$page->children; //level2 foreach($children as $children2){ if($children2->children!=''){ //level3 foreach($children2->children as $children3){ if($children3->children!=''){ foreach($children3->children as $child3){ //level3 add id $id->add($child3->id); } } } } } } return $id; }
there is a better way to do this?
I also need the number of products for level2 and level1. -
Hello, i must count products per category like so:
category 1 (4 products)
--category 1.1 (2 products)
----category 1.1.1 (1 product)and so on.
category 1 --category 1.1 ----category 1.1.1 ----category 1.1.2 ----category 1.1.3 --category 1.2 ----category 1.2.1 ----category 1.2.2 ----category 1.2.3
produkts have page references for the categories:
product 1 -- page reference->category 1.1.1 -- page reference->category 1.1.3 -- page reference->category 1.2.2 -- page reference->category 1.2.3
what is the best way to do this, i have many categories and many many products.
Thank you. -
i edit the render function in ProcessPageListRenderJSON.php
public function render() { $children = array(); ############################################### $toBottom=array( //system, login ################################### 1088, 1036, ); $bottomPages=array(); // pages forced to bottom of list $extraPages = array(); // pages forced to bottom of list foreach($this->children as $page) { if(!$this->superuser && !$page->listable()) continue; if(in_array($page->id, $this->systemIDs)) { $extraPages[] = $page; continue; } if(in_array($page->id,$toBottom)) { $bottomPages[] = $page; continue; } $child = $this->renderChild($page); $children[] = $child; } foreach($bottomPages as $page) { //bottomPages $children[] = $this->renderChild($page); } if($this->superuser) foreach($extraPages as $page) {//extraPages $children[] = $this->renderChild($page); }
that works for me.
-
LostKobrakai - thank you for your answer.
unfortunately after add the pages to the systemIDs there are only visible by superuser.
-
Hello! I'm new here and have a question:
i want to force pages to stay at the bottom of the pagetree:
I edit the ProcessPageListRenderJSON.php and it works.
class ProcessPageListRenderJSON extends ProcessPageListRender { protected $systemIDs = array(); public function __construct(Page $page, PageArray $children) { parent::__construct($page, $children); $this->systemIDs = array( $this->config->http404PageID, $this->config->adminRootPageID, $this->config->trashPageID, $this->config->loginPageID, //system login #################################################### 1088, 1036, ################################################################### ); }
Is there a way to do this without hardcode it in the ProcessPageListRenderJSON.php?
[SOLVED] $input->urlSegmentLast dont return the last URL segment
in API & Templates
Posted
Ok, Thank you.