[TYPO3-core] RFC: #9562: Feature: onChange has no effect

Dan Osipov dosipov at phillyburbs.com
Fri Jan 16 05:19:59 CET 2009


Reminder.


Dan Osipov
Calkins Media
http://danosipov.com/blog/

Dan Osipov wrote:
> Attached is the second version of the patch.
> 
> Difference from the first version is that onChange check has been 
> removed, and a better check for IRRE is used (fixes the issue of needing 
> to have more than one element).
> 
> If you're using the test extension, please add the requestUpdate 
> directive for 'rld' field.
> 
> Dan Osipov
> Calkins Media
> http://danosipov.com/blog/
> 
> Dan Osipov wrote:
>> Hello,
>>
>> This is an SVN patch request
>>
>> Type: Missing Feature
>> Branches: Trunk
>> BT Reference: http://bugs.typo3.org/view.php?id=9562
>>
>> Problem:
>> FlexForms have an onChange => reload directive, which reloads the form 
>> if a field is changed. This is very useful. Regular forms also have 
>> 'requestUpdate' => field which does the same thing. However, there are 
>> two problems: 1) regular TCEForms ignore the onChange directive, and 
>> 2) IRRE ignores these completely.
>>
>> Solution:
>> Attached patch fixes the first problem by adding a condition to the if 
>> statement, which reloads the form if a field with onChange = reload is 
>> changed. It also adds a feature to IRRE, so that if a field is 
>> changed, the record is reloaded. This is done using AJAX, so the 
>> entire page is not reloaded - just the record currently being edited. 
>> Also, the change is not saved in the DB - it's changed on the fly, and 
>> may impact how other fields rendered, but its not saved until the form 
>> is saved.
>>
>> How to test:
>> Here are some sample TCA configurations I have used during development 
>> of this patch:
>>
>> IRRE field:
>>     "tx_pbwltottnews_widget_id" => Array (               "label" => 
>> "Widgets",
>>         "config" => Array (
>>             "type" => "inline",
>>                     "foreign_table" => "tx_pbwidgetlibrary_mm",
>>                     "foreign_table_field" => "ext_table",
>>                     "foreign_field" => "record_id",
>>                     "foreign_sortby" => "sorting",
>>                     "foreign_label" => "widget_id",
>>         )
>>     ),
>>
>> MM table:
>> $TCA["tx_pbwidgetlibrary_mm"] = array (
>>     "ctrl" => array (
>>         'title'     => 
>> 'LLL:EXT:pb_widget_library/locallang_db.xml:tx_pbwidgetlibrary_mm',
>>         'label'     => 'widget_id',
>>         'default_sortby' => "ORDER BY sorting",
>>         'delete' => 'deleted',
>>     'requestUpdate' => 'type',      // This is what tells the field to 
>> reload!
>>         'enablecolumns' => array (
>>             'disabled' => 'hidden',
>>         ),
>>         'dynamicConfigFile' => t3lib_extMgm::extPath($_EXTKEY).'tca.php',
>>         'iconfile'          => 
>> t3lib_extMgm::extRelPath($_EXTKEY).'icon_tx_pbwidgetlibrary_mm.gif',
>>     ),
>>     "feInterface" => array (
>>         "fe_admin_fieldList" => "widget_id, type, record_id",
>>     )
>> );
>>
>> MM table TCA:
>> $TCA["tx_pbwidgetlibrary_mm"] = array (
>>     "ctrl" => $TCA["tx_pbwidgetlibrary_mm"]["ctrl"],
>>     "interface" => array (
>>         "showRecordFieldList" => "hidden"
>>     ),
>>     "feInterface" => $TCA["tx_pbwidgetlibrary_mm"]["feInterface"],
>>     "columns" => array (
>>         "widget_id" => Array (
>>             "label" => "Widget",
>>             "config" => Array (
>>                 "type" => "select",
>>                 "foreign_table" => "tx_pbwidgetlibrary_widget",
>>                 "foreign_table_where" => " AND 
>> tx_pbwidgetlibrary_widget.type='###REC_FIELD_type###'",
>>                 "maxitems" => 1,
>>             )
>>         ),
>>         "type" => Array (
>>             "exclude" => 1,
>>             "label" => 
>> "LLL:EXT:pb_widget_library/locallang_db.xml:tx_pbwidgetlibrary_widget.type", 
>>
>>             "config" => Array(
>>                 "type" => "select",
>>                 "itemsProcFunc" => 
>> "tx_pbwidgetlibrary_addFieldsToFlexForm->listWidgets",
>>                 "onChange" => "reload",   // This is an alternative 
>> way to get the form to reload.
>>             )
>>         ),
>>         "record_id" => Array (                   "exclude" => 1,       
>>             "label" => "Record",                   "config" => Array (
>>                 "type" => "select",
>>                 "foreign_table" => "tt_news",
>>             )
>>         ),
>>         "sorting" => Array (
>>             "config" => Array (
>>                  "type" => "passthrough",
>>              )
>>         ),
>>     ),
>>     "types" => Array (
>>         "0" => Array("showitem" => "hidden;;1, title;;;;2-2-2, type, 
>> widget_id;;;;3-3-3, record_id, sorting")
>>     ),
>>     "palettes" => Array (
>>         "1" => Array("showitem" => "")
>>     )
>> );
>>
>> Let me know if you have questions.
>> FYI: This is my first patch to the core (and it wasn't an easy one), 
>> so please, be nice ;)
>>


More information about the TYPO3-team-core mailing list