Project

General

Profile

Actions

Feature #86216

open

Allow empty slug for root pages and sysfolders

Added by Georg Tiefenbrunn over 5 years ago. Updated 9 months ago.

Status:
New
Priority:
Must have
Assignee:
-
Category:
Link Handling, Site Handling & Routing
Start date:
2018-09-10
Due date:
% Done:

0%

Estimated time:
PHP Version:
Tags:
Complexity:
Sprint Focus:
On Location Sprint

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.


Related issues 4 (1 open3 closed)

Related to TYPO3 Core - Epic #84728: Introduce speaking URLs for pages ClosedBenni Mack2018-08-22

Actions
Related to TYPO3 Core - Bug #86456: Skip special doktype parent pages in slug generationClosedBenni Mack2018-09-29

Actions
Related to TYPO3 Core - Bug #90736: Wrong slug fields for siteroots (level > 1) in multidomain environment and no possibility to modify themNew2020-03-11

Actions
Related to TYPO3 Core - Bug #87452: Page Slug generation doesn't take path of parent SysFolders into accountRejected2019-01-15

Actions
Actions #1

Updated by Georg Tiefenbrunn over 5 years ago

  • Related to Epic #84728: Introduce speaking URLs for pages added
Actions #2

Updated by Georg Ringer over 5 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?

Actions #3

Updated by Georg Tiefenbrunn over 5 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]
Result:
  • 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]
Actions #4

Updated by Georg Tiefenbrunn over 5 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.

Actions #5

Updated by Susanne Moog over 5 years ago

  • Category set to Link Handling, Site Handling & Routing
Actions #6

Updated by Benni Mack over 5 years ago

  • Related to Bug #86456: Skip special doktype parent pages in slug generation added
Actions #7

Updated by Benni Mack over 5 years ago

Hey all,

I hope this one fixes at least one big pain point - namely to exclude sys_folders when creating new subpages.

Actions #8

Updated by Benni Mack over 5 years ago

  • Target version changed from 9 LTS to Candidate for patchlevel
Actions #9

Updated by Jan Kornblum over 5 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...

Actions #10

Updated by Georg Tiefenbrunn over 5 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'] = '/';
            }
        }
    }
}
Actions #11

Updated by Heiko Nöthen over 5 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.

Actions #12

Updated by Riccardo De Contardi about 5 years ago

Has this one been solved with https://review.typo3.org/#/c/58473/ ?

Actions #13

Updated by Georg Tiefenbrunn about 5 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.

Actions #14

Updated by Riccardo De Contardi about 5 years ago

  • Status changed from Needs Feedback to New
Actions #15

Updated by Why Fullname over 4 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.

Actions #16

Updated by Jan Kornblum about 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" 
Actions #17

Updated by Jan Kornblum about 4 years ago

  • Related to Bug #90736: Wrong slug fields for siteroots (level > 1) in multidomain environment and no possibility to modify them added
Actions #18

Updated by Jan Kornblum about 4 years ago

  • Related to Bug #90736: Wrong slug fields for siteroots (level > 1) in multidomain environment and no possibility to modify them added
Actions #19

Updated by Jan Kornblum about 4 years ago

  • Related to deleted (Bug #90736: Wrong slug fields for siteroots (level > 1) in multidomain environment and no possibility to modify them)
Actions #20

Updated by Christian Eßl about 4 years ago

  • Related to Bug #87452: Page Slug generation doesn't take path of parent SysFolders into account added
Actions #21

Updated by Benni Mack 9 months ago

  • Sprint Focus set to On Location Sprint
Actions

Also available in: Atom PDF