Skip to content

Repository files navigation

SortableGridField

CILatest Stable VersionLatest Unstable VersionTotal DownloadsLicense

Adds drag and drop functionality to Silverstripe's GridField

Requirements

  • Silverstripe 6.0+

Installation

Installation is supported via composer only

composer require undefinedoffset/sortablegridfield
  • Run dev/build?flush=all to regenerate the manifest
  • Upon entering the cms and using GridFieldSortableRows component for the first time you make need to add ?flush=all to the end of the address to force the templates to regenerate

Usage

To enable sorting on a has_many relationship set up an integer field on your data object. Also for has_many relationships make sure to set the $default_sort on the DataObject to this new integer field to ensure that the sort order is applied when the relationship is requested. For many_many relationships you must add a $many_many_extraFields static to the DataObject defining the relationship, see the SilverStripe documentation for more information on this. If you are using a many_many relationship you will need to do a custom getter to set the sort order of this relationship for use on the front end see below for an example. As well for many_many relationships the name of the GridField must be the same as the relationship name other wise error's will occur. For new DataObjects you do not need to increment the sort order yourself in your DataObject, GridFieldSortableRows will automatically do this the next time the grid is displayed.

publicfunctiongetMyManyManyRelationship() {
return$this->getManyManyComponents('MyManyManyRelationship')->sort('SortColumn');
}

To enable drag and drop sorting on the GridField add the following to your GridField's config, also make sure you add the namespace UndefinedOffset\SortableGridField\Forms to your file.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent(newGridFieldSortableRows('{Column to store sort}'));

To move an item to another page drag the row over the respective move to page button which appear on the left and right of the GridField and release.

Full code Examples

Events

GridFieldSortableRows provides 4 "events" onBeforeGridFieldRowSort(), onAfterGridFieldRowSort(), onBeforeGridFieldPageSort() and onAfterGridFieldPageSort(). These "events" are passed a clone of the DataList used in GridFieldSortableRows, in the case of page sorting this list has a limit that shows you the current page plus/minus one object. For GridFieldSortableRows that are on ModelAdmin descendants these events are called on the ModelAdmin if they do not have an owner DataObject, if you are using GridFieldSortableRows on a GridField for a DataObject's relationship the events are called on that DataObject.

Appending to the top instead of the bottom

By default GridFieldSortableRows appends to the bottom of the list for performance on large data sets, however you can set new records to append new records to the top by calling setAppendToTop(true) on your GridFieldSortableRows instance.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setAppendToTop(true);

Working with versioned records

By default GridFieldSortableRows does not update any other stage for versioned than the base stage. However you can enable this by calling setUpdateVersionedStage() and passing in the name of the stage you want to update along with the base stage. For example passing in "Live" will also update the "Live" stage when any sort happens.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setUpdateVersionedStage('Live');

Overriding the default relationship name

By default the relationship name comes from the name of the GridField, however you can override this lookup by calling setCustomRelationName() and passing in the name of the relationship. This allows for you to have multiple GridFields on the same form interacting with the same many_many list maybe filtered slightly differently.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setCustomRelationName('MyRelationship');

Reporting an issue

When you're reporting an issue please ensure you specify what version of SilverStripe you are using i.e. 3.0.5, 3.1beta3, 3.0-master etc. Also be sure to include any JavaScript or PHP errors you receive, for PHP errors please ensure you include the full stack trace. Also please include your implementation code (where your setting up your grid field) as well as how you produced the issue. You may also be asked to provide some of the classes to aid in re-producing the issue. Stick with the issue, remember that you seen the issue not the maintainer of the module so it may take a lot of questions to arrive at a fix or answer.

Notes

  • When using with GridFieldManyRelationHandler make sure that you add GridFieldSortableRows to your config before for example GridFieldManyRelationHandler:
//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$config->addComponent(newGridFieldSortableRows('SortOrder'), 'GridFieldManyRelationHandler');

Contributing

Translations

Translations of the natural language strings are managed through a third party translation interface, transifex.com. Newly added strings will be periodically uploaded there for translation, and any new translations will be merged back to the project source code.

Please use https://www.transifex.com/projects/p/silverstripe-sortablegridfield to contribute translations, rather than sending pull requests with YAML files.

About

Adds drag and drop functionality to Silverstripe's GridField

Resources

Contributing

Stars

91 stars

Watchers

9 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - UndefinedOffset/SortableGridField: Adds drag and drop functionality to Silverstripe's GridField · GitHub
Skip to content

