Feature #86216
openAllow empty slug for root pages and sysfolders
0%
Description
Consider following page tree (TYPO3 CMS 9.4 composer):
TYPO3 [0] + Root [1] + General Storage [2] + News [3] + ... + Websites [4] + Website 1 [5] + Folder [6] + Imprint [7] + Website 2 [8]
- Page Root [1] has a domain record 'typo3.example.org' to provide one easy entry point for the CMS instance. It's an external link to '/typo3'.
- News records are stored in Root > General Storage > News [3] (e.g. no need for news authors to see 'Websites')
- Pages Website 1 [5] and Website 2 [8] have both
is_siteroot=1
and a valid site configuration
I'm missing RealURL's 'Exclude from Speaking URL' setting:
Empty slug for root pages¶
Pages Website 1 [5] and Website 2 [8] can't have slug=/
. Saving slug=/
results e.g. in slug=/1
. Recalculating the slug will produce slug=/websites/{pageName}
.
As an Integrator/Editor it should be possible to create "base slugs" (slug=/
) for pages with is_siteroot=1
.
Empty slug for sysfolders¶
To e.g. exclude pages from the main nav menu but include it them in some other menu (e.g. 'legal links') and keep a short URL page Imprint [7] is placed inside Folder [6].
As an Integrator/Editor it should be possible to create "empty slugs" (slug=/
) for sysfolders.
Updated by Georg Tiefenbrunn about 6 years ago
- Related to Epic #84728: Introduce speaking URLs for pages added
Updated by Georg Ringer about 6 years ago
- Status changed from New to Needs Feedback
You know that you can edit the full slug and change it for the imprint directory to /imprint
?
Having empty slugs is a bad idea as it creates other problems like what if you change a sysfolder to a page again and vice versa?
Is it fine to close the issue?
Updated by Georg Tiefenbrunn about 6 years ago
Georg Ringer wrote:
You know that you can edit the full slug and change it for the imprint directory to
/imprint
?
Yes. But please consider the following from an editor's view:
With RealURL's 'Exclude from Speaking URL' setting¶
- Apply 'Exclude from Speaking URL' to Folder [6]
- Put all pages which should be included in main menu inside Website 1 [5]
- Put all pages which should no be included in main menu inside Folder [6]
- All subpages of Folder [6] will be available via
/slug
without further configuration - All subpages of Folder [6] won't be included in main menu without further configuration
V9 slugs¶
- You have to manually edit the
/slug
for all subpages of Folder [6]
Updated by Georg Tiefenbrunn about 6 years ago
Georg Ringer wrote:
Having empty slugs is a bad idea as it creates other problems like what if you change a sysfolder to a page again and vice versa?
TL;DR: Website root pages (is_siteroot=1
) should have slug=/
regardless of pages.pid
The more important part is slug generation for website root pages (is_siteroot=1
) which are not direct children of TYPO3 [0].
One of the key features of TYPO3 is its ability to handle multi site and multi domain instances. With the current slug creation we are forced to place website root pages below TYPO3 [0] (= I found no other way than to place all website root pages below TYPO3 [0]. As soon as they are placed inside a sysfolder the slug of this folder will be added to all page slugs).
My way of implementing multi domain instances which mostly share a lot of non page related stuff as news, events, addresses, etc. is to use the above described structure:
- Put all Websites into a sysfolder (Websites [4]) and assign only one db mount to users which may edit pages/page content.
- Put all non-page related records in a sysfolder (General Storage [2])
Using this method all users have the same page tree (with branches corresponding to their user rights). Admin and power users can quickly close all page related stuff by closing the Websites [4] subfolder.
Updated by Susanne Moog about 6 years ago
- Category set to Site Handling, Site Sets & Routing
Updated by Benni Mack about 6 years ago
- Related to Bug #86456: Skip special doktype parent pages in slug generation added
Updated by Benni Mack about 6 years ago
Hey all,
I hope this one fixes at least one big pain point - namely to exclude sys_folders when creating new subpages.
Updated by Benni Mack about 6 years ago
- Target version changed from 9 LTS to Candidate for patchlevel
Updated by Jan Kornblum about 6 years ago
- Priority changed from Should have to Must have
Without the possibility to have empty slugs for rootpages in multidomain environments, for me it seems to be impossible to get my just upgraded instance live. In addition, i cannot call a domain itself by http://domain.tld (error page not found), currently it must be called as http://domain.tld/1 (this slug again). I think this is really an important (must have) issue...
Updated by Georg Tiefenbrunn almost 6 years ago
My current workaround to prevent '/{int}' slugs on pages not having pages.pid=0
is to use a DataHandler hook ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']
) and always set $fieldArray['slug'] = '/'
using a processDatamap_postProcessFieldArray()
function if pages.is_siteroot=1
:
Register the hook in ext_localconf.php
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['myext_pages'] = \Vendor\Myext\Hooks\DataHandler\PagesManipulation::class;
Class myext/Classes/Hooks/DataHandler/PagesManipulation.php
<?php declare(strict_types=1); namespace Vendor\Myext\Hooks\DataHandler; use TYPO3\CMS\Backend\Utility\BackendUtility; use TYPO3\CMS\Core\DataHandling\DataHandler; class PagesManipulation { /** * This method is called by a hook after a record was saved in the BE. * * @param string $status * @param string $table * @param int $id * @param array $fieldArray * @param DataHandler $dataHandler */ public function processDatamap_postProcessFieldArray($status, $table, $id, &$fieldArray, &$dataHandler) { if ('pages' === $table && 'update' === $status) { $record = BackendUtility::getRecord('pages', (int)$id, 'is_siteroot'); if ( true === isset($record['is_siteroot']) && 1 === (int)$record['is_siteroot'] ) { // Set 'slug' to '/' $fieldArray['slug'] = '/'; } } } }
Updated by Heiko Nöthen almost 6 years ago
We also use nested root-pages (for access rights / bread crumb creation) in TYPO3 before version 9 and we also need to create urls like site.com/ site2.com/. It should be possible to add / as slug for all pages with "is_siteroot=1" regardless if it is a direct child of [0]. Can't see why this should be a problem. The slug / is unique in every domain.
Updated by Riccardo De Contardi almost 6 years ago
Has this one been solved with https://review.typo3.org/#/c/58473/ ?
Updated by Georg Tiefenbrunn almost 6 years ago
Riccardo De Contardi wrote:
Has this one been solved with https://review.typo3.org/#/c/58473/ ?
As Benny wrote, only the sysfolder part got fixes.
To-Do: Website root pages (is_siteroot=1) should have slug=/ regardless of pages.pid.
Updated by Riccardo De Contardi almost 6 years ago
- Status changed from Needs Feedback to New
Updated by Why Fullname over 5 years ago
There are more reasons to have a "Exclude from page" option.
Examples
Config:
root -> page1 -> page11 -> page111 (content: dynamic plugin, yaml routeEnhancers)
page111: "Page enabled in menus" -> No (links to page111 are created dynamic)
Current:
domain/page1/page11/page111/dynamicRouteEnhance
Goal:
domain/page1/page11/dynamicRouteEnhance
OR
Page acts as container for different pages but the container-page itself has no content or isnt linked in menues.
page: "Page enabled in menus" -> No (links to page111 or subpages are set at content level)
Of course some want the current version, but since you cant set the slug to "/" it comes again to some workaround hooks/tricks.
The page-system is very flexible ... thats why i think a "exclude" option is the best case here, you never can predict how people use this tree. Its better to have manuell ways here, since the seo generation should be in the hand of the users.
With exclude option you can even generate two routes. A internal (for whatever reasons) and a external seo link. Seo Links != Tree Routes
Having empty slugs is a bad idea as it creates other problems like what if you change a sysfolder to a page again and vice versa?
With exclude option this is not a issue anymore ;-) Since exclude could be exclusiv option for standard pages and seo generation.
Updated by Jan Kornblum over 4 years ago
Any updates here? Got the same problem in 9.5.14 LTS:
- Root [0] -- Start [1] (Just for assigning some global TS) --- Domain A [is_siteroot + site configuration] -> Gets slug "/domaina" --- Domain B [is_siteroos + site configuration] -> Gets slug "/domainb"
Updated by Jan Kornblum over 4 years ago
- Related to Bug #90736: Wrong slug fields for siteroots (level > 1) in multidomain environment and no possibility to modify them added
Updated by Jan Kornblum over 4 years ago
- Related to Bug #90736: Wrong slug fields for siteroots (level > 1) in multidomain environment and no possibility to modify them added
Updated by Jan Kornblum over 4 years ago
- Related to deleted (Bug #90736: Wrong slug fields for siteroots (level > 1) in multidomain environment and no possibility to modify them)
Updated by Christian Eßl over 4 years ago
- Related to Bug #87452: Page Slug generation doesn't take path of parent SysFolders into account added