Well,
Drupal 8 brought routes. These are great. The menu local task implementation now allows us to display independent tasks under a certain route / page. Which means that we're basically no longer bound to paths like we were with Drupal 7.

So in reality this can allow us to have entity view on front-end and any other task(edit, delete..) on the back-end...for example:

node/5 <- view task
admin/content/node/5/edit <- edit task
admin/manage/content/node/5/delete <- delete task

This of course does not happen in the core but if you're making a complex module or distribution(my case) you can end up with such structure(which in my opinion is how it should be in the core anyway..why put node editing or deletion on the front-end??).

Now the issue I have is that once I leave the 'view' page to, lets say, 'edit' task then I immediately lose the local tasks since the 'parent_id' was obviously set to the 'view' task and therefore when I'm no longer on the 'view' task's uri there is no reason for the tasks to be displayed.

With D7 I would not be able to make such local tasks structure, but now it's possible and therefore I think there needs to be added some sort of additional route parameter, like 'task_group' which would allow us to set the group to the local task definition and the local task would be visible on route that would utilize such group.

So far we have two options to display a local task: via base_route key or via parent_id key. I am proposing that we add a third option and that would be the 'task_group' key.

So what now looks like this:

mymodule.myentity.view_tab:
  route_name: mymodule.myentity.view
  base_route: mymodule.myentity.view
  title: 'View'
mymodule.myentity.edit_tab:
  route_name: mymodule.myentity.edit
  parent_id: mymodule.myentity.view_tab
  title: 'Edit'
mymodule.myentity.delete_tab:
  route_name: mymodule.myentity.delete
  parent_id: mymodule.myentity.view_tab
  title: 'Delete'

would simply look like this(+ the task_group with 'myentity' value in route definitions):

mymodule.myentity.view_tab:
  route_name: mymodule.myentity.view
  task_group: myentity
  title: 'View'
mymodule.myentity.edit_tab:
  route_name: mymodule.myentity.edit
  task_group: myentity
  title: 'Edit'
mymodule.myentity.delete_tab:
  route_name: mymodule.myentity.delete
  task_group: myentity
  title: 'Delete'

Comments

Anonymous’s picture

I had a look at \Drupal\Core\Menu\LocalTaskManager::getLocalTasksForRoute() and it's obvious this won' be possible with just a simple patch. The thing is that there would have to be duplicates of the original local tasks since each task just basically works only with route. If it does not utilize base_route but parent_id the base_route is retrieved form the parent_id local task anyway.

dawehner’s picture

I don't get that parent_id is used for local tasks deeper than just one level. For the parent level tasks you always use base_route, which seems to be the thing you described.

dawehner’s picture

Component: routing system » menu.module

Local tasks should be part of the menu system.

Version: 8.0.x-dev » 8.1.x-dev

Drupal 8.0.6 was released on April 6 and is the final bugfix release for the Drupal 8.0.x series. Drupal 8.0.x will not receive any further development aside from security fixes. Drupal 8.1.0-rc1 is now available and sites should prepare to update to 8.1.0.

Bug reports should be targeted against the 8.1.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.2.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.1.x-dev » 8.2.x-dev

Drupal 8.1.9 was released on September 7 and is the final bugfix release for the Drupal 8.1.x series. Drupal 8.1.x will not receive any further development aside from security fixes. Drupal 8.2.0-rc1 is now available and sites should prepare to upgrade to 8.2.0.

Bug reports should be targeted against the 8.2.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.3.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.2.x-dev » 8.3.x-dev

Drupal 8.2.6 was released on February 1, 2017 and is the final full bugfix release for the Drupal 8.2.x series. Drupal 8.2.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.3.0 on April 5, 2017. (Drupal 8.3.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.3.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.4.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.3.x-dev » 8.4.x-dev

Drupal 8.3.6 was released on August 2, 2017 and is the final full bugfix release for the Drupal 8.3.x series. Drupal 8.3.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.4.0 on October 4, 2017. (Drupal 8.4.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.4.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.5.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.4.x-dev » 8.5.x-dev

Drupal 8.4.4 was released on January 3, 2018 and is the final full bugfix release for the Drupal 8.4.x series. Drupal 8.4.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.5.0 on March 7, 2018. (Drupal 8.5.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.5.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.6.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.5.x-dev » 8.6.x-dev

Drupal 8.5.6 was released on August 1, 2018 and is the final bugfix release for the Drupal 8.5.x series. Drupal 8.5.x will not receive any further development aside from security fixes. Sites should prepare to update to 8.6.0 on September 5, 2018. (Drupal 8.6.0-rc1 is available for testing.)

Bug reports should be targeted against the 8.6.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.7.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.6.x-dev » 8.8.x-dev

Drupal 8.6.x will not receive any further development aside from security fixes. Bug reports should be targeted against the 8.8.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.9.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.7 was released on June 3, 2020 and is the final full bugfix release for the Drupal 8.8.x series. Drupal 8.8.x will not receive any further development aside from security fixes. Sites should prepare to update to Drupal 8.9.0 or Drupal 9.0.0 for ongoing support.

Bug reports should be targeted against the 8.9.x-dev branch from now on, and new development or disruptive changes should be targeted against the 9.1.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.9.x-dev » 9.2.x-dev

Drupal 8 is end-of-life as of November 17, 2021. There will not be further changes made to Drupal 8. Bugfixes are now made to the 9.3.x and higher branches only. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.2.x-dev » 9.3.x-dev

Version: 9.3.x-dev » 9.4.x-dev

Drupal 9.3.15 was released on June 1st, 2022 and is the final full bugfix release for the Drupal 9.3.x series. Drupal 9.3.x will not receive any further development aside from security fixes. Drupal 9 bug reports should be targeted for the 9.4.x-dev branch from now on, and new development or disruptive changes should be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.4.x-dev » 9.5.x-dev

Drupal 9.4.9 was released on December 7, 2022 and is the final full bugfix release for the Drupal 9.4.x series. Drupal 9.4.x will not receive any further development aside from security fixes. Drupal 9 bug reports should be targeted for the 9.5.x-dev branch from now on, and new development or disruptive changes should be targeted for the 10.1.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.5.x-dev » 11.x-dev

Drupal core is moving towards using a “main” branch. As an interim step, a new 11.x branch has been opened, as Drupal.org infrastructure cannot currently fully support a branch named main. New developments and disruptive changes should now be targeted for the 11.x branch. For more information, see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.