Repository files navigation

SortableGridField

CILatest Stable VersionLatest Unstable VersionTotal DownloadsLicense

Adds drag and drop functionality to Silverstripe's GridField

Requirements

  • Silverstripe 6.0+

Installation

Installation is supported via composer only

composer require undefinedoffset/sortablegridfield
  • Run dev/build?flush=all to regenerate the manifest
  • Upon entering the cms and using GridFieldSortableRows component for the first time you make need to add ?flush=all to the end of the address to force the templates to regenerate

Usage

To enable sorting on a has_many relationship set up an integer field on your data object. Also for has_many relationships make sure to set the $default_sort on the DataObject to this new integer field to ensure that the sort order is applied when the relationship is requested. For many_many relationships you must add a $many_many_extraFields static to the DataObject defining the relationship, see the SilverStripe documentation for more information on this. If you are using a many_many relationship you will need to do a custom getter to set the sort order of this relationship for use on the front end see below for an example. As well for many_many relationships the name of the GridField must be the same as the relationship name other wise error's will occur. For new DataObjects you do not need to increment the sort order yourself in your DataObject, GridFieldSortableRows will automatically do this the next time the grid is displayed.

publicfunctiongetMyManyManyRelationship() {
return$this->getManyManyComponents('MyManyManyRelationship')->sort('SortColumn');
}

To enable drag and drop sorting on the GridField add the following to your GridField's config, also make sure you add the namespace UndefinedOffset\SortableGridField\Forms to your file.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent(newGridFieldSortableRows('{Column to store sort}'));

To move an item to another page drag the row over the respective move to page button which appear on the left and right of the GridField and release.

Full code Examples

Events

GridFieldSortableRows provides 4 "events" onBeforeGridFieldRowSort(), onAfterGridFieldRowSort(), onBeforeGridFieldPageSort() and onAfterGridFieldPageSort(). These "events" are passed a clone of the DataList used in GridFieldSortableRows, in the case of page sorting this list has a limit that shows you the current page plus/minus one object. For GridFieldSortableRows that are on ModelAdmin descendants these events are called on the ModelAdmin if they do not have an owner DataObject, if you are using GridFieldSortableRows on a GridField for a DataObject's relationship the events are called on that DataObject.

Appending to the top instead of the bottom

By default GridFieldSortableRows appends to the bottom of the list for performance on large data sets, however you can set new records to append new records to the top by calling setAppendToTop(true) on your GridFieldSortableRows instance.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setAppendToTop(true);

Working with versioned records

By default GridFieldSortableRows does not update any other stage for versioned than the base stage. However you can enable this by calling setUpdateVersionedStage() and passing in the name of the stage you want to update along with the base stage. For example passing in "Live" will also update the "Live" stage when any sort happens.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setUpdateVersionedStage('Live');

Overriding the default relationship name

By default the relationship name comes from the name of the GridField, however you can override this lookup by calling setCustomRelationName() and passing in the name of the relationship. This allows for you to have multiple GridFields on the same form interacting with the same many_many list maybe filtered slightly differently.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setCustomRelationName('MyRelationship');

Reporting an issue

When you're reporting an issue please ensure you specify what version of SilverStripe you are using i.e. 3.0.5, 3.1beta3, 3.0-master etc. Also be sure to include any JavaScript or PHP errors you receive, for PHP errors please ensure you include the full stack trace. Also please include your implementation code (where your setting up your grid field) as well as how you produced the issue. You may also be asked to provide some of the classes to aid in re-producing the issue. Stick with the issue, remember that you seen the issue not the maintainer of the module so it may take a lot of questions to arrive at a fix or answer.

Notes

  • When using with GridFieldManyRelationHandler make sure that you add GridFieldSortableRows to your config before for example GridFieldManyRelationHandler:
//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$config->addComponent(newGridFieldSortableRows('SortOrder'), 'GridFieldManyRelationHandler');

Contributing

Translations

Translations of the natural language strings are managed through a third party translation interface, transifex.com. Newly added strings will be periodically uploaded there for translation, and any new translations will be merged back to the project source code.

Please use https://www.transifex.com/projects/p/silverstripe-sortablegridfield to contribute translations, rather than sending pull requests with YAML files.

About

Adds drag and drop functionality to Silverstripe's GridField

Resources

Contributing

Stars

91 stars

Watchers

9 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - UndefinedOffset/SortableGridField: Adds drag and drop functionality to Silverstripe's GridField · GitHub
Skip to content

Repository files navigation

SortableGridField

