formulate Posted August 7, 2019 Share Posted August 7, 2019 (edited) I have a new project that uses extremely long page urls. I need to bump the 128 character limit to 256. Does anyone know how to do this? As it is now, when creating a new page with a really long title (ie: more than 128 characters), the URL is getting truncated to 128 characters. Thanks. Edited August 7, 2019 by formulate issue not resolved Link to comment Share on other sites More sharing options...
dragan Posted August 7, 2019 Share Posted August 7, 2019 That was an issue until v. 3.0.85, but apparently was fixed in 3.0.86. What PW version are you running? 1 Link to comment Share on other sites More sharing options...
formulate Posted August 7, 2019 Author Share Posted August 7, 2019 The initial install was a couple months ago, so it seems like an update is in order! Thanks for the heads up dragan! Link to comment Share on other sites More sharing options...
formulate Posted August 7, 2019 Author Share Posted August 7, 2019 Ouch, ok NOT solved. The PW version I'm running is 3.0.131, much newer than 3.0.86 that addressed this issue. What am I missing here? Do I need to configure something somewhere to allow more than the default 128 characters? Link to comment Share on other sites More sharing options...
teppo Posted August 7, 2019 Share Posted August 7, 2019 Actually the fix/change @dragan mentioned above was about URL segments only. Page names are still limited to 128 characters as far as I can tell. Link to comment Share on other sites More sharing options...
formulate Posted August 7, 2019 Author Share Posted August 7, 2019 2 minutes ago, teppo said: Actually the fix/change @dragan mentioned above was about URL segments only. Page names are still limited to 128 characters as far as I can tell. Yikes! This is a major issue for me. Any ideas about how to work around this? A character limit of 128 on page names seems kind of messed up. I wonder what Ryan's logic is behind this decision. At least relaxing it to 256 would surely be acceptable? Link to comment Share on other sites More sharing options...
formulate Posted August 7, 2019 Author Share Posted August 7, 2019 Ok, as a workaround I created a script that uses $sanitizer->pageName where I can set the maxlength option to 256. While this works, it doesn't solve the problem of my client creating pages and having correct URL's. I guess I can always hook in to the page save and rewrite the name, but that seems ridiculous. There has to be some easy way to tell processwire to just allow 256 character names when saving new pages. Ok I was wrong. I thought for a moment my script worked, but it didn't. Even using $sanitizer->pageName with the maxlength set to 256 doesn't work. It gets overridden somewhere and truncated to 128. Link to comment Share on other sites More sharing options...
teppo Posted August 7, 2019 Share Posted August 7, 2019 56 minutes ago, formulate said: Yikes! This is a major issue for me. Any ideas about how to work around this? A character limit of 128 on page names seems kind of messed up. I wonder what Ryan's logic is behind this decision. At least relaxing it to 256 would surely be acceptable? The limit of 128 characters has been in place for many years now. Personally I don't see a huge issue in raising it, or at least allowing longer names but making this an optional feature, but in the end that's a decision for @ryan. You can always open a new issue at the processwire-requests repository, requesting support for longer page names and explaining your use case and need for these. I can't remember if the reason for this limit has been discussed before. Browsers have some kind of limits in place, but these days those should be pretty much a non-issue as far as I can tell. Database level scalability probably shouldn't be a massive issue here either. That being said, I must add that this might be the first time I've heard anyone requesting longer than 128 character page names – so while it may seem messed up to you, it seems to me that your use case is actually not a particularly common one. In fact for most sites page names longer than 128 characters would very likely result in usability issues, and – just for an example – for the sort of projects I usually work on I definitely wouldn't want to allow that. 128 characters is already much longer than what makes sense ? As for workarounds, depending on your use case you might be able to use URL segments here instead. That's just one idea, though. 41 minutes ago, formulate said: Ok I was wrong. I thought for a moment my script worked, but it didn't. Even using $sanitizer->pageName with the maxlength set to 256 doesn't work. It gets overridden somewhere and truncated to 128. The name field in the pages table is varchar(128), so that's at least one place that will enforce the limit. 3 Link to comment Share on other sites More sharing options...
formulate Posted August 7, 2019 Author Share Posted August 7, 2019 Teppo, you are of course right. Thanks for your diplomatic reply and placing some perspective on this. This is a very edge case and the first time I've encountered this need. It's specific to this one project and unfortunately, necessary. All major web browsers and the http spec itself have supported 2048 character URLs for nearly two decades now. Hence I find it interesting that PW's character limit is 128. However, I don't know the reasons behind it, be it database or other efficiency related issues. Unfortunately segments won't solve my issue. I need the URL to be a direct match with the page title. I'll change the table varchar to 256 and see what happens - seems like it could be the culprit. 2 Link to comment Share on other sites More sharing options...
formulate Posted August 7, 2019 Author Share Posted August 7, 2019 33 minutes ago, teppo said: The name field in the pages table is varchar(128), so that's at least one place that will enforce the limit. Unfortunately this didn't work. Name field is now varchar(256) and the name is still being truncated at some point after $sanitizer->pageName happens. I also changed InputfieldName to 256 and ensured InputfieldPageName was also 256. Still doesn't work. Link to comment Share on other sites More sharing options...
adrian Posted August 8, 2019 Share Posted August 8, 2019 There are several places that 128 is forced: https://github.com/processwire/processwire/blob/649d2569abc10bac43e98ca98db474dd3d6603ca/wire/core/Sanitizer.php#L415https://github.com/processwire/processwire/blob/649d2569abc10bac43e98ca98db474dd3d6603ca/wire/core/Pages.php#L85https://github.com/processwire/processwire/blob/649d2569abc10bac43e98ca98db474dd3d6603ca/wire/core/PagesNames.php#L49https://github.com/processwire/processwire/blob/649d2569abc10bac43e98ca98db474dd3d6603ca/wire/core/PagesNames.php#L314https://github.com/processwire/processwire/blob/341342dc5b1c58012ae7cb26cffe2c57cd915552/wire/modules/Inputfield/InputfieldPageName/InputfieldPageName.js#L60https://github.com/processwire/processwire/blob/649d2569abc10bac43e98ca98db474dd3d6603ca/wire/modules/Inputfield/InputfieldText.module#L258 When creating a new page, it's the JS file that kicks in first and truncates it as the title is typed. You could override the JS one pretty easily (look at my PageRenameOptions for hints on how to do this), and also deal with the sanitizer by setting the name in a hook and resaving, and you could hook into InputfildText::processInput to deal with the dirty length truncation. I think the hardest but might be dealing with nameMaxLength constants that get used in PagesNames.php in the pageNameFromFormat() method. Definitely much easier to see if Ryan might relax the limit, or make it configurable ? 5 Link to comment Share on other sites More sharing options...
Robin S Posted August 8, 2019 Share Posted August 8, 2019 6 hours ago, formulate said: Unfortunately segments won't solve my issue. I need the URL to be a direct match with the page title. Not sure why this means URL segments can't be a solution. You hook Pages::added and put the title through $sanitizer->pageName and save it to a hidden field (full_page_name). Then in the parent page template you check the URL segment against full_page_name and render any matching page (and throw a 404 if none found). For URLs to the pages you hook Page::path as per Ryan's case study and concatenate full_page_name to the parent URL. 2 Link to comment Share on other sites More sharing options...
formulate Posted August 8, 2019 Author Share Posted August 8, 2019 Adrain, thanks for your time and input on this. Definitely easier to have Ryan relax the limit. Robin, that is a clever solution with URL segments. While I don't normally like work-arounds like this, it may be the only solution at this point. Link to comment Share on other sites More sharing options...
adrian Posted January 22, 2021 Share Posted January 22, 2021 This bit me today so I created a feature request: https://github.com/processwire/processwire-requests/issues/382 Would you guys mind giving it a thumbs up to get Ryan's attention? Thanks. 3 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