Skip to content

Commit 21e30f0

Browse files
authored
Merge pull request #56 from experius/feature/sort-order-manipulation
[FEATURE] Introduce pluggable function to alter sort order for different Checkouts
2 parents cfb4588 + 8ad4573 commit 21e30f0

File tree

1 file changed

+96
-44
lines changed

1 file changed

+96
-44
lines changed

Block/Checkout/LayoutProcessor.php

Lines changed: 96 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,11 @@
2121

2222
namespace Experius\Postcode\Block\Checkout;
2323

24-
use Magento\Framework\View\Element\AbstractBlock;
2524
use Magento\Checkout\Block\Checkout\LayoutProcessorInterface;
25+
use Magento\Framework\View\Element\AbstractBlock;
2626

2727
class LayoutProcessor extends AbstractBlock implements LayoutProcessorInterface
2828
{
29-
3029
protected $scopeConfig;
3130

3231
protected $logger;
@@ -43,14 +42,21 @@ public function __construct(
4342
parent::__construct($context, $data);
4443
}
4544

45+
/**
46+
* Process js Layout of block
47+
*
48+
* @param array $result ($jsLayout)
49+
* @return array
50+
*/
4651
public function process($result)
4752
{
48-
if ($this->scopeConfig->getValue(
49-
'postcodenl_api/general/enabled',
50-
\Magento\Store\Model\ScopeInterface::SCOPE_STORE
51-
)
52-
&& isset($result['components']['checkout']['children']['steps']['children']['shipping-step']['children']
53-
['shippingAddress']['children']['shipping-address-fieldset'])
53+
if (
54+
$this->scopeConfig->getValue(
55+
'postcodenl_api/general/enabled',
56+
\Magento\Store\Model\ScopeInterface::SCOPE_STORE
57+
)
58+
&& isset($result['components']['checkout']['children']['steps']['children']['shipping-step']['children']
59+
['shippingAddress']['children']['shipping-address-fieldset'])
5460
) {
5561
$this->changeFieldPositions = $this->scopeConfig->getValue(
5662
'postcodenl_api/advanced_config/change_sort_order',
@@ -61,11 +67,6 @@ public function process($result)
6167
['shipping-step']['children']['shippingAddress']['children']
6268
['shipping-address-fieldset']['children'];
6369

64-
/*if(isset($shippingFields['street'])){
65-
unset($shippingFields['street']['children'][1]['validation']);
66-
unset($shippingFields['street']['children'][2]['validation']);
67-
}*/
68-
6970
$shippingFields = array_merge($shippingFields, $this->getPostcodeFieldSet('shippingAddress', 'shipping'));
7071

7172
if ($this->changeFieldPositions) {
@@ -83,6 +84,12 @@ public function process($result)
8384
return $result;
8485
}
8586

87+
/**
88+
* Get billing form fields
89+
*
90+
* @param array $result
91+
* @return array
92+
*/
8693
public function getBillingFormFields($result)
8794
{
8895
if (isset(
@@ -124,27 +131,40 @@ public function getBillingFormFields($result)
124131
return $result;
125132
}
126133

134+
/**
135+
* Get postcode fieldset
136+
*
137+
* @param $scope
138+
* @param $addressType
139+
* @return array[]
140+
*/
127141
public function getPostcodeFieldSet($scope, $addressType)
128142
{
129143
return [
130-
'experius_postcode_fieldset' =>
131-
[
132-
'component' => 'Experius_Postcode/js/view/form/postcode',
133-
'type' => 'group',
134-
'config' => [
135-
"customScope" => $scope,
136-
"template" => 'Experius_Postcode/form/group',
137-
"additionalClasses" => "experius_postcode_fieldset",
138-
"loaderImageHref" => $this->getViewFileUrl('images/loader-1.gif')
139-
],
140-
'sortOrder' => '905',
141-
'children' => $this->getPostcodeFields($scope, $addressType),
142-
'provider' => 'checkoutProvider',
143-
'addressType' => $addressType,
144-
]
144+
'experius_postcode_fieldset' => [
145+
'component' => 'Experius_Postcode/js/view/form/postcode',
146+
'type' => 'group',
147+
'config' => [
148+
"customScope" => $scope,
149+
"template" => 'Experius_Postcode/form/group',
150+
"additionalClasses" => "experius_postcode_fieldset",
151+
"loaderImageHref" => $this->getViewFileUrl('images/loader-1.gif')
152+
],
153+
'sortOrder' => (string)($this->getStartSortOrder() + 5),
154+
'children' => $this->getPostcodeFields($scope, $addressType),
155+
'provider' => 'checkoutProvider',
156+
'addressType' => $addressType,
157+
]
145158
];
146159
}
147160

161+
/**
162+
* Get postcode fields
163+
*
164+
* @param $scope
165+
* @param $addressType
166+
* @return array[]
167+
*/
148168
public function getPostcodeFields($scope, $addressType)
149169
{
150170
$postcodeFields =
@@ -159,7 +179,7 @@ public function getPostcodeFields($scope, $addressType)
159179
'provider' => 'checkoutProvider',
160180
'dataScope' => $scope . '.experius_postcode_postcode',
161181
'label' => __('Postcode'),
162-
'sortOrder' => '915',
182+
'sortOrder' => (string)($this->getStartSortOrder() + 15),
163183
'validation' => [
164184
'required-entry' => true,
165185
'min_text_length' => 6,
@@ -175,7 +195,7 @@ public function getPostcodeFields($scope, $addressType)
175195
'provider' => 'checkoutProvider',
176196
'dataScope' => $scope . '.experius_postcode_housenumber',
177197
'label' => __('Housenr.'),
178-
'sortOrder' => '925',
198+
'sortOrder' => (string)($this->getStartSortOrder() + 25),
179199
'validation' => [
180200
'required-entry' => true,
181201
],
@@ -190,7 +210,7 @@ public function getPostcodeFields($scope, $addressType)
190210
'provider' => 'checkoutProvider',
191211
'dataScope' => $scope . '.experius_postcode_housenumber_addition',
192212
'label' => __('Addition'),
193-
'sortOrder' => '927',
213+
'sortOrder' => (string)($this->getStartSortOrder() + 30),
194214
'validation' => [
195215
'required-entry' => false,
196216
],
@@ -207,7 +227,7 @@ public function getPostcodeFields($scope, $addressType)
207227
'provider' => 'checkoutProvider',
208228
'dataScope' => $scope . '.experius_postcode_housenumber_addition_manual',
209229
'label' => __('Addition'),
210-
'sortOrder' => '927',
230+
'sortOrder' => (string)($this->getStartSortOrder() + 30),
211231
'validation' => [
212232
'required-entry' => false,
213233
],
@@ -224,7 +244,7 @@ public function getPostcodeFields($scope, $addressType)
224244
'provider' => 'checkoutProvider',
225245
'dataScope' => $scope . '.experius_postcode_disable',
226246
'description' => __('Enter address manually'),
227-
'sortOrder' => '1004',
247+
'sortOrder' => (string)($this->getStartSortOrder() + 50),
228248
'validation' => [
229249
'required-entry' => false,
230250
],
@@ -235,39 +255,71 @@ public function getPostcodeFields($scope, $addressType)
235255
return $postcodeFields;
236256
}
237257

258+
/**
259+
* Change address fields position(s)
260+
*
261+
* @param $addressFields
262+
* @return mixed
263+
*/
238264
public function changeAddressFieldPosition($addressFields)
239265
{
266+
if (isset($addressFields['country_id'])) {
267+
$addressFields['country_id']['sortOrder'] = (string)($this->getStartSortOrder());
268+
}
269+
270+
// 'experius_postcode_fieldset' is $this->getStartSortOrder() + 5
240271

241272
if (isset($addressFields['street'])) {
242-
$addressFields['street']['sortOrder'] = '910';
273+
$addressFields['street']['sortOrder'] = (string)($this->getStartSortOrder() + 10);
243274
}
244275

245-
if (isset($addressFields['postcode'])) {
246-
$addressFields['postcode']['sortOrder'] = '930';
247-
}
276+
// 'experius_postcode_postcode' field default is + 15
248277

249278
if (isset($addressFields['city'])) {
250-
$addressFields['city']['sortOrder'] = '920';
279+
$addressFields['city']['sortOrder'] = (string)($this->getStartSortOrder() + 20);
280+
}
281+
282+
// 'experius_postcode_housenumber' is + 25
283+
// 'experius_postcode_housenumber_addition' and 'experius_postcode_housenumber_addition_manual' are + 30
284+
285+
if (isset($addressFields['postcode'])) {
286+
$addressFields['postcode']['sortOrder'] = (string)($this->getStartSortOrder() + 35);
251287
}
252288

253289
if (isset($addressFields['region'])) {
254-
$addressFields['region']['sortOrder'] = '940';
290+
$addressFields['region']['sortOrder'] = (string)($this->getStartSortOrder() + 40);
255291
}
256292

257293
if (isset($addressFields['region_id'])) {
258-
$addressFields['region_id']['sortOrder'] = '945';
294+
$addressFields['region_id']['sortOrder'] = (string)($this->getStartSortOrder() + 45);
259295
}
260296

261-
if (isset($addressFields['country_id'])) {
262-
$addressFields['country_id']['sortOrder'] = '900';
263-
}
297+
// 'experius_postcode_disable' is + 50
264298

265299
return $addressFields;
266300
}
267301

268-
public function addClasses($scope, $addressFields)
302+
/**
303+
* Get start sort order
304+
* Hook for plugins to alter it's default: 900
305+
*
306+
* @TODO: Introduce system configuration to alter this value
307+
* @return int
308+
*/
309+
public function getStartSortOrder()
269310
{
311+
return 900;
312+
}
270313

314+
/**
315+
* Add classes to address fields
316+
*
317+
* @param $scope
318+
* @param $addressFields
319+
* @return mixed
320+
*/
321+
public function addClasses($scope, $addressFields)
322+
{
271323
foreach (['street', 'region_id', 'region', 'country_id', 'city', 'postcode'] as $field) {
272324
if (isset($addressFields[$field])) {
273325
$configAdditionalClasses = null;

0 commit comments

Comments
 (0)