Adam Kiss Posted March 19, 2012 Share Posted March 19, 2012 Hello all, I wanted to make a pool of pages today. So I created a variable, $pool, and iterated over pages, whose children I wanted to add. All good here: $pool = new PageArray; foreach ($parentPages as $parent){ $pool->add($parent->children()); } However, it took me good 25 minutes to realize, that my code wasn't really working. So, I glanced on docs a little, and changed add for append $pool->append($parent->children()); To my surprise, neither this works. You must use following: $pool->import($parent->children()); So, my question to Ryan is: 'why is this like this'? I would guess (and I believe jQuery's add/append/prepend also operate over arrays, not only single items). And question to community: do you think add/append/prepend/... should work for PageArray also, or only for single Page? I am all for PageArray. I probably also could do necessary typing. To be precise: Both add() and append() could only call import(), which calls add() for each Page() back, prepend would be a little harder. Also, trwtf is me for not reading the docs 100%. Link to comment Share on other sites More sharing options...
ryan Posted March 19, 2012 Share Posted March 19, 2012 Good idea Adam. Currently it actually will work with a PageArray, but only if that PageArray has just 1 item. That's not intentional, but rather a side effect of the function supporting adding a page by ID number. Since the string value of a PageArray with one item is just a number (the Page ID) it ends up adding that one page. So I think it makes a lot of sense for it to work just like import() if you happen to pass in a PageArray... a definite improvement over what it does now. I have updated the source for this and will test it locally for a day or two just to make sure there aren't any unintentional side effects. Though I also want to mention that PW isn't trying to mirror jQuery in how it treats one item vs. multiple items--I always prefer to know if I'm dealing with one item or an array of them. So I shy away from mirroring that behavior of jQuery. Even so, I think it does make sense in PW for the add() method to take on the role of import() when you send in multiple items. Thanks for bringing this up. Link to comment Share on other sites More sharing options...
Adam Kiss Posted March 19, 2012 Author Share Posted March 19, 2012 No thank you for doing so much for Content Management Systems Anyway, I think this is a matter of preference - you obviously like to know what is code doing by looking at what function you're using. I, on the other hand, prefer the 'here is add method, it will deal with whatever you choose to pass as parameter'. I think it's very nice that you, as a lead developer discuss stuff with community-healthy discussion beat anything else, when it comes to collaboration. 2 Link to comment Share on other sites More sharing options...
ryan Posted March 20, 2012 Share Posted March 20, 2012 I like the way jQuery handles single vs multiple items too, but just not always when translated to PHP and the needs of ProcessWire. There are some language differences between Javascript and PHP, storage differences (in memory vs database), and most importantly big differences between the needs of a CMS vs DOM. Ultimately having PW treat single/multiple the same as jQuery in all areas would make PW more confusing in places where it makes jQuery more simple. But there are times when it makes a lot of sense, like the one you identified here. And there may be others too, so keep an eye out and let me know. 1 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