CILatest Stable VersionLatest Unstable VersionTotal DownloadsLicense

Adds drag and drop functionality to Silverstripe's GridField

Requirements

  • Silverstripe 6.0+

Installation

Installation is supported via composer only

composer require undefinedoffset/sortablegridfield
  • Run dev/build?flush=all to regenerate the manifest
  • Upon entering the cms and using GridFieldSortableRows component for the first time you make need to add ?flush=all to the end of the address to force the templates to regenerate

Usage

To enable sorting on a has_many relationship set up an integer field on your data object. Also for has_many relationships make sure to set the $default_sort on the DataObject to this new integer field to ensure that the sort order is applied when the relationship is requested. For many_many relationships you must add a $many_many_extraFields static to the DataObject defining the relationship, see the SilverStripe documentation for more information on this. If you are using a many_many relationship you will need to do a custom getter to set the sort order of this relationship for use on the front end see below for an example. As well for many_many relationships the name of the GridField must be the same as the relationship name other wise error's will occur. For new DataObjects you do not need to increment the sort order yourself in your DataObject, GridFieldSortableRows will automatically do this the next time the grid is displayed.

publicfunctiongetMyManyManyRelationship() {
return$this->getManyManyComponents('MyManyManyRelationship')->sort('SortColumn');
}

To enable drag and drop sorting on the GridField add the following to your GridField's config, also make sure you add the namespace UndefinedOffset\SortableGridField\Forms to your file.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent(newGridFieldSortableRows('{Column to store sort}'));

To move an item to another page drag the row over the respective move to page button which appear on the left and right of the GridField and release.

Full code Examples

Events

GridFieldSortableRows provides 4 "events" onBeforeGridFieldRowSort(), onAfterGridFieldRowSort(), onBeforeGridFieldPageSort() and onAfterGridFieldPageSort(). These "events" are passed a clone of the DataList used in GridFieldSortableRows, in the case of page sorting this list has a limit that shows you the current page plus/minus one object. For GridFieldSortableRows that are on ModelAdmin descendants these events are called on the ModelAdmin if they do not have an owner DataObject, if you are using GridFieldSortableRows on a GridField for a DataObject's relationship the events are called on that DataObject.

Appending to the top instead of the bottom

By default GridFieldSortableRows appends to the bottom of the list for performance on large data sets, however you can set new records to append new records to the top by calling setAppendToTop(true) on your GridFieldSortableRows instance.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setAppendToTop(true);

Working with versioned records

By default GridFieldSortableRows does not update any other stage for versioned than the base stage. However you can enable this by calling setUpdateVersionedStage() and passing in the name of the stage you want to update along with the base stage. For example passing in "Live" will also update the "Live" stage when any sort happens.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setUpdateVersionedStage('Live');

Overriding the default relationship name

By default the relationship name comes from the name of the GridField, however you can override this lookup by calling setCustomRelationName() and passing in the name of the relationship. This allows for you to have multiple GridFields on the same form interacting with the same many_many list maybe filtered slightly differently.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setCustomRelationName('MyRelationship');

Reporting an issue

When you're reporting an issue please ensure you specify what version of SilverStripe you are using i.e. 3.0.5, 3.1beta3, 3.0-master etc. Also be sure to include any JavaScript or PHP errors you receive, for PHP errors please ensure you include the full stack trace. Also please include your implementation code (where your setting up your grid field) as well as how you produced the issue. You may also be asked to provide some of the classes to aid in re-producing the issue. Stick with the issue, remember that you seen the issue not the maintainer of the module so it may take a lot of questions to arrive at a fix or answer.

Notes

  • When using with GridFieldManyRelationHandler make sure that you add GridFieldSortableRows to your config before for example GridFieldManyRelationHandler:
//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$config->addComponent(newGridFieldSortableRows('SortOrder'), 'GridFieldManyRelationHandler');

Contributing

Translations

Translations of the natural language strings are managed through a third party translation interface, transifex.com. Newly added strings will be periodically uploaded there for translation, and any new translations will be merged back to the project source code.

Please use https://www.transifex.com/projects/p/silverstripe-sortablegridfield to contribute translations, rather than sending pull requests with YAML files.

About

Adds drag and drop functionality to Silverstripe's GridField

Resources

Contributing

Stars

91 stars

Watchers

9 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - UndefinedOffset/SortableGridField: Adds drag and drop functionality to Silverstripe's GridField · GitHub
Skip to content

Repository files navigation

SortableGridField

