Martijn Geerts Posted March 25, 2014 Share Posted March 25, 2014 I'm building a Fieldtype with multiple columns. ( DB structure on the end of the post ) How do I prevent data saving with the API when saving to $page->fieldname and set an wireException ? I only want to allow saving for subfields: $page->fieldname->data_one = 'value1'; (data column will be used for this one) $page->fieldname->data_two = 'value2'; Disallow this: $page->fieldname = 'bad for me'; // DB Structure CREATE TABLE `field_myfield` ( `pages_id` int(10) unsigned NOT NULL, `data` mediumtext NOT NULL, `data_two` mediumtext NOT NULL, `data_int_one` int(11) NOT NULL DEFAULT '0', `data_int_two` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`pages_id`), KEY `data_int_one` (`data_rows`), KEY `data_int_two` (`data_columns`), FULLTEXT KEY `data` (`data`), FULLTEXT KEY `data_two` (`data_one`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; Link to comment Share on other sites More sharing options...
teppo Posted March 25, 2014 Share Posted March 25, 2014 (edited) You should be able to do this with sanitizeValue(). My experience with fieldtypes is very scarce, but AFAIK that's what this method is for Edit: unless you're already using it as a base for your own fileldtype, take a look at how sanitizeValue() of FieldtypeEvents works. That pretty much explains it, I think. If you don't like the value, throw exception. I'm not entirely sure if it's possible to entirely disable setting value via API though, if that's what you're after -- i.e. giving $page->yourfield a value that's an instance of the object it expects -- without disabling page edits etc. too. Edited March 25, 2014 by teppo 1 Link to comment Share on other sites More sharing options...
Martijn Geerts Posted March 25, 2014 Author Share Posted March 25, 2014 I already have the logic in place for all other scenario's, using $value->isChanged('sub-field-name'), The only thing I don't catch right now is the scenario I want to have (prevent save). I will take a look at this. I think you get me started ! Thanks Teppo, Link to comment Share on other sites More sharing options...
Martijn Geerts Posted March 26, 2014 Author Share Posted March 26, 2014 (edited) Now I can't save data from the API side to the field. I moved all data around put most logic in sanitizeValue(). On the admin side, the processInput() is handling the trackChange, so sanitizeValue knows how to kick in. Now if I try to populate data from the API side, trackChanges are never fired, and I don't know where to fire those. Who can give me a clue ? ( I did studied the FieldtypeMapMarker, eventfield fieldtypePhone ) source on github //------- trackChange is fired, but while saving with the API the InputField is ignored. In my case the Inputfield sets some variables. So when I save through the API, some variables are not set, and thus I know the API is saving, not the InputField. Edited March 27, 2014 by Martijn Geerts Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now