mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Remove references to ComplexTableField
This commit is contained in:
parent
736bde8fe5
commit
9c1638a353
@ -1,35 +0,0 @@
|
|||||||
html { overflow-y: auto !important; }
|
|
||||||
|
|
||||||
body { height: 100%; }
|
|
||||||
|
|
||||||
#ComplexTableField_Popup_DetailForm input.loading { background: white url(../images/network-save.gif) left center no-repeat; padding-left: 16px; }
|
|
||||||
|
|
||||||
.PageControls { padding: 5px; width: 100%; }
|
|
||||||
.PageControls * { vertical-align: middle; }
|
|
||||||
.PageControls .Left { width: 33%; }
|
|
||||||
.PageControls .Count { width: 33%; text-align: center; }
|
|
||||||
.PageControls .Right { width: 33%; text-align: right; }
|
|
||||||
|
|
||||||
.ComplexTableField_Popup td.hidden { display: none; }
|
|
||||||
.ComplexTableField_Popup th.HiddenField { display: none; }
|
|
||||||
.ComplexTableField_Popup span.right { float: right; clear: none; }
|
|
||||||
.ComplexTableField_Popup span.left { float: left; clear: none; }
|
|
||||||
.ComplexTableField_Popup form p.checkbox input { margin: 0pt 1px; }
|
|
||||||
.ComplexTableField_Popup form ul.optionset { margin: 0; padding: 0; }
|
|
||||||
.ComplexTableField_Popup form ul.optionset li { margin: 4px 0; }
|
|
||||||
.ComplexTableField_Popup form div.Actions input { font-size: 11px; margin-top: 10px; }
|
|
||||||
|
|
||||||
/* Pagination */
|
|
||||||
#ComplexTableField_Pagination, #ComplexTableField_Pagination * { vertical-align: middle; }
|
|
||||||
|
|
||||||
#ComplexTableField_Pagination { margin-top: 10px; margin-left: auto; margin-right: auto; font-size: 11px; }
|
|
||||||
#ComplexTableField_Pagination a { /*font-size: 1.2em;*/ font-size: 13px; font-weight: bold; text-decoration: none; width: 1px; height: 1px; margin: 1px; }
|
|
||||||
#ComplexTableField_Pagination a:hover { background: none; }
|
|
||||||
#ComplexTableField_Pagination span { display: inline; font-weight: bold; font-size: 15px; color: #f00; }
|
|
||||||
#ComplexTableField_Pagination div { display: inline; }
|
|
||||||
|
|
||||||
#ComplexTableField_Pagination_Previous { padding-right: 10px; }
|
|
||||||
|
|
||||||
#ComplexTableField_Pagination_Next { padding-left: 10px; }
|
|
||||||
|
|
||||||
#ComplexTableField_Pagination_Next img, #ComplexTableField_Pagination_Previous img { margin: 0 3px 2px; }
|
|
@ -1,135 +0,0 @@
|
|||||||
# Complex Table Field
|
|
||||||
|
|
||||||
## Introduction
|
|
||||||
|
|
||||||
<div class="warning" markdown="1">
|
|
||||||
This field is deprecated in favour of the new [GridField](/reference/grid-field) API.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
Shows a group of DataObjects as a (readonly) tabular list (similiar to `[api:TableListField]`.)
|
|
||||||
|
|
||||||
You can specify limits and filters for the resultset by customizing query-settings (mostly the ID-field on the other
|
|
||||||
side of a one-to-many-relationship).
|
|
||||||
|
|
||||||
See `[api:TableListField]` for more documentation on the base-class
|
|
||||||
|
|
||||||
## Source Input
|
|
||||||
|
|
||||||
See `[api:TableListField]`.
|
|
||||||
|
|
||||||
## Setting Parent/Child-Relations
|
|
||||||
|
|
||||||
`[api:ComplexTableField]` tries to determine the parent-relation automatically by looking at the $has_one property on the listed
|
|
||||||
child, or the record loaded into the surrounding form (see getParentClass() and getParentIdName()). You can force a
|
|
||||||
specific parent relation:
|
|
||||||
|
|
||||||
:::php
|
|
||||||
$myCTF->setParentClass('ProductGroup');
|
|
||||||
|
|
||||||
|
|
||||||
## Customizing Popup
|
|
||||||
|
|
||||||
By default, getCMSFields() is called on the listed DataObject.
|
|
||||||
You can override this behaviour in various ways:
|
|
||||||
|
|
||||||
:::php
|
|
||||||
// option 1: implicit (left out of the constructor), chooses based on Object::useCustomClass or specific instance
|
|
||||||
$myCTF = new ComplexTableField(
|
|
||||||
$this,
|
|
||||||
'MyName',
|
|
||||||
'Product',
|
|
||||||
array('Price','Code')
|
|
||||||
)
|
|
||||||
|
|
||||||
// option 2: constructor
|
|
||||||
$myCTF = new ComplexTableField(
|
|
||||||
$this,
|
|
||||||
'MyName',
|
|
||||||
'Product',
|
|
||||||
array('Price','Code'),
|
|
||||||
new FieldList(
|
|
||||||
new TextField('Price')
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
// option 3: constructor function
|
|
||||||
$myCTF = new ComplexTableField(
|
|
||||||
$this,
|
|
||||||
'MyName',
|
|
||||||
'Product',
|
|
||||||
array('Price','Code'),
|
|
||||||
'getCustomCMSFields'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
## Customizing Display & Functionality
|
|
||||||
|
|
||||||
If you don't want several functions to appear (e.g. no add-link), there's several ways:
|
|
||||||
|
|
||||||
* Use `ComplexTableField->setPermissions(array("show","edit"))` to limit the functionality without touching the template
|
|
||||||
(more secure). Possible values are "show","edit", "delete" and "add".
|
|
||||||
|
|
||||||
* Subclass `[api:ComplexTableField]` and override the rendering-mechanism
|
|
||||||
* Use `ComplexTableField->setTemplate()` and `ComplexTableField->setTemplatePopup()` to provide custom templates
|
|
||||||
|
|
||||||
### Customising fields and Requirements in the popup
|
|
||||||
|
|
||||||
There are several ways to customise the fields in the popup. Often you would want to display more information in the
|
|
||||||
popup as there is more real-estate for you to play with.
|
|
||||||
|
|
||||||
`[api:ComplexTableField]` gives you several options to do this. You can either
|
|
||||||
|
|
||||||
* Pass a FieldList in the constructor.
|
|
||||||
* Pass a String in the constructor.
|
|
||||||
|
|
||||||
The first will simply add the fieldlist to the form, and populate it with the source class.
|
|
||||||
The second will call the String as a method on the source class (Which should return a FieldList) of fields for the
|
|
||||||
Popup.
|
|
||||||
|
|
||||||
You can also customise Javascript which is loaded for the Lightbox. As Requirements::clear() is called when the popup is
|
|
||||||
instantiated, `[api:ComplexTableField]` will look for a function to gather any specific requirements that you might need on your
|
|
||||||
source class. (e.g. Inline Javascript or styling).
|
|
||||||
|
|
||||||
For this, create a function called "getRequirementsForPopup".
|
|
||||||
|
|
||||||
## Getting it working on the front end (not the CMS)
|
|
||||||
|
|
||||||
Sometimes you'll want to have a nice table on the front end, so you can move away from relying on the CMS for maintaing
|
|
||||||
parts of your site.
|
|
||||||
|
|
||||||
You'll have to do something like this in your form:
|
|
||||||
|
|
||||||
:::php
|
|
||||||
$tableField = new ComplexTableField(
|
|
||||||
$controller,
|
|
||||||
'Works',
|
|
||||||
'Work',
|
|
||||||
array(
|
|
||||||
'MyField' => 'My awesome field name'
|
|
||||||
),
|
|
||||||
'getPopupFields'
|
|
||||||
);
|
|
||||||
|
|
||||||
$tableField->setParentClass(false);
|
|
||||||
|
|
||||||
$fields = new FieldList(
|
|
||||||
new HiddenField('ID', ''),
|
|
||||||
$tableField
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
You have to hack in an ID on the form, as the CMS forms have this, and front end forms usually do not.
|
|
||||||
|
|
||||||
It's not a perfect solution, but it works relatively well to get a simple `[api:ComplexTableField]` up and running on the front
|
|
||||||
end.
|
|
||||||
|
|
||||||
To come: Make it a lot more flexible so tables can be easily used on the front end. It also needs to be flexible enough
|
|
||||||
to use a popup as well, out of the box.
|
|
||||||
|
|
||||||
## Subclassing
|
|
||||||
|
|
||||||
Most of the time, you need to override the following methods:
|
|
||||||
|
|
||||||
* ComplexTableField->sourceItems() - querying
|
|
||||||
* ComplexTableField->DetailForm() - form output
|
|
||||||
* ComplexTableField_Popup->saveComplexTableField() - saving
|
|
@ -3,8 +3,7 @@
|
|||||||
Reference articles complement our auto-generated [API docs](http://api.silverstripe.org) in providing deeper introduction into a specific API.
|
Reference articles complement our auto-generated [API docs](http://api.silverstripe.org) in providing deeper introduction into a specific API.
|
||||||
|
|
||||||
* [BBCode](bbcode): Extensible shortcode syntax
|
* [BBCode](bbcode): Extensible shortcode syntax
|
||||||
* [CMS Architecture](cms-architecture): A quick run down to get you started with creating your own data management interface
|
* [CMS Architecture](cms-architecture): A quick run down to get you started with creating your own data management interface.
|
||||||
* [ComplexTableField](complextablefield): Manage records and their relations inside the CMS
|
|
||||||
* [GridField](grid-field): The GridField is a flexible form field for creating tables of data.
|
* [GridField](grid-field): The GridField is a flexible form field for creating tables of data.
|
||||||
* [Database Structure](database-structure): Conventions and best practices for database tables and fields
|
* [Database Structure](database-structure): Conventions and best practices for database tables and fields
|
||||||
* [DataExtension](dataextension): A "mixin" system allowing to extend core classes
|
* [DataExtension](dataextension): A "mixin" system allowing to extend core classes
|
||||||
|
@ -63,12 +63,6 @@ Due to the nested nature of this fields dataset, you can't set any required colu
|
|||||||
Note: You still have to attach some form of `[api:Validator]` to the form to trigger any validation on this field.
|
Note: You still have to attach some form of `[api:Validator]` to the form to trigger any validation on this field.
|
||||||
|
|
||||||
|
|
||||||
### Nested Table Fields
|
|
||||||
|
|
||||||
When you have `[api:TableField]` inside a `[api:ComplexTableField]`, the parent ID may not be known in your
|
|
||||||
getCMSFields() method. In these cases, you can set a value to '$RecordID' in your `[api:TableField]` extra data, and this
|
|
||||||
will be populated with the newly created record id upon save.
|
|
||||||
|
|
||||||
## Known Issues
|
## Known Issues
|
||||||
|
|
||||||
* A `[api:TableField]` doesn't reload any submitted form-data if the saving is interrupted by a failed validation. After
|
* A `[api:TableField]` doesn't reload any submitted form-data if the saving is interrupted by a failed validation. After
|
||||||
|
@ -289,14 +289,12 @@ request](http://docs.jquery.com/Frequently_Asked_Questions#Why_do_my_events_stop
|
|||||||
### Assume Element Collections
|
### Assume Element Collections
|
||||||
|
|
||||||
jQuery is based around collections of DOM elements, the library functions typically handle multiple elements (where it
|
jQuery is based around collections of DOM elements, the library functions typically handle multiple elements (where it
|
||||||
makes sense). Encapsulate your code by nesting your jQuery commands inside a `jQuery().each()` call.
|
makes sense). Encapsulate your code by nesting your jQuery commands inside a `jQuery().each()` call. Example:
|
||||||
|
|
||||||
Example: ComplexTableField implements a paginated table with a pop-up for displaying
|
|
||||||
|
|
||||||
:::js
|
:::js
|
||||||
$('div.ComplexTableField').each(function() {
|
$('.MyCustomField').each(function() {
|
||||||
// This is the over code for the tr elements inside a ComplexTableField.
|
// This is the over code for the elements inside a MyCustomField.
|
||||||
$(this).find('tr').hover(
|
$(this).hover(
|
||||||
// ...
|
// ...
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -1,115 +0,0 @@
|
|||||||
html {
|
|
||||||
overflow-y: auto !important;
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ComplexTableField_Popup_DetailForm input.loading {
|
|
||||||
background: #fff url(../images/network-save.gif) left center no-repeat;
|
|
||||||
padding-left: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.PageControls {
|
|
||||||
padding: 5px;
|
|
||||||
width: 100%;
|
|
||||||
|
|
||||||
* {
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Left {
|
|
||||||
width: 33%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Count {
|
|
||||||
width: 33%;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Right {
|
|
||||||
width: 33%;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.ComplexTableField_Popup {
|
|
||||||
td.hidden {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
th.HiddenField{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
span.right{
|
|
||||||
float: right;
|
|
||||||
clear: none;
|
|
||||||
}
|
|
||||||
span.left{
|
|
||||||
float: left;
|
|
||||||
clear: none;
|
|
||||||
}
|
|
||||||
form p.checkbox input {
|
|
||||||
margin:0pt 1px;
|
|
||||||
}
|
|
||||||
form ul.optionset {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
form ul.optionset li {
|
|
||||||
margin: 4px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
form div.Actions input {
|
|
||||||
font-size: 11px;
|
|
||||||
margin-top: 10px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Pagination */
|
|
||||||
#ComplexTableField_Pagination,
|
|
||||||
#ComplexTableField_Pagination * {
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ComplexTableField_Pagination {
|
|
||||||
margin-top: 10px;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
font-size: 11px;
|
|
||||||
|
|
||||||
a {
|
|
||||||
/*font-size: 1.2em;*/
|
|
||||||
font-size: 13px;
|
|
||||||
font-weight: bold;
|
|
||||||
text-decoration: none;
|
|
||||||
width: 1px;
|
|
||||||
height: 1px;
|
|
||||||
margin: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
a:hover {
|
|
||||||
background: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
span {
|
|
||||||
display: inline;
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 15px;
|
|
||||||
color: #f00;
|
|
||||||
}
|
|
||||||
|
|
||||||
div {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ComplexTableField_Pagination_Previous {
|
|
||||||
padding-right: 10px;
|
|
||||||
}
|
|
||||||
#ComplexTableField_Pagination_Next {
|
|
||||||
padding-left: 10px;
|
|
||||||
}
|
|
||||||
#ComplexTableField_Pagination_Next img,#ComplexTableField_Pagination_Previous img {
|
|
||||||
margin: 0 3px 2px;
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user