CILatest Stable VersionLatest Unstable VersionTotal DownloadsLicense

Adds drag and drop functionality to Silverstripe's GridField

Requirements

  • Silverstripe 6.0+

Installation

Installation is supported via composer only

composer require undefinedoffset/sortablegridfield
  • Run dev/build?flush=all to regenerate the manifest
  • Upon entering the cms and using GridFieldSortableRows component for the first time you make need to add ?flush=all to the end of the address to force the templates to regenerate

Usage

To enable sorting on a has_many relationship set up an integer field on your data object. Also for has_many relationships make sure to set the $default_sort on the DataObject to this new integer field to ensure that the sort order is applied when the relationship is requested. For many_many relationships you must add a $many_many_extraFields static to the DataObject defining the relationship, see the SilverStripe documentation for more information on this. If you are using a many_many relationship you will need to do a custom getter to set the sort order of this relationship for use on the front end see below for an example. As well for many_many relationships the name of the GridField must be the same as the relationship name other wise error's will occur. For new DataObjects you do not need to increment the sort order yourself in your DataObject, GridFieldSortableRows will automatically do this the next time the grid is displayed.

publicfunctiongetMyManyManyRelationship() {
return$this->getManyManyComponents('MyManyManyRelationship')->sort('SortColumn');
}

To enable drag and drop sorting on the GridField add the following to your GridField's config, also make sure you add the namespace UndefinedOffset\SortableGridField\Forms to your file.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent(newGridFieldSortableRows('{Column to store sort}'));

To move an item to another page drag the row over the respective move to page button which appear on the left and right of the GridField and release.

Full code Examples

Events

GridFieldSortableRows provides 4 "events" onBeforeGridFieldRowSort(), onAfterGridFieldRowSort(), onBeforeGridFieldPageSort() and onAfterGridFieldPageSort(). These "events" are passed a clone of the DataList used in GridFieldSortableRows, in the case of page sorting this list has a limit that shows you the current page plus/minus one object. For GridFieldSortableRows that are on ModelAdmin descendants these events are called on the ModelAdmin if they do not have an owner DataObject, if you are using GridFieldSortableRows on a GridField for a DataObject's relationship the events are called on that DataObject.

Appending to the top instead of the bottom

By default GridFieldSortableRows appends to the bottom of the list for performance on large data sets, however you can set new records to append new records to the top by calling setAppendToTop(true) on your GridFieldSortableRows instance.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setAppendToTop(true);

Working with versioned records

By default GridFieldSortableRows does not update any other stage for versioned than the base stage. However you can enable this by calling setUpdateVersionedStage() and passing in the name of the stage you want to update along with the base stage. For example passing in "Live" will also update the "Live" stage when any sort happens.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setUpdateVersionedStage('Live');

Overriding the default relationship name

By default the relationship name comes from the name of the GridField, however you can override this lookup by calling setCustomRelationName() and passing in the name of the relationship. This allows for you to have multiple GridFields on the same form interacting with the same many_many list maybe filtered slightly differently.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setCustomRelationName('MyRelationship');

Reporting an issue

When you're reporting an issue please ensure you specify what version of SilverStripe you are using i.e. 3.0.5, 3.1beta3, 3.0-master etc. Also be sure to include any JavaScript or PHP errors you receive, for PHP errors please ensure you include the full stack trace. Also please include your implementation code (where your setting up your grid field) as well as how you produced the issue. You may also be asked to provide some of the classes to aid in re-producing the issue. Stick with the issue, remember that you seen the issue not the maintainer of the module so it may take a lot of questions to arrive at a fix or answer.

Notes

  • When using with GridFieldManyRelationHandler make sure that you add GridFieldSortableRows to your config before for example GridFieldManyRelationHandler:
//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$config->addComponent(newGridFieldSortableRows('SortOrder'), 'GridFieldManyRelationHandler');

Contributing

Translations

Translations of the natural language strings are managed through a third party translation interface, transifex.com. Newly added strings will be periodically uploaded there for translation, and any new translations will be merged back to the project source code.

Please use https://www.transifex.com/projects/p/silverstripe-sortablegridfield to contribute translations, rather than sending pull requests with YAML files.

About

Adds drag and drop functionality to Silverstripe's GridField

Resources

Contributing

Stars

91 stars

Watchers

9 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - UndefinedOffset/SortableGridField: Adds drag and drop functionality to Silverstripe's GridField · GitHub
Skip to content

Repository files navigation

SortableGridField

CILatest Stable VersionLatest Unstable VersionTotal DownloadsLicense

