Skip to content

Commit 3e41b4e

Browse files
authored
Merge pull request #1 from dnadesign/feature/subsite-config
Update menuset to allow subsite menu configurations
2 parents 089ed98 + 94e1d43 commit 3e41b4e

4 files changed

Lines changed: 51 additions & 26 deletions

File tree

README.md

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,8 @@ This module was inspired by the following modules, but modified for our tastes:
1010
This module is baked for Silverstripe 4 and Php 8
1111

1212
## Installation
13+
`composer require dnadesign/silverstripe-setmenu`
1314

14-
This module is not yet published on packagist, so install the module by including it in your **composer.json** with a repository definition.
15-
16-
```
17-
"require": {
18-
"dnadesign/silverstripe-setmenu": "dev-master"
19-
},
20-
"repositories": [
21-
{
22-
"type": "vcs",
23-
"url": "https://github.com/dnadesign/silverstripe-setmenu.git"
24-
}
25-
],
26-
```
2715
## Configuration
2816
Define the **MenuSet**s and the group they belong to in .yml configuration by setting `default_sets`.
2917

@@ -36,7 +24,18 @@ DNADesign\SetMenu\Model\MenuSet:
3624
Main nav: Main
3725
Main footer: Footer
3826
Secondary footer: Footer
39-
Auxilliary Footer: Footer
27+
```
28+
Additionally, subsite menusets can be configured. Currently the mechanism to do this is to match the theme name to the menu definition. This would also require a template to be copied to the subsite theme to override it and make use of the different menu sets.
29+
i.e.
30+
31+
```
32+
DNADesign\SetMenu\Model\MenuSet:
33+
default_sets:
34+
Main nav: Main
35+
Main footer: Footer
36+
subsitetheme:
37+
Primary: Main
38+
Auxilliary: Secondary
4039
```
4140

4241
On `/dev/build` they will be created automatically.

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "dnadesign/silverstripe-setmenu",
33
"type": "silverstripe-vendormodule",
4-
"description" : "A SilverStripe module for managing configurable and sortable menu sets.",
4+
"description" : "A SilverStripe module for managing configurable and orderable menu sets.",
55
"license": "BSD-3-Clause",
66
"require": {
77
"php": "^8",

src/Admin/MenuAdmin.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use SilverStripe\Forms\GridField\GridFieldAddNewButton;
1111
use SilverStripe\Forms\GridField\GridFieldExportButton;
1212
use SilverStripe\Forms\GridField\GridFieldImportButton;
13+
use Symbiote\GridFieldExtensions\GridFieldOrderableRows;
1314

1415
class MenuAdmin extends ModelAdmin
1516
{
@@ -38,6 +39,17 @@ public function getGridFieldConfig(): GridFieldConfig
3839
return $config;
3940
}
4041

42+
public function getEditForm($id = null, $fields = null)
43+
{
44+
$form = parent::getEditForm($id, $fields);
45+
46+
$gridFieldName = $this->sanitiseClassName($this->modelClass);
47+
$gridField = $form->Fields()->fieldByName($gridFieldName);
48+
$gridField->getConfig()->addComponent(new GridFieldOrderableRows());
49+
50+
return $form;
51+
}
52+
4153
/**
4254
* Filter by Subsite ID if the module is present
4355
*

src/Model/MenuSet.php

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ class MenuSet extends DataObject implements PermissionProvider
1919
private static $db = [
2020
'Key' => 'Varchar(255)',
2121
'Name' => 'Varchar(255)',
22-
'Type' => 'Varchar(255)'
22+
'Type' => 'Varchar(255)',
23+
'Sort' => 'Int',
2324
];
2425

2526
private static $has_many = [
@@ -35,25 +36,37 @@ class MenuSet extends DataObject implements PermissionProvider
3536
'Type'
3637
];
3738

39+
private static $default_sort = 'Sort';
40+
3841
/**
3942
* Create the MenuSets as defined in configuration
4043
*/
4144
public function requireDefaultRecords()
4245
{
4346
parent::requireDefaultRecords();
4447

45-
$defaultSets = $this->getMenuSetsFromConfig();
48+
$defaultSets = $this->getMenuSetsFromConfig('default_sets');
49+
50+
// Create menu sets for the main site (SubsiteID = 0)
51+
$this->createMenuSetsFromConfig($defaultSets);
4652

53+
// Check for subsites
4754
if (class_exists('SilverStripe\Subsites\Model\Subsite')) {
48-
$subsites = Subsite::all_sites();
55+
$subsites = Subsite::all_sites(false);
4956

50-
$subsites->each(function ($subsite) use ($defaultSets) {
57+
$subsites->each(function ($subsite) {
5158
Subsite::changeSubsite($subsite->ID);
5259

53-
$this->createMenuSetsFromConfig($defaultSets, $subsite->ID);
60+
// Retrieve menu sets based on subsite's theme name
61+
if (!$subsite->Theme) {
62+
return;
63+
}
64+
65+
$subsiteSets = $this->getMenuSetsFromConfig($subsite->Theme);
66+
if ($subsiteSets) {
67+
$this->createMenuSetsFromConfig($subsiteSets, $subsite->ID);
68+
}
5469
});
55-
} else {
56-
$this->createMenuSetsFromConfig($defaultSets);
5770
}
5871
}
5972

@@ -101,9 +114,9 @@ public function createMenuSetsFromConfig($defaultSets, $subsiteID = null)
101114
*
102115
* @return String[]
103116
*/
104-
public function getMenuSetsFromConfig()
117+
public function getMenuSetsFromConfig($setType)
105118
{
106-
return $this->config()->get('default_sets') ?: [];
119+
return $this->config()->get($setType) ?: [];
107120
}
108121

109122
public function getCMSFields()
@@ -112,7 +125,8 @@ public function getCMSFields()
112125

113126
$fields->removeByName([
114127
'Key',
115-
'MenuItems'
128+
'MenuItems',
129+
'Sort'
116130
]);
117131

118132
$fields->addFieldsToTab(
@@ -187,6 +201,6 @@ public function canDelete($member = null)
187201
*/
188202
public function isDefaultSet()
189203
{
190-
return array_key_exists($this->Key, $this->getMenuSetsFromConfig());
204+
return array_key_exists($this->Key, $this->getMenuSetsFromConfig('default_sets'));
191205
}
192206
}

0 commit comments

Comments
 (0)