php-etl/prestashop-expression-language

This library implements functions for manipulating Prestashop data in ExpressionLanguage

dev-main / 0.1.x-dev 2023-09-01 07:29 UTC

This package is auto-updated.

Last update: 2024-04-30 01:05:52 UTC


README

This package extends the ExpressionLanguage Symfony component to manipulate data coming from Akeneo into valid Prestashop data.

Quality (PHPStan lvl 4) PHPUnit Infection PHPStan level 5 PHPStan level 6 PHPStan level 7 PHPStan level 8 PHP

Documentation

See full Documentation

Installation

composer require php-etl/prestashop-expression-language

Usage

You can use these expressions in your configuration files as in the following example :

foo: '@=booleans(my_akeneo_attribute_code: {the_akeneo_value_to search for: the_prestashop_id_replacement})'

Attribute functions

Functions that turn an Akeneo attribute into a Prestashop attribute_option_value.

booleans

# input
{values: {new_collection: [{scope: null, data: true}]}}

#function
field: '[associations][product_option_values][product_option_value]'
expression: 'booleans({ new_collection: {true: 52, false: 53} })'

#output
<associations>
    <product_option_values>
        <product_option_value>
            <id>52</id>
        </product_option_value>
    </product_option_values>
</associations>

lists

# input
{values: {categories: ["spring", "summer"]}}

#function
field: '[associations][product_option_values][product_option_value]'
expression: 'lists({ categories: {spring: 74, autumn: 75, summer: 76} })'

#output
<associations>
    <product_option_values>
        <product_option_value>
            <id>74</id>
        </product_option_value>
        <product_option_value>
            <id>76</id>
        </product_option_value>
    </product_option_values>
</associations>

measurements

# input
{values: {weigth_net: {scope: null, data: {amount: "341.000"}}}}

#function
field: '[associations][product_option_values][product_option_value]'
expression: 'measurements({ weigth_net: {"340.000": 21, "341.000": 22, "342.000": 23} })'

#output
<associations>
    <product_option_values>
        <product_option_value>
            <id>22</id>
        </product_option_value>
    </product_option_values>
</associations>

scalars

# input
{values: {color: {scope: null, data: "navy_blue"}}}

#function
field: '[associations][product_option_values][product_option_value]'
expression: 'scalars({ navy_blue: {salmon: 39, citrus: 40, navy_blue: 41, anthracite: 42} })'

#output
<associations>
    <product_option_values>
        <product_option_value>
            <id>41</id>
        </product_option_value>
    </product_option_values>
</associations>

Features function

Function that turns an Akeneo attribute into a Prestashop feature.

booleanAttributeToFeature

# input
{values: {color: true, varnish: false}}

# function
- field: '[associations][product_features]'
    expression: >
      booleanAttributeToFeature([
        {
          akeneo_code: 'color',
          prestashop_id: 16,
          values: {
            true: 120,
            false: 121,
          }
        },
        {
          akeneo_code: 'varnish',
          prestashop_id: 20,
          values: {
            true: 63,
            false: 64
          }
        }
      ])
      
# output
<associations>
  <product_features>
    <product_feature>
      <id>16</id>
      <id_feature_value>120</id_feature_value>
    </product_feature>
    <product_feature>
      <id>20</id>
      <id_feature_value>64</id_feature_value>
    </product_feature>
  </product_features>
</associations>

mapFeatures

# input
{id_feature_value: '23,24,25', id: 17}

# function
- field: '[associations][product_features]'
  expression: 'mapFeatures(lookup)'

# output
<associations>
  <product_features>
    <product_feature>
      <id>23</id>
      <id_feature_value>17</id_feature_value>
    </product_feature>
    <product_feature>
      <id>24</id>
      <id_feature_value>17</id_feature_value>
    </product_feature>
    <product_feature>
      <id>25</id>
      <id_feature_value>17</id_feature_value>
    </product_feature>
  </product_features>
</associations>

features

# input
{values: {norm: {scope: null, data: "ean188"}}}

#function
field: '[associations][product_features]'
expression: >
    features([
        {
            akeneo_code: 'norm',
            prestashop_id: 15,
            values: {
                ean144: 97,
                ean1502_b: 98,
                ean188: 99,
            }
        }
    ])

#output
<associations>
    <product_features>
        <product_feature>
            <id>15</id>
            <id_feature_value>99</id_feature_value>
        </product_feature>
    </product_features>
</associations>

mapIds

# input
{1,2,3}

# function
- field: '[categories]'
  expression: 'mapIds(input)'

# output
<categories>
  <id>1</id>
  <id>2</id>
  <id>3</id>
</categories>

splitAndTrim

# input
{' Foo, bAr ,BAZ'}

# function
- field: '[words]'
  expression: 'splitAndTrim(",", input)'

# output
<words>
  <0>foo</0>
  <1>bar</1>
  <2>baz</2>
</words>