Adds drag and drop functionality to Silverstripe's GridField

Requirements

  • Silverstripe 6.0+

Installation

Installation is supported via composer only

composer require undefinedoffset/sortablegridfield
  • Run dev/build?flush=all to regenerate the manifest
  • Upon entering the cms and using GridFieldSortableRows component for the first time you make need to add ?flush=all to the end of the address to force the templates to regenerate

Usage

To enable sorting on a has_many relationship set up an integer field on your data object. Also for has_many relationships make sure to set the $default_sort on the DataObject to this new integer field to ensure that the sort order is applied when the relationship is requested. For many_many relationships you must add a $many_many_extraFields static to the DataObject defining the relationship, see the SilverStripe documentation for more information on this. If you are using a many_many relationship you will need to do a custom getter to set the sort order of this relationship for use on the front end see below for an example. As well for many_many relationships the name of the GridField must be the same as the relationship name other wise error's will occur. For new DataObjects you do not need to increment the sort order yourself in your DataObject, GridFieldSortableRows will automatically do this the next time the grid is displayed.

publicfunctiongetMyManyManyRelationship() {
return$this->getManyManyComponents('MyManyManyRelationship')->sort('SortColumn');
}

To enable drag and drop sorting on the GridField add the following to your GridField's config, also make sure you add the namespace UndefinedOffset\SortableGridField\Forms to your file.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent(newGridFieldSortableRows('{Column to store sort}'));

To move an item to another page drag the row over the respective move to page button which appear on the left and right of the GridField and release.

Full code Examples

Events

GridFieldSortableRows provides 4 "events" onBeforeGridFieldRowSort(), onAfterGridFieldRowSort(), onBeforeGridFieldPageSort() and onAfterGridFieldPageSort(). These "events" are passed a clone of the DataList used in GridFieldSortableRows, in the case of page sorting this list has a limit that shows you the current page plus/minus one object. For GridFieldSortableRows that are on ModelAdmin descendants these events are called on the ModelAdmin if they do not have an owner DataObject, if you are using GridFieldSortableRows on a GridField for a DataObject's relationship the events are called on that DataObject.

Appending to the top instead of the bottom

By default GridFieldSortableRows appends to the bottom of the list for performance on large data sets, however you can set new records to append new records to the top by calling setAppendToTop(true) on your GridFieldSortableRows instance.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setAppendToTop(true);

Working with versioned records

By default GridFieldSortableRows does not update any other stage for versioned than the base stage. However you can enable this by calling setUpdateVersionedStage() and passing in the name of the stage you want to update along with the base stage. For example passing in "Live" will also update the "Live" stage when any sort happens.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setUpdateVersionedStage('Live');

Overriding the default relationship name

By default the relationship name comes from the name of the GridField, however you can override this lookup by calling setCustomRelationName() and passing in the name of the relationship. This allows for you to have multiple GridFields on the same form interacting with the same many_many list maybe filtered slightly differently.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setCustomRelationName('MyRelationship');

Reporting an issue

When you're reporting an issue please ensure you specify what version of SilverStripe you are using i.e. 3.0.5, 3.1beta3, 3.0-master etc. Also be sure to include any JavaScript or PHP errors you receive, for PHP errors please ensure you include the full stack trace. Also please include your implementation code (where your setting up your grid field) as well as how you produced the issue. You may also be asked to provide some of the classes to aid in re-producing the issue. Stick with the issue, remember that you seen the issue not the maintainer of the module so it may take a lot of questions to arrive at a fix or answer.

Notes

  • When using with GridFieldManyRelationHandler make sure that you add GridFieldSortableRows to your config before for example GridFieldManyRelationHandler:
//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$config->addComponent(newGridFieldSortableRows('SortOrder'), 'GridFieldManyRelationHandler');

Contributing

Translations

Translations of the natural language strings are managed through a third party translation interface, transifex.com. Newly added strings will be periodically uploaded there for translation, and any new translations will be merged back to the project source code.

Please use https://www.transifex.com/projects/p/silverstripe-sortablegridfield to contribute translations, rather than sending pull requests with YAML files.

About

Adds drag and drop functionality to Silverstripe's GridField

Resources

Contributing

Stars

91 stars

Watchers

9 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - UndefinedOffset/SortableGridField: Adds drag and drop functionality to Silverstripe's GridField · GitHub
Skip to content

Repository files navigation

SortableGridField

CILatest Stable VersionLatest Unstable VersionTotal DownloadsLicense

