Jump to content

Change loop order without reordering items


MuchDev
 Share

Recommended Posts

Hey there. So I am currently working out a loop that pulls a list of items from three separate parent pages. This all works perfectly except I would like to change the order that they are pulled in to the loop without re organizing the pages themselves as they are nested under three separate categories. Is this something I could use a selector with and possibly provide the client the ability to manually re-organize the order of the items that are being displayed. 

$featuredPages = $pages->find('template=Exhibition, Exhibition_Featured=1');

foreach ($featuredPages as $featuredItem){
//doin stuff 
}
	 

:rolleyes:

Link to comment
Share on other sites

You could set up a page field with a PageListSelectMultiple Inputfield Type - the user could choose the pages from anywhere in the page tree and sort as desired. Is that what you are wanting to do?

attachicon.gifScreen Shot 2014-08-17 at 10.40.21 PM.png

Hey thanks for the reply Adrian!

That sounds like a great idea. In my own ignorance I hadn't even thought about using this. I will give this a try tonight and see if it does what I am wanting. Mostly what I want is the ability to pull all items in my site that are "featured" on to the homepage, but those featured pages also are individually shown in different sub sections by adding a parent=.The items are displayed at many different user selected sizes so they need to be moved out of the order that they just automatically display in my loop so this will have to be manually fiddled with by the client so they all fit perfectly in the grid. 

Link to comment
Share on other sites

Absolute GENIUS!! K yes PageSelectMultiple is exactly what I want. Populate a box with a list of pages and be able to drag em around! So cool. Thanks so much for pointing this fantastic tool out. This is going to be so useful.

  • Like 1
Link to comment
Share on other sites

So now that I have found PageSelectMultiple I found another use. I would like to use it on a parent page named Artist. The page has all of their basic information and here I thought would be nice to try to implement a picker to choose all of the artworks that are children of the artist page. I tried to change the selector in the php area to $page->children before I read the warning that it is not compatable. Any way that I could get the same functionality while only having the view scoped to the children of that page? Also as a side note, I have managed to break the field all together and am now met with this friendly error when I open the field to edit it. 

Recoverable Fatal Error: Argument 1 passed to InputfieldPage::___findPagesCode() must be an instance of Page, none given (line 168 of /home/swflemin/public_html/dg/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module) 
Link to comment
Share on other sites

Looks like there's a problem with InputfieldPage. PageListSelectMultiple didn't originally support findPagesCode at all, until Ryan added that feature per my request -- but in that version it was actually broken and the fix was only introduced to dev branch.

Since it's essentially a bug with with a module in wire directory, your options are ..

a) using another input field type such as AsmSelect (works fine if you're only dealing with direct children of one page),

b) using dev branch of ProcessWire (if this site is still a work in progress this might be a good idea anyway) or

c) replacing /wire/modules/Inputfield/InputfieldPage/InputfieldPage.module with newer version of same file.

Hope this helps a bit.

  • Like 5
Link to comment
Share on other sites

As always every response on this forum contains useful information, I thank you for convincing him to add it, this is a totally useful feature for this module. :) Sounds like I should just get the module from the dev branch as I would most likely need to navigate over the children of children on some items that contain extra pages to separate sections on a artist page. Thank you again, I'll post back with results! 

Link to comment
Share on other sites

Well after doing some head scratching I've decided that I will just be doing the display programatically. I have created a sub-section template that is the parent of other artworks. This will allow me to interupt the display order and move the items within the backend. I think this will end up making more sense to anyone who chooses to try and update this beast, hows this look?


	$items = $page->children;	

	foreach($items as $item){

	$generated = false;

	//Remember to not return any tags in the string if no information has been returned. 
		//option 1 - one is an item and then just print it.
		if ($item->template->name === 'items'){
			$gridSizer = $item->gridSizer;
			echo generateItem($item,$gridSizer);
			$generated = true;
		}
		//option 2 is a subsection. Print 100%width divider with text areas
		if ($item->template->name === 'itemsSection'){
			echo "<div class='grid-item masonrySection col-xs-12'>";

			if ($item->subsection_description){
				echo "<p>{$item->subsection_description}</p>";
				}
			echo "</div>";
		
			foreach ($item->children() as $subitem){
				$gridSizer = 1;
				if ($subitem->gridSizer){
				$gridSizer = $subitem->gridSizer;
				}					
				echo generateItem($subitem,$gridSizer);
			}
		}
	} 
Link to comment
Share on other sites

  • 2 weeks later...

Looks like there's a problem with InputfieldPage. PageListSelectMultiple didn't originally support findPagesCode at all, until Ryan added that feature per my request -- but in that version it was actually broken and the fix was only introduced to dev branch.

Since it's essentially a bug with with a module in wire directory, your options are ..

a) using another input field type such as AsmSelect (works fine if you're only dealing with direct children of one page),

b) using dev branch of ProcessWire (if this site is still a work in progress this might be a good idea anyway) or

c) replacing /wire/modules/Inputfield/InputfieldPage/InputfieldPage.module with newer version of same file.

Hope this helps a bit.

Thank you! :)

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

×
×
  • Create New...