Remove references to ComplexTableField

This commit is contained in:
Will Rossiter 2013-05-26 11:03:43 +12:00
parent 736bde8fe5
commit 9c1638a353
6 changed files with 5 additions and 299 deletions

View File

@ -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; }

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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(
// ...
);
});

View File

@ -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;
}