Adds drag and drop functionality to Silverstripe's GridField

Requirements

  • Silverstripe 6.0+

Installation

Installation is supported via composer only

composer require undefinedoffset/sortablegridfield
  • Run dev/build?flush=all to regenerate the manifest
  • Upon entering the cms and using GridFieldSortableRows component for the first time you make need to add ?flush=all to the end of the address to force the templates to regenerate

Usage

To enable sorting on a has_many relationship set up an integer field on your data object. Also for has_many relationships make sure to set the $default_sort on the DataObject to this new integer field to ensure that the sort order is applied when the relationship is requested. For many_many relationships you must add a $many_many_extraFields static to the DataObject defining the relationship, see the SilverStripe documentation for more information on this. If you are using a many_many relationship you will need to do a custom getter to set the sort order of this relationship for use on the front end see below for an example. As well for many_many relationships the name of the GridField must be the same as the relationship name other wise error's will occur. For new DataObjects you do not need to increment the sort order yourself in your DataObject, GridFieldSortableRows will automatically do this the next time the grid is displayed.

publicfunctiongetMyManyManyRelationship() {
return$this->getManyManyComponents('MyManyManyRelationship')->sort('SortColumn');
}

To enable drag and drop sorting on the GridField add the following to your GridField's config, also make sure you add the namespace UndefinedOffset\SortableGridField\Forms to your file.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent(newGridFieldSortableRows('{Column to store sort}'));

To move an item to another page drag the row over the respective move to page button which appear on the left and right of the GridField and release.

Full code Examples

Events

GridFieldSortableRows provides 4 "events" onBeforeGridFieldRowSort(), onAfterGridFieldRowSort(), onBeforeGridFieldPageSort() and onAfterGridFieldPageSort(). These "events" are passed a clone of the DataList used in GridFieldSortableRows, in the case of page sorting this list has a limit that shows you the current page plus/minus one object. For GridFieldSortableRows that are on ModelAdmin descendants these events are called on the ModelAdmin if they do not have an owner DataObject, if you are using GridFieldSortableRows on a GridField for a DataObject's relationship the events are called on that DataObject.

Appending to the top instead of the bottom

By default GridFieldSortableRows appends to the bottom of the list for performance on large data sets, however you can set new records to append new records to the top by calling setAppendToTop(true) on your GridFieldSortableRows instance.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setAppendToTop(true);

Working with versioned records

By default GridFieldSortableRows does not update any other stage for versioned than the base stage. However you can enable this by calling setUpdateVersionedStage() and passing in the name of the stage you want to update along with the base stage. For example passing in "Live" will also update the "Live" stage when any sort happens.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setUpdateVersionedStage('Live');

Overriding the default relationship name

By default the relationship name comes from the name of the GridField, however you can override this lookup by calling setCustomRelationName() and passing in the name of the relationship. This allows for you to have multiple GridFields on the same form interacting with the same many_many list maybe filtered slightly differently.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setCustomRelationName('MyRelationship');

Reporting an issue

When you're reporting an issue please ensure you specify what version of SilverStripe you are using i.e. 3.0.5, 3.1beta3, 3.0-master etc. Also be sure to include any JavaScript or PHP errors you receive, for PHP errors please ensure you include the full stack trace. Also please include your implementation code (where your setting up your grid field) as well as how you produced the issue. You may also be asked to provide some of the classes to aid in re-producing the issue. Stick with the issue, remember that you seen the issue not the maintainer of the module so it may take a lot of questions to arrive at a fix or answer.

Notes

  • When using with GridFieldManyRelationHandler make sure that you add GridFieldSortableRows to your config before for example GridFieldManyRelationHandler:
//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$config->addComponent(newGridFieldSortableRows('SortOrder'), 'GridFieldManyRelationHandler');

Contributing

Translations

Translations of the natural language strings are managed through a third party translation interface, transifex.com. Newly added strings will be periodically uploaded there for translation, and any new translations will be merged back to the project source code.

Please use https://www.transifex.com/projects/p/silverstripe-sortablegridfield to contribute translations, rather than sending pull requests with YAML files.

About

Adds drag and drop functionality to Silverstripe's GridField

Resources

Contributing

Stars

91 stars

Watchers

9 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - UndefinedOffset/SortableGridField: Adds drag and drop functionality to Silverstripe's GridField · GitHub
Skip to content

Repository files navigation

SortableGridField

CILatest Stable VersionLatest Unstable VersionTotal DownloadsLicense

