Skip to content

Commit

Permalink
Add query string option
Browse files Browse the repository at this point in the history
  • Loading branch information
Rens committed Oct 28, 2022
1 parent 3fe13ec commit 6cf4ca5
Showing 1 changed file with 20 additions and 1 deletion.
21 changes: 20 additions & 1 deletion src/Model/MenuItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use SilverStripe\Forms\DropdownField;
use SilverStripe\Forms\GridField\GridField;
use SilverStripe\Forms\GridField\GridFieldConfig_RecordEditor;
use SilverStripe\Forms\TextField;
use SilverStripe\Forms\TreeDropdownField;
use SilverStripe\ORM\DataObject;
use SilverStripe\Security\Permission;
Expand All @@ -32,6 +33,7 @@ class MenuItem extends DataObject
'OpenInNewWindow' => 'Boolean',
'Sort' => 'Int',
'AnchorText' => 'Varchar',
'QueryString' => 'Varchar',
];

private static $has_one = [
Expand Down Expand Up @@ -59,6 +61,8 @@ class MenuItem extends DataObject

private static $enable_page_anchor = false;

private static $enable_query_string = false;

/**
* @return \SilverStripe\Forms\FieldList
*/
Expand All @@ -77,6 +81,16 @@ public function getCMSFields()
$fields->dataFieldByName('Url')->displayIf('LinkType')->isEqualTo('url');
$fields->dataFieldByName('OpenInNewWindow')->displayIf('LinkType')->isEqualTo('page')->orIf('LinkType')->isEqualTo('url')->orIf('LinkType')->isEqualTo('file');

if (self::config()->enable_query_string) {
/** @var TextField $queryStringField */
$queryStringField = $fields->dataFieldByName('QueryString');
$queryStringField->displayIf('LinkType')->isEqualTo('page');
$queryStringField->setDescription('Example: <code>foo=bar&john=doe</code>');
$fields->addFieldToTab('Root.Main', $queryStringField);
} else {
$fields->removeByName('QueryString');
}

if (self::config()->enable_page_anchor) {
$fields->dataFieldByName('AnchorText')->displayIf('LinkType')->isEqualTo('page');
$fields->addFieldToTab('Root.Main', $fields->dataFieldByName('AnchorText'));
Expand Down Expand Up @@ -116,9 +130,14 @@ public function getLink()
case 'page':
$link = $this->LinkedPage()->Link();

if (self::config()->enable_query_string && $this->QueryString) {
$link = sprintf('%s?%s', $link, $this->QueryString);
}

if (self::config()->enable_page_anchor && $this->AnchorText) {
$link .= sprintf('#%s', $this->AnchorText);
$link = sprintf('%s#%s', $link, $this->AnchorText);
}

break;
case 'file':
$link = $this->File()->Link();
Expand Down

0 comments on commit 6cf4ca5

Please sign in to comment.