taotoo Posted February 11, 2022 Share Posted February 11, 2022 I'm cloning a page several times, each time giving the new page the same title. A hook is being used to perform the clone, and another to set both the page title and name. With each new page PW is correctly appending a number to the page name, and incrementing it as necessary. But after having created a few of these pages in succession, if I then go back and clone the first of the pages, the numbering of the first and last pages get messed up. This is perhaps easiest to see in a video: https://youtu.be/Xo6VaKPkyxk This is the hook I'm using to clone (thank you to the original creator): $this->wire->addHookAfter('ProcessPageEdit::getSubmitActions', function($event) { $page = $event->process->getPage(); if($page->template == "foo") return; $actions = $event->return; unset($actions['next']); $actions['clone'] = [ 'value' => 'clone', 'icon' => 'clone', 'label' => 'Save + Add New Similar', ]; $event->return = $actions; }); $this->wire->addHookAfter('ProcessPageEdit::processSubmitAction', function($event) { $action = $event->arguments(0); // action name, i.e. 'hello' $page = $event->process->getPage(); // Page that was edited/saved if($page->template == 'foo') return; if($action === 'clone') { $copy = $this->wire->pages->clone($page); $copy->work_title .= ' (copy ' . uniqid() . ')'; $copy->save(); $this->wire->session->redirect($copy->editUrl); } }); And this is the hook used to set the title and name: $wire->addHookAfter("Pages::saveReady(template=work,id>0)", function(HookEvent $event) { $page = $event->arguments(0); $page->title = $page->work_artist->first->title.": ".$page->work_title; $page->name = $this->pages->names()->uniquePageName($name = $page->work_artist->first->name."-".$page->work_title); }); Any thoughts appreciated! Link to comment Share on other sites More sharing options...
bernhard Posted February 11, 2022 Share Posted February 11, 2022 6 hours ago, taotoo said: $wire->addHookAfter("Pages::saveReady(template=work,id>0)", function(HookEvent $event) { $page = $event->arguments(0); $page->title = $page->work_artist->first->title.": ".$page->work_title; $page->name = $this->pages->names()->uniquePageName($name = $page->work_artist->first->name."-".$page->work_title); }); I'd start debugging by adding bd($page) from tracy debugger in this hook so that you see when and which page is saved. It seems that this hook somehow fires for all pages and therefore renames all those pages where it should only fire once. Not sure why this should be the case. Any other hooks involved? 1 Link to comment Share on other sites More sharing options...
3fingers Posted February 11, 2022 Share Posted February 11, 2022 16 minutes ago, bernhard said: template=work Some quotes missing here I think. 16 minutes ago, bernhard said: somehow fires for all pages Probably for the previous issue? 1 Link to comment Share on other sites More sharing options...
bernhard Posted February 11, 2022 Share Posted February 11, 2022 14 minutes ago, 3fingers said: Some quotes missing here I think. no, you dont need quotes here ? 2 Link to comment Share on other sites More sharing options...
taotoo Posted February 11, 2022 Author Share Posted February 11, 2022 (edited) 1 hour ago, bernhard said: I'd start debugging by adding bd($page) from tracy debugger in this hook so that you see when and which page is saved. It seems that this hook somehow fires for all pages and therefore renames all those pages where it should only fire once. Not sure why this should be the case. Any other hooks involved? edit: I think it might be uniquePageNames not allowing the current name to be used, because it's already being used by that very same page. See my post after this one. Thanks - there's no other hooks at all. I've actually now removed the first hook (the cloning one) to simplify things. In the new video I: Manually create a page Manually create a second page, with the same title. It correctly gets -1 appended to its name Edit the first page. All I do is resave it, at which point it immediately gets -2 appended to it I'm not sure what I should be looking at in TracyDebugger, but I added bd($page) to the hook and here's a screenshot taken just after the resave. It shows the previous and new name. Edited February 11, 2022 by taotoo Link to comment Share on other sites More sharing options...
taotoo Posted February 11, 2022 Author Share Posted February 11, 2022 A couple of further thoughts: 1. Looking at the page modified times on the settings tab, I think it only modifies the original page (and if I use the clone hook, the final page too). 2. If I just keep clicking save, it toggles between the current name and the next available name with a number appended to it 3. I wonder if uniquePageNames doesn't allow the current name to be used, since it's already taken by the page I'm editing... Link to comment Share on other sites More sharing options...
taotoo Posted February 13, 2022 Author Share Posted February 13, 2022 Thank you very much for your help @bernhard, it turns out the Setup Page Name module does what I want to do. 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