joer80 Posted April 23, 2020 Share Posted April 23, 2020 I have a page located at /pages/about-us/. Is it possible to write code that looks for it at /about-us/ before I throw the 404? I would like all children of pages to check this way. Not just this one. Thanks! Link to comment Share on other sites More sharing options...
Jan Romero Posted April 23, 2020 Share Posted April 23, 2020 I think what you want is Jumplinks by Mike Rockett. It can be a little complex to set up. See the documentation here. Link to comment Share on other sites More sharing options...
Zeka Posted April 23, 2020 Share Posted April 23, 2020 You can hook to pageNotFound // in modules init() $this->addHookBefore('ProcessPageView::pageNotFound', $this, 'redirectToEnglish'); public function redirectToEnglish($event){ // some logic $this->session->redirect($yourpage->url); } Link to comment Share on other sites More sharing options...
joer80 Posted April 23, 2020 Author Share Posted April 23, 2020 1 hour ago, Zeka said: You can hook to pageNotFound // in modules init() $this->addHookBefore('ProcessPageView::pageNotFound', $this, 'redirectToEnglish'); public function redirectToEnglish($event){ // some logic $this->session->redirect($yourpage->url); } So what I want to happen, is if I visit /about-us/, it will load the /pages/about-us/ page as $page without the user seeing a redirect. Is that what this would do? Or would they get redirected? Link to comment Share on other sites More sharing options...
kongondo Posted April 23, 2020 Share Posted April 23, 2020 23 minutes ago, joer80 said: Or would they get redirected? A $session->redirect does exactly what it says on the tin; it will redirect. It seems you have a parent page called 'pages'. One of its children is 'about-us'. In the frontend, you don't want people to see 'pages' in the URL. You want them to access the parent's children directly. For instance, you want ONLY 'about-us' in the URL. Finally, you don't want a redirect Is this correct? Link to comment Share on other sites More sharing options...
joer80 Posted April 23, 2020 Author Share Posted April 23, 2020 Just now, kongondo said: A $session->redirect does exactly what it says on the tin; it will redirect. It seems you have a parent page called 'pages'. One of its children is 'about-us'. In the frontend, you don't want people to see 'pages' in the URL. You want them to access the parent's children directly. For instance, you want ONLY 'about-us' in the URL. Finally, you don't want a redirect Is this correct? Correct. Hard to explain! ? Link to comment Share on other sites More sharing options...
kongondo Posted April 23, 2020 Share Posted April 23, 2020 In that case what you want is to rewrite the URL. It is a divisive topic :-). Have you considered alternative, e.g. restructuring your site? Anyway, if you are sure you want to rewrite the URL, this is the go to topic: See the section on URLs. This post might also be relevant: 1 Link to comment Share on other sites More sharing options...
joer80 Posted April 23, 2020 Author Share Posted April 23, 2020 Thanks @kongondo I think I have it. Ryans post helped a ton! This is not a live website yet so I am playing around with the tree layout, but I do see perks for this. This is the tree: Root - Pages - Posts - Services - Products - Menus So I wanted pages to be special in that for a page like /pages/about/, you could opt to use the short form /about/. This not only matches most websites you would migrate to processwire, but it is so clean and organized. Also, I wanted you to be able to have 2 homepages, and edit the root page and select which page you want to load as your active homepage. You could even make the blog or posts page your homepage with a click. After looking at Ryans code, I ended up turning on page segments for root and doing the below code in my root.php. //Allow pages to sit under root instead of under pages area. if($input->urlSegment(1)){ //might be 404 or a url directly under root. $realPage = $pages->get('/pages/' . $input->urlSegment(1) . '/'); if($realPage->id){ $page = $realPage; } else { throw new Wire404Exception(); } } else { //matched a page, no need to check for short link. //Set the root variable and page variable. (If on homepage, use the selected homepage instead) if($page->id == 1){ $root = $page; $page = $page->selected_homepage; } else { $root = $pages->get('/'); } } I also fixed the page path like this in site/init.php //If we are viewing the long path for a page, set the path value to the short version. (Pages live in /pages/) $wire->addHookBefore('Page::path', function($event) { $page = $event->object; if($page->template == 'page') { $event->replace = true; $event->return = "/$page->name/"; } }); Link to comment Share on other sites More sharing options...
kongondo Posted April 23, 2020 Share Posted April 23, 2020 35 minutes ago, joer80 said: Thanks @kongondo I think I have it. Ryans post helped a ton! Glad you got it sorted :-). Link to comment Share on other sites More sharing options...
kongondo Posted April 25, 2020 Share Posted April 25, 2020 On 4/23/2020 at 5:23 PM, joer80 said: This is not a live website yet so I am playing around with the tree layout, In that case then, in case you missed it, here's a new alternative way to do custom paths Link to comment Share on other sites More sharing options...
joer80 Posted April 26, 2020 Author Share Posted April 26, 2020 15 hours ago, kongondo said: In that case then, in case you missed it, here's a new alternative way to do custom paths Oh wow! That is really neat. I will keep that in mind. After taking the time to figure it all out, I am wondering now if in my situation it would just be better to keep the tree natural, and make a dashboard that you see by default after login, that groups the pages how I want them to be grouped. lol But this may be handy to keep in the mind in the future if I redo an existing website and dont want to do redirects and need that flexibility. 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