Adds drag and drop functionality to Silverstripe's GridField

Requirements

  • Silverstripe 6.0+

Installation

Installation is supported via composer only

composer require undefinedoffset/sortablegridfield
  • Run dev/build?flush=all to regenerate the manifest
  • Upon entering the cms and using GridFieldSortableRows component for the first time you make need to add ?flush=all to the end of the address to force the templates to regenerate

Usage

To enable sorting on a has_many relationship set up an integer field on your data object. Also for has_many relationships make sure to set the $default_sort on the DataObject to this new integer field to ensure that the sort order is applied when the relationship is requested. For many_many relationships you must add a $many_many_extraFields static to the DataObject defining the relationship, see the SilverStripe documentation for more information on this. If you are using a many_many relationship you will need to do a custom getter to set the sort order of this relationship for use on the front end see below for an example. As well for many_many relationships the name of the GridField must be the same as the relationship name other wise error's will occur. For new DataObjects you do not need to increment the sort order yourself in your DataObject, GridFieldSortableRows will automatically do this the next time the grid is displayed.

publicfunctiongetMyManyManyRelationship() {
return$this->getManyManyComponents('MyManyManyRelationship')->sort('SortColumn');
}

To enable drag and drop sorting on the GridField add the following to your GridField's config, also make sure you add the namespace UndefinedOffset\SortableGridField\Forms to your file.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent(newGridFieldSortableRows('{Column to store sort}'));

To move an item to another page drag the row over the respective move to page button which appear on the left and right of the GridField and release.

Full code Examples

Events

GridFieldSortableRows provides 4 "events" onBeforeGridFieldRowSort(), onAfterGridFieldRowSort(), onBeforeGridFieldPageSort() and onAfterGridFieldPageSort(). These "events" are passed a clone of the DataList used in GridFieldSortableRows, in the case of page sorting this list has a limit that shows you the current page plus/minus one object. For GridFieldSortableRows that are on ModelAdmin descendants these events are called on the ModelAdmin if they do not have an owner DataObject, if you are using GridFieldSortableRows on a GridField for a DataObject's relationship the events are called on that DataObject.

Appending to the top instead of the bottom

By default GridFieldSortableRows appends to the bottom of the list for performance on large data sets, however you can set new records to append new records to the top by calling setAppendToTop(true) on your GridFieldSortableRows instance.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setAppendToTop(true);

Working with versioned records

By default GridFieldSortableRows does not update any other stage for versioned than the base stage. However you can enable this by calling setUpdateVersionedStage() and passing in the name of the stage you want to update along with the base stage. For example passing in "Live" will also update the "Live" stage when any sort happens.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setUpdateVersionedStage('Live');

Overriding the default relationship name

By default the relationship name comes from the name of the GridField, however you can override this lookup by calling setCustomRelationName() and passing in the name of the relationship. This allows for you to have multiple GridFields on the same form interacting with the same many_many list maybe filtered slightly differently.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setCustomRelationName('MyRelationship');

Reporting an issue

When you're reporting an issue please ensure you specify what version of SilverStripe you are using i.e. 3.0.5, 3.1beta3, 3.0-master etc. Also be sure to include any JavaScript or PHP errors you receive, for PHP errors please ensure you include the full stack trace. Also please include your implementation code (where your setting up your grid field) as well as how you produced the issue. You may also be asked to provide some of the classes to aid in re-producing the issue. Stick with the issue, remember that you seen the issue not the maintainer of the module so it may take a lot of questions to arrive at a fix or answer.

Notes

  • When using with GridFieldManyRelationHandler make sure that you add GridFieldSortableRows to your config before for example GridFieldManyRelationHandler:
//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$config->addComponent(newGridFieldSortableRows('SortOrder'), 'GridFieldManyRelationHandler');

Contributing

Translations

Translations of the natural language strings are managed through a third party translation interface, transifex.com. Newly added strings will be periodically uploaded there for translation, and any new translations will be merged back to the project source code.

Please use https://www.transifex.com/projects/p/silverstripe-sortablegridfield to contribute translations, rather than sending pull requests with YAML files.

About

Adds drag and drop functionality to Silverstripe's GridField

Resources

Contributing

Stars

91 stars

Watchers

9 watching

Forks

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - UndefinedOffset/SortableGridField: Adds drag and drop functionality to Silverstripe's GridField · GitHub
Skip to content

Repository files navigation

SortableGridField

CILatest Stable VersionLatest Unstable VersionTotal DownloadsLicense

