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.
|
||||
|
||||
* [BBCode](bbcode): Extensible shortcode syntax
|
||||
* [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
|
||||
* [CMS Architecture](cms-architecture): A quick run down to get you started with creating your own data management interface.
|
||||
* [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
|
||||
* [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.
|
||||
|
||||
|
||||
### 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
|
||||
|
||||
* 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
|
||||
|
||||
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.
|
||||
|
||||
Example: ComplexTableField implements a paginated table with a pop-up for displaying
|
||||
makes sense). Encapsulate your code by nesting your jQuery commands inside a `jQuery().each()` call. Example:
|
||||
|
||||
:::js
|
||||
$('div.ComplexTableField').each(function() {
|
||||
// This is the over code for the tr elements inside a ComplexTableField.
|
||||
$(this).find('tr').hover(
|
||||
$('.MyCustomField').each(function() {
|
||||
// This is the over code for the elements inside a MyCustomField.
|
||||
$(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