A table input component for Plone.
Project description
DataGridField
=============
Version 1.6
Released under the GNU General Public License
A table input component for Plone. Uses Javascript to make entering tabular data more user friendly process -
there are no round trip HTTP requests to the server when inserting or deleting rows.
Features
--------
o Any number of columns set by a developer
o Any number of rows filled by a user
o Insert and deleting rows without submitting a form
o Many different column types
Requirements
------------
o Plone Plone 2.5.x, Plone 3.0.x, or Plone 3.1.x
o A browser with Javascript support. There isn't yet graceful degeneration for
browsers without or disabled Javascript.
Installation
------------
The 1.6 branch of DataGridField is distributed as both an old-style Zope 2 product and an
egg at the Python Package index. Information about configuring either for a zope instance
house a Plone site can be found by reading the `Installing an Add-on Product`_
tutorial and the "Installing a third party product" section of the `Managing Project with zc.buildout`_ tutorial.
.. _Installing an Add-on Product: http://plone.org/documentation/tutorial/third-party-products
.. _Managing Project with zc.buildout: http://plone.org/documentation/tutorial/buildout/installing-a-third-party-product
Once you've succesfully done this, you can use the Add/Remove Products screen to install the DataGridField into your
site. See below for information about experimenting with the demo types.
Quality
-------
o Tested with Firefox 2.0, IE 6, IE 7
Usage examples
--------------
Simple example with three free text columns::
schema = BaseSchema + Schema((
DataGridField('DemoField',
widget = DataGridWidget(),
columns=('column1','column2','The third')
),
))
Complex example with different column types and user friendly labels::
# Plone imports
from Products.Archetypes.public import DisplayList
from Products.Archetypes.public import *
# Local imports
from Products.DataGridField import DataGridField, DataGridWidget
from Products.DataGridField.Column import Column
from Products.DataGridField.SelectColumn import SelectColumn
class DataGridDemoType(BaseContent):
"""A simple archetype
"""
schema = BaseSchema + Schema((
DataGridField('DemoField',
searchable = True,
columns=("column1", "column2", "select_sample"),
widget = DataGridWidget(
columns={
'column1' : Column("Toholampi city rox"),
'column2' : Column("My friendly name"),
'select_sample' : SelectColumn("Friendly name", vocabulary="getSampleVocabulary")
},
),
),
))
def getSampleVocabulary(self):
"""
"""
""" Get list of possible taggable features from ATVocabularyManager """
return DisplayList(
(("sample", "Sample value 1",),
("sample2", "Sample value 2",),))
For more examples, see unit test code.
Notes
-----
o Since DataGridField 1.5, if you wish to retain old way of automatic row inserting.
Here is a bit logic behind all this - otherwise there will be an extra row
added when you edit DGF and press save.
o You must set property auto_insert = True to DataGridWidget
o You must set property allow_empty_rows = False to DataGridField
Known features
--------------
o Sometimes on Firefox column sizes start changing after the user enters some
data. Not sure if this is a Firefox bug, though.
o Prefilled default values work only for text and select columns
o Radio button and link column postback is not handled propeply. This needs
fixes to very deep into Zope (ZPublisher). If the form validation fails,
link column and radio button columns lost their values.
Demo
----
A demo type is included. It is disabled by default. This type is neither pretty nor very functional,
but demonstrates how a data grid should be used. You can install this type into your site by
running the "DataGridField (Example DGF content types)" from the Generic Setup tool within the ZMI.
References
----------
"Custom Search product":http://plone.org/products/custom-search/ uses DataGridField for editing search form query fields.
"London School of Marketing":http://www.londonschoolofmarketing.com site
uses DataGridField extensively
Contributors
------------
People who have been making this true:
o Mikko Ohtamaa, "Red Innovation":http://www.redinnovation.com
o Danny Bloemendaal
o Radim Novotny
o Justin Ryan
o Alexander Limi
o PloneSolutions <info@plonesolutions.com>
o Martin Aspeli <optilude@gmx.net>
o Paul Everitt, Zope Europe Association <paul@zope-europe.org>
o Development was helped by Vincent Bonamy
Original concept and prototype:
o Geir Baekholt, Plone Solutions <info@plonesolutions.com>
o Paul Everitt, Zope Europe Association <paul@zope-europe.org>
Sponsorship
-----------
Organizations paying up for the development
o "London School of Marketing":http://www.londonschoolofmarketing.com
o "United Nations Environment Programme":http://www.unep.org
(svn/unreleased)
1.6 (2009-1-28)
- Merging of colliding datagridwidget.css and datagridwidget.css.dtml files.
Fixes issue #30: http://plone.org/products/datagridfield/issues/30. Which
file was ultimately selected appears to be inconsistent. If you're
depending upon an overridden version of either and notice bugs with regards
to hidden columns and/or rows appearing or the promise of adding additional
DGF rows when using the FixedColumn, you'd be well suited to reconcile your
customizations with the merged files from r10445 at:
http://dev.plone.org/archetypes/changeset/10445
[andrewb]
From 1.6rc1
- Adding Plone 2.5.x DataGridField profile "default_25x" to overcome difference in
GS namespace for the registration of our skin directory. Without this, one needed
to manually add the correct FSDV within the portal_skins tool for .pt, .dtml,
images, etc. to exist with the DataGridWidget's skins directory. [andrewb]
- Adding back Extensions and Install.py with install() function for consistent
Add/Remove Products experience back to Plone 2.5.x, which did not handle
GenericSetup profile-based installation. The install code delegates to Generic
Setup for maximal code reuse. The justification is that to completely remove
a Add/Remove Product support in Plone 2.5.x between a beta 2 and beta 3 release
is overly extreme. This will workaround will be rectified in a future release. [andrewb]
Note: This was added manually without history because the the eggified version
of DataGridField was moved, rather than copied, thus no history at:
http://dev.plone.org/archetypes/log/Products.DataGridField?action=follow_copy&rev=&stop_rev=&mode=follow_copy
- Updated installation instructions, info about example types, and added note about ceasing
Plone 2.5.x support [andrewb]
- Removed check of "@@plone_lock_info" within example types' GS declarations,
so actions render in pre-Plone locking era [andrewb]
- Made all tests pass in Plone 2.5.x, 3.0.x, and 3.1.x [andrewb]
- Made explicit names for the different GS profiles that one might choose
to install within portal_setup [andrewb]
From 1.6 beta 3 (unreleased)
- Eggified in Products.AddRemoveWidget
[SteveM]
- Register skin layer correctly.
[maurits]
- Move installation to GenericSetup.
[wichert]
- Removed lots and lots of unneeded import. Pyflakes found that Plone 2.1
support has been broken for a while, so stop claiming it's still supported.
[wichert]
- Added validator isDataGridFilled (copied from Poi, where it can
later be removed). Use this as validator on a DataGridField if you
want it to have at least one entry: currently a bogus/hidden entry
always remains even when you remove all real entries, so making a
DataGridField required has no real effect.
See http://plone.org/products/poi/issues/139 and 160.
[maurits]
From 1.6 beta 2
- Disabled INSTALL_DEMO_TYPES from config.py. Repeat after me: "enable INSTALL_DEMO_TYPES;
make changes; run tests; disable INSTALL_DEMO_TYPES; commit" :) [andrewburkhalter]
From 1.5
- Pop-up help column by Juan Grigera
- Added CheckboxColumn by Radim Novotny
- Plone 3.0 compatible (fixed CMFCorePermissions import)
- Fixed http://plone.org/products/datagridfield/issues/16 (applied the patch)
- DataGridField has new property allow_oddeven. Setting this to True will highlight
odd end even rows in the view/edit tables. Default: False
- FixedColumn has optional parameter "visible" (default True). Setting this to False
will hide (using css) column from both - view and edit forms.
From 1.5 RC 3
- Added CheckboxColumn. Implementation based on RadioColumn, so there are same bugs.
CheckboxColumn lose values if any field on the form raises validation error.
Be aware of that, better does not use CheckboxColumn in forms with required fields
or fields with validators.
[Contributor: naro, radim novotny]
From 1.5 RC 2
- Fixed row adding in IE. This was one of the most horrible debugging session
I have had. There was some obscure IE bug which prevented making a DOM
node orignally hidden to visible. I created "hacky" workaround for this.
Tested in IE 6.0 and FF 1.5.
- Wolfram Fenske's I18N patch is disabled, since it doesn't work in Plone 2.5.
The code is almost there. If someone wants to make it complete, it shouldn't
take too much time.
From 1.5 RC 1
- Added workaround for bad DGF initializing which caused empty rows when DGF was created
programmatically
From 1.0 to 1.5
- Plone 2.5 compatibility guaranteed
- DGF row manipulators rewritten. Automatically adding new rows feature is
now optional, thus making it possible for columns to have prefilled
default values without creating a mess. Disabling auto insert is necessary
for columns like SelectWidget which don't have empty default values.
- Refactored page template code to be more easily extendable. Now CSS file
is used for styling DataGridWidgets.
- New column type: Link column
- (Wolfram Fenske) I18N patch
Archetypes widgets have an attribute i18n_domain, which is used to
determine which message catalog to use for translation. In
DataGridField, this attribute is ignored.
I have attached a small patch (in fact, smaller than this bug report)
which fixes these problems. I didn't want to introduce a lot of new
code, so I did the translation of the labels in the Column class, not
in the page template, which might also have been a good way to do it.
Since the functions "getLabel()" and "getColumnLabels()" are only
called by the page template anyway, I believe this is not an issue.
But if you'd rather translate the labels in the page template, please
let me know and I'll write a different patch.
- (Juan Grigera) Marshaller patch
I enjoyed your DataGriedField/Widget product for Plone, and would like
to contributea small patch/bugfix. In the field mutator (set) the
passed value is not always a record, but sometimes a string.
In fact the RFC822Marshaller passes a string.
=============
Version 1.6
Released under the GNU General Public License
A table input component for Plone. Uses Javascript to make entering tabular data more user friendly process -
there are no round trip HTTP requests to the server when inserting or deleting rows.
Features
--------
o Any number of columns set by a developer
o Any number of rows filled by a user
o Insert and deleting rows without submitting a form
o Many different column types
Requirements
------------
o Plone Plone 2.5.x, Plone 3.0.x, or Plone 3.1.x
o A browser with Javascript support. There isn't yet graceful degeneration for
browsers without or disabled Javascript.
Installation
------------
The 1.6 branch of DataGridField is distributed as both an old-style Zope 2 product and an
egg at the Python Package index. Information about configuring either for a zope instance
house a Plone site can be found by reading the `Installing an Add-on Product`_
tutorial and the "Installing a third party product" section of the `Managing Project with zc.buildout`_ tutorial.
.. _Installing an Add-on Product: http://plone.org/documentation/tutorial/third-party-products
.. _Managing Project with zc.buildout: http://plone.org/documentation/tutorial/buildout/installing-a-third-party-product
Once you've succesfully done this, you can use the Add/Remove Products screen to install the DataGridField into your
site. See below for information about experimenting with the demo types.
Quality
-------
o Tested with Firefox 2.0, IE 6, IE 7
Usage examples
--------------
Simple example with three free text columns::
schema = BaseSchema + Schema((
DataGridField('DemoField',
widget = DataGridWidget(),
columns=('column1','column2','The third')
),
))
Complex example with different column types and user friendly labels::
# Plone imports
from Products.Archetypes.public import DisplayList
from Products.Archetypes.public import *
# Local imports
from Products.DataGridField import DataGridField, DataGridWidget
from Products.DataGridField.Column import Column
from Products.DataGridField.SelectColumn import SelectColumn
class DataGridDemoType(BaseContent):
"""A simple archetype
"""
schema = BaseSchema + Schema((
DataGridField('DemoField',
searchable = True,
columns=("column1", "column2", "select_sample"),
widget = DataGridWidget(
columns={
'column1' : Column("Toholampi city rox"),
'column2' : Column("My friendly name"),
'select_sample' : SelectColumn("Friendly name", vocabulary="getSampleVocabulary")
},
),
),
))
def getSampleVocabulary(self):
"""
"""
""" Get list of possible taggable features from ATVocabularyManager """
return DisplayList(
(("sample", "Sample value 1",),
("sample2", "Sample value 2",),))
For more examples, see unit test code.
Notes
-----
o Since DataGridField 1.5, if you wish to retain old way of automatic row inserting.
Here is a bit logic behind all this - otherwise there will be an extra row
added when you edit DGF and press save.
o You must set property auto_insert = True to DataGridWidget
o You must set property allow_empty_rows = False to DataGridField
Known features
--------------
o Sometimes on Firefox column sizes start changing after the user enters some
data. Not sure if this is a Firefox bug, though.
o Prefilled default values work only for text and select columns
o Radio button and link column postback is not handled propeply. This needs
fixes to very deep into Zope (ZPublisher). If the form validation fails,
link column and radio button columns lost their values.
Demo
----
A demo type is included. It is disabled by default. This type is neither pretty nor very functional,
but demonstrates how a data grid should be used. You can install this type into your site by
running the "DataGridField (Example DGF content types)" from the Generic Setup tool within the ZMI.
References
----------
"Custom Search product":http://plone.org/products/custom-search/ uses DataGridField for editing search form query fields.
"London School of Marketing":http://www.londonschoolofmarketing.com site
uses DataGridField extensively
Contributors
------------
People who have been making this true:
o Mikko Ohtamaa, "Red Innovation":http://www.redinnovation.com
o Danny Bloemendaal
o Radim Novotny
o Justin Ryan
o Alexander Limi
o PloneSolutions <info@plonesolutions.com>
o Martin Aspeli <optilude@gmx.net>
o Paul Everitt, Zope Europe Association <paul@zope-europe.org>
o Development was helped by Vincent Bonamy
Original concept and prototype:
o Geir Baekholt, Plone Solutions <info@plonesolutions.com>
o Paul Everitt, Zope Europe Association <paul@zope-europe.org>
Sponsorship
-----------
Organizations paying up for the development
o "London School of Marketing":http://www.londonschoolofmarketing.com
o "United Nations Environment Programme":http://www.unep.org
(svn/unreleased)
1.6 (2009-1-28)
- Merging of colliding datagridwidget.css and datagridwidget.css.dtml files.
Fixes issue #30: http://plone.org/products/datagridfield/issues/30. Which
file was ultimately selected appears to be inconsistent. If you're
depending upon an overridden version of either and notice bugs with regards
to hidden columns and/or rows appearing or the promise of adding additional
DGF rows when using the FixedColumn, you'd be well suited to reconcile your
customizations with the merged files from r10445 at:
http://dev.plone.org/archetypes/changeset/10445
[andrewb]
From 1.6rc1
- Adding Plone 2.5.x DataGridField profile "default_25x" to overcome difference in
GS namespace for the registration of our skin directory. Without this, one needed
to manually add the correct FSDV within the portal_skins tool for .pt, .dtml,
images, etc. to exist with the DataGridWidget's skins directory. [andrewb]
- Adding back Extensions and Install.py with install() function for consistent
Add/Remove Products experience back to Plone 2.5.x, which did not handle
GenericSetup profile-based installation. The install code delegates to Generic
Setup for maximal code reuse. The justification is that to completely remove
a Add/Remove Product support in Plone 2.5.x between a beta 2 and beta 3 release
is overly extreme. This will workaround will be rectified in a future release. [andrewb]
Note: This was added manually without history because the the eggified version
of DataGridField was moved, rather than copied, thus no history at:
http://dev.plone.org/archetypes/log/Products.DataGridField?action=follow_copy&rev=&stop_rev=&mode=follow_copy
- Updated installation instructions, info about example types, and added note about ceasing
Plone 2.5.x support [andrewb]
- Removed check of "@@plone_lock_info" within example types' GS declarations,
so actions render in pre-Plone locking era [andrewb]
- Made all tests pass in Plone 2.5.x, 3.0.x, and 3.1.x [andrewb]
- Made explicit names for the different GS profiles that one might choose
to install within portal_setup [andrewb]
From 1.6 beta 3 (unreleased)
- Eggified in Products.AddRemoveWidget
[SteveM]
- Register skin layer correctly.
[maurits]
- Move installation to GenericSetup.
[wichert]
- Removed lots and lots of unneeded import. Pyflakes found that Plone 2.1
support has been broken for a while, so stop claiming it's still supported.
[wichert]
- Added validator isDataGridFilled (copied from Poi, where it can
later be removed). Use this as validator on a DataGridField if you
want it to have at least one entry: currently a bogus/hidden entry
always remains even when you remove all real entries, so making a
DataGridField required has no real effect.
See http://plone.org/products/poi/issues/139 and 160.
[maurits]
From 1.6 beta 2
- Disabled INSTALL_DEMO_TYPES from config.py. Repeat after me: "enable INSTALL_DEMO_TYPES;
make changes; run tests; disable INSTALL_DEMO_TYPES; commit" :) [andrewburkhalter]
From 1.5
- Pop-up help column by Juan Grigera
- Added CheckboxColumn by Radim Novotny
- Plone 3.0 compatible (fixed CMFCorePermissions import)
- Fixed http://plone.org/products/datagridfield/issues/16 (applied the patch)
- DataGridField has new property allow_oddeven. Setting this to True will highlight
odd end even rows in the view/edit tables. Default: False
- FixedColumn has optional parameter "visible" (default True). Setting this to False
will hide (using css) column from both - view and edit forms.
From 1.5 RC 3
- Added CheckboxColumn. Implementation based on RadioColumn, so there are same bugs.
CheckboxColumn lose values if any field on the form raises validation error.
Be aware of that, better does not use CheckboxColumn in forms with required fields
or fields with validators.
[Contributor: naro, radim novotny]
From 1.5 RC 2
- Fixed row adding in IE. This was one of the most horrible debugging session
I have had. There was some obscure IE bug which prevented making a DOM
node orignally hidden to visible. I created "hacky" workaround for this.
Tested in IE 6.0 and FF 1.5.
- Wolfram Fenske's I18N patch is disabled, since it doesn't work in Plone 2.5.
The code is almost there. If someone wants to make it complete, it shouldn't
take too much time.
From 1.5 RC 1
- Added workaround for bad DGF initializing which caused empty rows when DGF was created
programmatically
From 1.0 to 1.5
- Plone 2.5 compatibility guaranteed
- DGF row manipulators rewritten. Automatically adding new rows feature is
now optional, thus making it possible for columns to have prefilled
default values without creating a mess. Disabling auto insert is necessary
for columns like SelectWidget which don't have empty default values.
- Refactored page template code to be more easily extendable. Now CSS file
is used for styling DataGridWidgets.
- New column type: Link column
- (Wolfram Fenske) I18N patch
Archetypes widgets have an attribute i18n_domain, which is used to
determine which message catalog to use for translation. In
DataGridField, this attribute is ignored.
I have attached a small patch (in fact, smaller than this bug report)
which fixes these problems. I didn't want to introduce a lot of new
code, so I did the translation of the labels in the Column class, not
in the page template, which might also have been a good way to do it.
Since the functions "getLabel()" and "getColumnLabels()" are only
called by the page template anyway, I believe this is not an issue.
But if you'd rather translate the labels in the page template, please
let me know and I'll write a different patch.
- (Juan Grigera) Marshaller patch
I enjoyed your DataGriedField/Widget product for Plone, and would like
to contributea small patch/bugfix. In the field mutator (set) the
passed value is not always a record, but sometimes a string.
In fact the RFC822Marshaller passes a string.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Products.DataGridField-1.6.tar.gz
(57.7 kB
view hashes)
Built Distribution
Products.DataGridField-1.6-py2.4.egg
(114.4 kB
view hashes)
Close
Hashes for Products.DataGridField-1.6.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6eba177b771ab289ff663927f22ee5bf24967da2afaffab4813d54e711807e2a |
|
MD5 | 55dfbe52a8462d5f9821cd89a64cdf3e |
|
BLAKE2b-256 | 3b919c27498a1b8a50c2546177ecd9101b04ab3502d6268c80d76d38b6651067 |
Close
Hashes for Products.DataGridField-1.6-py2.4.egg
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2e9a672d96869500fb4ecd90d7bf2906a356e765ac3137ca65b3e6c1caea3b55 |
|
MD5 | 2c90fd9ffb4f5c8303dbf2be403d413b |
|
BLAKE2b-256 | f2168d54c0ed9ef9ee87df7b5d5ee9dbf99b1271329a69f696564ef7d9d23910 |