Adds drag and drop functionality to Silverstripe's GridField

Requirements

  • Silverstripe 6.0+

Installation

Installation is supported via composer only

composer require undefinedoffset/sortablegridfield
  • Run dev/build?flush=all to regenerate the manifest
  • Upon entering the cms and using GridFieldSortableRows component for the first time you make need to add ?flush=all to the end of the address to force the templates to regenerate

Usage

To enable sorting on a has_many relationship set up an integer field on your data object. Also for has_many relationships make sure to set the $default_sort on the DataObject to this new integer field to ensure that the sort order is applied when the relationship is requested. For many_many relationships you must add a $many_many_extraFields static to the DataObject defining the relationship, see the SilverStripe documentation for more information on this. If you are using a many_many relationship you will need to do a custom getter to set the sort order of this relationship for use on the front end see below for an example. As well for many_many relationships the name of the GridField must be the same as the relationship name other wise error's will occur. For new DataObjects you do not need to increment the sort order yourself in your DataObject, GridFieldSortableRows will automatically do this the next time the grid is displayed.

publicfunctiongetMyManyManyRelationship() {
return$this->getManyManyComponents('MyManyManyRelationship')->sort('SortColumn');
}

To enable drag and drop sorting on the GridField add the following to your GridField's config, also make sure you add the namespace UndefinedOffset\SortableGridField\Forms to your file.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent(newGridFieldSortableRows('{Column to store sort}'));

To move an item to another page drag the row over the respective move to page button which appear on the left and right of the GridField and release.

Full code Examples

Events

GridFieldSortableRows provides 4 "events" onBeforeGridFieldRowSort(), onAfterGridFieldRowSort(), onBeforeGridFieldPageSort() and onAfterGridFieldPageSort(). These "events" are passed a clone of the DataList used in GridFieldSortableRows, in the case of page sorting this list has a limit that shows you the current page plus/minus one object. For GridFieldSortableRows that are on ModelAdmin descendants these events are called on the ModelAdmin if they do not have an owner DataObject, if you are using GridFieldSortableRows on a GridField for a DataObject's relationship the events are called on that DataObject.

Appending to the top instead of the bottom

By default GridFieldSortableRows appends to the bottom of the list for performance on large data sets, however you can set new records to append new records to the top by calling setAppendToTop(true) on your GridFieldSortableRows instance.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setAppendToTop(true);

Working with versioned records

By default GridFieldSortableRows does not update any other stage for versioned than the base stage. However you can enable this by calling setUpdateVersionedStage() and passing in the name of the stage you want to update along with the base stage. For example passing in "Live" will also update the "Live" stage when any sort happens.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setUpdateVersionedStage('Live');

Overriding the default relationship name

By default the relationship name comes from the name of the GridField, however you can override this lookup by calling setCustomRelationName() and passing in the name of the relationship. This allows for you to have multiple GridFields on the same form interacting with the same many_many list maybe filtered slightly differently.

//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$myGridConfig->addComponent($sortable = newGridFieldSortableRows('SortOrder'));
$sortable->setCustomRelationName('MyRelationship');

Reporting an issue

When you're reporting an issue please ensure you specify what version of SilverStripe you are using i.e. 3.0.5, 3.1beta3, 3.0-master etc. Also be sure to include any JavaScript or PHP errors you receive, for PHP errors please ensure you include the full stack trace. Also please include your implementation code (where your setting up your grid field) as well as how you produced the issue. You may also be asked to provide some of the classes to aid in re-producing the issue. Stick with the issue, remember that you seen the issue not the maintainer of the module so it may take a lot of questions to arrive at a fix or answer.

Notes

  • When using with GridFieldManyRelationHandler make sure that you add GridFieldSortableRows to your config before for example GridFieldManyRelationHandler:
//Namespace imports should be added to the top of your fileuseUndefinedOffset\SortableGridField\Forms\GridFieldSortableRows;
$config->addComponent(newGridFieldSortableRows('SortOrder'), 'GridFieldManyRelationHandler');

Contributing

Translations

Translations of the natural language strings are managed through a third party translation interface, transifex.com. Newly added strings will be periodically uploaded there for translation, and any new translations will be merged back to the project source code.

Please use https://www.transifex.com/projects/p/silverstripe-sortablegridfield to contribute translations, rather than sending pull requests with YAML files.

About

Adds drag and drop functionality to Silverstripe's GridField

Resources

Contributing

Stars

91 stars

Watchers

9 watching

Forks

Releases

Used by

Contributors

Languages