- Documentation >
- Tutorials >
- Extending Admin UI >
- 2. Creating a Dashboard tab
Step 2 - Creating a Dashboard tab
The Dashboard is the front page that you visit after logging in to the Back Office.
By default it contains two blocks: "Me" and "Everyone", which list Content items and Media.
The "Me" block additionally lists the current user's drafts.
In this step you will add a new tab to the "Everyone" block in the Dashboard.
This tab, called "Articles", will list ten most recently modified Content items of the Content Type article
.
Tip
To be able to view the results of this step, create a few Content items of the type "Article".
Register a service
First, add the following block to src/EzSystems/ExtendingTutorialBundle/Resources/config/services.yml
,
which was created when the bundle was generated. Place the block indented, under the services
key:
| EzSystems\ExtendingTutorialBundle\Tab\Dashboard\Everyone\EveryoneArticleTab:
autowire: true
autoconfigure: true
public: false
tags:
- { name: ezplatform.tab, group: dashboard-everyone }
|
The tags indicate that this is a Dashboard tab that will be placed in the "Everyone" block.
This configuration points to the EveryoneArticleTab.php
file, which you now need to create.
Create a tab
Create an EveryoneArticleTab.php
file in src/EzSystems/ExtendingTutorialBundle/Tab/Dashboard/Everyone
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 | <?php
namespace EzSystems\ExtendingTutorialBundle\Tab\Dashboard\Everyone;
use eZ\Publish\API\Repository\SearchService;
use eZ\Publish\Core\Pagination\Pagerfanta\ContentSearchAdapter;
use EzSystems\EzPlatformAdminUi\Tab\AbstractTab;
use EzSystems\EzPlatformAdminUi\Tab\OrderedTabInterface;
use EzSystems\EzPlatformAdminUi\Tab\Dashboard\PagerContentToDataMapper;
use eZ\Publish\API\Repository\Values\Content\Query\Criterion;
use eZ\Publish\API\Repository\Values\Content\Query\SortClause;
use eZ\Publish\API\Repository\Values\Content\LocationQuery;
use Pagerfanta\Pagerfanta;
use Symfony\Component\Translation\TranslatorInterface;
use Twig\Environment;
class EveryoneArticleTab extends AbstractTab implements OrderedTabInterface
{
/** @var PagerContentToDataMapper */
protected $pagerContentToDataMapper;
/** @var SearchService */
protected $searchService;
public function __construct(
Environment $twig,
TranslatorInterface $translator,
PagerContentToDataMapper $pagerContentToDataMapper,
SearchService $searchService
) {
parent::__construct($twig, $translator);
$this->pagerContentToDataMapper = $pagerContentToDataMapper;
$this->searchService = $searchService;
}
public function getIdentifier(): string
{
return 'everyone-article';
}
public function getName(): string
{
return 'Articles';
}
public function getOrder(): int
{
return 300;
}
public function renderView(array $parameters): string
{
$page = 1;
$limit = 10;
$query = new LocationQuery();
$query->sortClauses = [new SortClause\DateModified(LocationQuery::SORT_DESC)];
$query->query = new Criterion\LogicalAnd([
new Criterion\ContentTypeIdentifier('article'),
]);
$pager = new Pagerfanta(
new ContentSearchAdapter($query,
$this->searchService
)
);
$pager->setMaxPerPage($limit);
$pager->setCurrentPage($page);
return $this->twig->render('EzPlatformAdminUiBundle:dashboard/tab:all_content.html.twig', [
'data' => $this->pagerContentToDataMapper->map($pager),
]);
}
}
|
The tab also implements OrderedTabInterface
(see line 17), which enables you to define the order in which the tab is displayed in the Dashboard.
This is done using the getOrder
method (see line 47).
The rendering is done using the built-in all_content.html.twig
template,
which ensures the tab looks the same as the existing tabs.
Check results
Tip
If you cannot see the results or encounter an error, clear the cache and reload the application.
At this point you can go to the Dashboard in the Back Office.
In the "Everyone" block you can see the new "Articles" tab with the first ten articles in the Repository.