horst Posted October 7, 2013 Posted October 7, 2013 Hi, I'm sure the answer is here to find in forum, but after searching for a while now, I gave up and want to ask for it. How can I add / sort new (via API) created childpages to the top of the parent-tree? I want to have a descending sort order in the backend.
adrian Posted October 7, 2013 Posted October 7, 2013 Hey horst - did you see this thread: http://processwire.com/talk/topic/3327-new-page-on-top/ EDIT: and this: http://processwire.com/talk/topic/1428-create-new-child-as-top-sibling-rather-than-bottom/ 1
horst Posted October 8, 2013 Author Posted October 8, 2013 thanks Adrian! this solution from soma works partially: http://processwire.com/talk/topic/1428-create-new-child-as-top-sibling-rather-than-bottom/#entry12845 1) It does the right sorting if parent sorting is set to none in template. But than I cannot do manually sort by dragging. I get an JS-Message:"Your sort was not saved because these pages are automatically sorted by ..." BUT that's wrong! It was set to this before I have changed the sort to none. Don't know where the error comes from. I have searched a mysql dump of whole DB, but there isn't a sort-setting in the DB for my parent-folder-template! Could this be a bug? From where is the JS-Message generated? ----- 2) When setting the parent template child-sorting to 'Manual drag-n-drop' I can do a manually sorting, but Somas script doesn't work right anymore!
adrian Posted October 8, 2013 Posted October 8, 2013 I haven't tested Soma's solution, so not sure about those bugs, but do you need manual sorting in the back-end after creation? If not, wouldn't Ryan's suggestion of setting the sort order to "date created" in reverse work for you? I am guessing you do want the manual sorting, but thought I'd mention it, just in case
horst Posted October 8, 2013 Author Posted October 8, 2013 the base-sorting could be something like -dateCreated but I also want to be able to break that rule and drag some pages manually around. therefor somas solution to emulate -dateCreated like it works with childrens-sortorder set to none would be perfect!
Soma Posted October 8, 2013 Posted October 8, 2013 Can you also do this in your OS? I don't think it's even possible.
adrian Posted October 8, 2013 Posted October 8, 2013 Hey horst, I just tested Soma's code with the sorting set to none and it seems to be working fine. The new page was added to the top of the children, but I could still manually sort without any error. I am running the latest dev - maybe a couple of days old. Let me know if there is any specific scenario I can help you test.
horst Posted October 8, 2013 Author Posted October 8, 2013 (edited) @adrian: before it does not work, e.g if the sort-settings is none or manual There was a entry in my DB table pages_sortfields for the treeparent-page that get not altered when changing the template setting ?? After I have deleted this row (the only one in that table) this page reflects the selected template sortsetting again. I want to add multiple pages with an importer script. Somas script works with one single page for me, but not with multiple pages. When I try to add 7 pages and after I'm finished I output $p->sort and $p>customId in a foreach loop, I get this: 0 :: jh2140 1 :: jh2134 1 :: jh2135 1 :: jh2136 1 :: jh2137 1 :: jh2138 1 :: jh2139 I have sort setting 'Manual drag-n-drop'. I have dev branch from last friday. Edited October 8, 2013 by horst
horst Posted October 8, 2013 Author Posted October 8, 2013 (edited) Ok, I have good working solution I think: set the tree-parent-page sort-setting to "Manual drag-n-drop" when it is empty. (empty == has no children now!) Then with the importer script I use this code: $parent = wire('pages')->get('template=TreeParent'); // get your tree-parent-page $first = $parent->child; // get the first child $p = new Page(); ... $p->sort = (0!=$first->id) ? $first->sort -1 : 99999; $p->save(); that way I get this output with my foreach loop: 99991 :: jh2142 99992 :: jh2141 99993 :: jh2140 99994 :: jh2139 99995 :: jh2138 99996 :: jh2137 99997 :: jh2136 99998 :: jh2135 99999 :: jh2134 and after some manual changes (2134 to top, and 2142 to bottom, and 2135 above 2140) and adding one new page to it with the importer script, I get this: 99990 :: jh2143 99991 :: jh2134 99992 :: jh2141 99993 :: jh2135 99994 :: jh2140 99995 :: jh2139 99996 :: jh2138 99997 :: jh2137 99998 :: jh2136 99999 :: jh2142 You only need to set the startvalue high enough, I think. [ max can be 2.147.483.647 ] Edited October 8, 2013 by horst 1
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