Skip to content

Commit c5b63fd

Browse files
committed
NEW Add fieldPrefix and document multiple use case
1 parent 859bfdd commit c5b63fd

File tree

2 files changed

+75
-19
lines changed

2 files changed

+75
-19
lines changed

README.md

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -65,20 +65,49 @@ use SilverStripe\ORM\DataObject;
6565

6666
class AddressObject extends DataObject
6767
{
68-
private static $db = [
69-
'Address' => 'Text',
70-
'PostalLine1' => 'Varchar(200)',
71-
'PostalLine2' => 'Varchar(200)',
72-
'PostalLine3' => 'Varchar(200)',
73-
'PostalLine4' => 'Varchar(200)',
74-
'PostalLine5' => 'Varchar(200)',
75-
'PostalLine6' => 'Varchar(200)',
76-
'Suburb' => 'Varchar(200)',
77-
'City' => 'Varchar(200)',
78-
'Postcode' => 'Varchar(200)',
79-
'Latitude' => 'Varchar(200)',
80-
'Longitude' => 'Varchar(200)'
81-
];
68+
private static $db = [
69+
'Address' => 'Text',
70+
'PostalLine1' => 'Varchar(200)',
71+
'PostalLine2' => 'Varchar(200)',
72+
'PostalLine3' => 'Varchar(200)',
73+
'PostalLine4' => 'Varchar(200)',
74+
'PostalLine5' => 'Varchar(200)',
75+
'PostalLine6' => 'Varchar(200)',
76+
'Suburb' => 'Varchar(200)',
77+
'City' => 'Varchar(200)',
78+
'Postcode' => 'Varchar(200)',
79+
'Latitude' => 'Varchar(200)',
80+
'Longitude' => 'Varchar(200)'
81+
];
8282
}
8383
```
8484

85+
To prefix these fields, call `setFieldPrefix($prefix)` on your
86+
`AddressFinderField` instance.
87+
88+
```php
89+
AddressFinderField::create('HomeAddress')
90+
->setFieldPrefix('Home')
91+
AddressFinderField::create('WorkAddress')
92+
->setFieldPrefix('Work')
93+
94+
// requires the following model
95+
private static $db = [
96+
'HomeAddress' => 'Text',
97+
'HomeAddressPostalLine1' => 'Varchar(200)',
98+
'HomeAddressPostalLine2' => 'Varchar(200)',
99+
'HomeAddressPostalLine3' => 'Varchar(200)',
100+
'HomeAddressPostalLine4' => 'Varchar(200)',
101+
'HomeAddressPostalLine5' => 'Varchar(200)',
102+
'HomeAddressPostalLine6' => 'Varchar(200)',
103+
'HomeAddressSuburb' => 'Varchar(200)',
104+
'HomeAddressCity' => 'Varchar(200)',
105+
'HomeAddressPostcode' => 'Varchar(200)',
106+
'HomeAddressLatitude' => 'Varchar(200)',
107+
'HomeAddressLongitude' => 'Varchar(200)',
108+
'WorkAddress' => 'Text',
109+
'WorkAddressPostalLine1' => 'Varchar(200)',
110+
'WorkAddressPostalLine2' => 'Varchar(200)',
111+
//...
112+
];
113+
```

src/AddressFinderField.php

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ class AddressFinderField extends TextField
4747
*/
4848
protected $manualToggle;
4949

50+
/**
51+
* @var string
52+
*/
53+
protected $fieldPrefix = '';
54+
5055
/**
5156
* @var boolean
5257
*/
@@ -333,7 +338,7 @@ public function setValue($value, $record = null)
333338

334339
if ($this->getShowManualFields()) {
335340
foreach ($this->getManualFields() as $field) {
336-
$nested = $this->getNestedFieldName($field);
341+
$nested = $this->getNestedFieldName($field, false);
337342

338343
if (isset($value[$nested])) {
339344
$field->setValue($value[$nested]);
@@ -380,7 +385,7 @@ public function dataValue()
380385

381386
if ($this->getShowManualFields()) {
382387
foreach ($this->getManualFields() as $field) {
383-
$fieldName = $this->getNestedFieldName($field);
388+
$fieldName = $this->getNestedFieldName($field, false);
384389
$data[$fieldName] = $field->Value();
385390
}
386391
}
@@ -394,12 +399,34 @@ public function dataValue()
394399
* field.
395400
*
396401
* @param FormField $field
402+
* @param bool $prefixName
397403
*
398404
* @return string
399405
*/
400-
protected function getNestedFieldName($field)
406+
protected function getNestedFieldName($field, $prefixName = true)
401407
{
402-
return substr($field->getName(), strlen($this->getName()) + 1, -1);
408+
$name = substr($field->getName(), strlen($this->getName()) + 1, -1);
409+
410+
if ($this->fieldPrefix && $prefixName) {
411+
return $this->fieldPrefix . $name;
412+
}
413+
414+
return $name;
415+
}
416+
417+
/**
418+
* Set a prefix for the data fields if required. For instance, without a
419+
* prefix this field save the 'Postcode' as $record->Postcode, if you need
420+
* to have multiple addresses (i.e Home, Work) or would prefer to have all
421+
* the address info under a prefix then define one here
422+
*
423+
* setFieldPrefix('Work'); // $record->WorkPostcode = 1234;
424+
*/
425+
public function setFieldPrefix($prefix)
426+
{
427+
$this->fieldPrefix = $prefix;
428+
429+
return $this;
403430
}
404431

405432
/**
@@ -414,7 +441,7 @@ public function setName($name)
414441
$this->addressField->setName("{$name}[Address]");
415442

416443
foreach ($this->getManualFields() as $field) {
417-
$nested = $this->getNestedFieldName($field);
444+
$nested = $this->getNestedFieldName($field, false);
418445

419446
$field->setName("{$name}[{$nested}]");
420447
}

0 commit comments

Comments
 (0)