GithubHelp home page GithubHelp logo

pimcore / ecommerce-framework-bundle Goto Github PK

View Code? Open in Web Editor NEW
8.0 8.0 30.0 13.62 MB

Ecommerce Framework community bundle provides e-commerce functionality such as product listing and filtering, pricing, carts and checkouts for Pimcore.

Home Page: https://pimcore.com/docs/platform/Ecommerce_Framework/

License: Other

PHP 87.65% CSS 0.69% JavaScript 6.68% Twig 4.95% Shell 0.03%

ecommerce-framework-bundle's Introduction

Pimcore - Own the digital World

Pimcore Core Framework - Open Source Data & Experience Management Platform: PIM, MDM, CDP, DAM, DXP/CMS & Digital Commerce

Packagist Software License Gitter

Contribute

Bug fixes: please create a pull request including a step by step description to reproduce the problem
Contribute features: contact the core-team on our Gitter channel before you start developing
Security vulnerabilities: please see our security policy

For details, please have a look at our contributing guide.

Overview

Technology and Architecture

Key Benefits and Advantages

โš’ Data Modelling and UI Design at the same Time

No matter if you're dealing with unstructured web documents or structured data for MDM/PIM, you define the UI design (web documents by a template and structured data with an intuitive graphical editor), Pimcore knows how to persist the data efficiently and optimized for fast access.

๐ŸŽ› Agnostic and Universal Framework for your Data

Due to the framework approach, Pimcore is very flexible and adapts perfectly to your needs. Built on top of the well-known Symfony Framework you have a solid and modern foundation for your project.

๐Ÿš€ Extensible and huge Symfony Community

Benefit from all existing Symfony Components and Bundles provided by the community or create your own Bundles to extend your Projects with reusable components.

๐Ÿ’Ž Your Digital World consolidated in one Platform

No more API, import/export and synchronization hell between MDM/PIM, E-Commerce, DAM, and your Web-CMS. All is working seamlessly together, natively ... this is what Pimcore is built for.

โœจ๏ธ Modern and Intuitive UI

We love good-looking user interfaces, designed to be efficient for daily use and optimized for a great experience for editors.

Preview and Demo

Data Objects

Pimcore Admin Interface Screenshot PIM/MDM Manage any structured data based on a predefined data model, either manually or automatically via the APIs. Define the structure and attributes of your objects by using the class editor. Manage any data โ€“ products (PIM/MDM), categories, customers (CDP), orders (digital commerce), blog articles (DXP/CMS). Data Objects provide the possibility to manage structured data for multiple output channels from a single source. By centralizing data in one place, Pimcore's data objects enable you to achieve better data completeness and data quality, allowing you to create and maintain a consistent, up-to-date customer experience across multiple touchpoints in less time.

Digital Assets

Pimcore Admin Interface Screenshot DAM Assets are the DAM part of Pimcore. Store, manage and organize digital files such as images, videos, PDFs, Word/Excel documents in a folder structure. Preview 200+ file types directly in Pimcore, edit pictures, and enrich files with additional meta-data. Facial recognition for focal points in images is available. Editors only need to maintain one high-resolution version of a file in the system. Pimcore can automatically generate all required output formats for various channels such as commerce, apps, websites. Of course, including comprehensive user management and version control.

Documents

Pimcore Admin Interface Screenshot CMS The DXP/CMS part of Pimcore for managing unstructured content such as the pages of a website and its navigation. Based on Twig templates, documents render physical HTML/CSS pages and provide the capabilities to manage the presentation of data, exactly how customers will experience it. They can be composed by administrators by arranging predefined layout elements. Pimcore documents provide multilingual and multi-site capabilities for websites, including emails and newsletters. Total frontend flexibility enables a perfect blend of content and commerce. You can also use them to create content for offline channels, such as printed catalogs (web-to-print).

Demo (Community Edition)

Admin-URL (stable): https://demo.pimcore.fun/admin/
Admin-URL (dev): https://11.x-dev.pimcore.fun/admin/
Username: admin
Password: demo

Getting Started

Only 3 commands to start! ๐Ÿ˜Ž

COMPOSER_MEMORY_LIMIT=-1 composer create-project pimcore/skeleton ./my-project
cd ./my-project
./vendor/bin/pimcore-install

This will install an empty skeleton application, but we're also offering a demo package for your convenience - of course also with 3 commands ๐Ÿ’ช Click here for more installation options and a detailed guide

Supported Versions and LTS

Community support of a minor version of Pimcore packages ends with the release of the next minor version. After end of community support, long term supported is provided in combination with enterprise edition.

LTS versions are based on our Platform Version Releases which cover the Core Framework as well as extensions provided by Pimcore. For details on versions and their support state see our documentation.

Copyright and License

Copyright: Pimcore GmbH For licensing details please visit LICENSE.md

ecommerce-framework-bundle's People

Contributors

aashan10 avatar alternateif avatar andreas-gruenwald avatar aryaantony92 avatar blankse avatar brusch avatar chilladelia avatar corepex avatar ctippler avatar das-peter avatar datom avatar deltatag avatar denniskorbginski avatar dpfaffenbauer avatar dvesh3 avatar fashxp avatar jdreesen avatar jremmurd avatar kingjia90 avatar maff avatar markus-moser avatar martineiber avatar mattamon avatar mcop1 avatar niklasbr avatar podarcis avatar robertst7 avatar thomaskeil avatar ultramegatom avatar weisswurstkanone avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ecommerce-framework-bundle's Issues

Ecommerce Framework | Pass tenant config to isActive method in product

Feature Request

Sometimes it is necessary to access the current tenant name or the tenant configuration in the isActive() method of a product on index building.

Currently this is not possible, as the tenant context is not passed to the product.

Compare
https://github.com/pimcore/pimcore/blob/c797fed93781df7dad21873b5d56834d8e5753a0/bundles/EcommerceFrameworkBundle/IndexService/Worker/AbstractBatchProcessingWorker.php#L135

https://github.com/pimcore/pimcore/blob/877413a3d6a454f4827139460fc9bf29e4384794/bundles/EcommerceFrameworkBundle/Model/IndexableInterface.php#L52

I used a hack to access the tenant configuration:

$tenantName = Factory::getInstance()->getEnvironment()->getCurrentAssortmentTenant(); //is null in CLIs, such as the indexservice bootstrap command.
if (empty($tenantName)) {
   $traceLog = debug_backtrace();
   foreach ($traceLog as $trace) {
   $object = $trace['object'];
   if ($object instanceof IWorker) {
      $tenantName = $object->getTenantConfig()->getTenantName();
      break;
   }
}

However, it would be better to have the possibility to access the tenant, e.g. via

Factory::getInstance()->getEnvironment()->getCurrentAssortmentTenant();
```, or an additional method argument.

[Bug]: Type mismatch in EcommerceBundle installed classes

Expected behavior

Installed classes of EcommerceBundle match the provided abstract classes.

See i.e. https://github.com/pimcore/pimcore/blob/10.x/bundles/EcommerceFrameworkBundle/Resources/install/class_sources/class_OnlineShopOrderItem_export.json#L289

vs.

https://github.com/pimcore/pimcore/blob/10.x/bundles/EcommerceFrameworkBundle/Model/AbstractOrderItem.php#L72

Actual behavior

An error occures

Compile Error: Declaration of Pimcore\Model\DataObject\OnlineShopOrderItem::getTotalPrice(): ?float must be compatible with Pimcore\Bundle\EcommerceFrameworkBundle\Model\AbstractOrderItem::getTotalPrice(): ?string

Steps to reproduce

Create OnlineShopOrderItem and extend from AbstractOrderItem of EcommerceBundle.

See https://github.com/pimcore/pimcore/blob/10.x/bundles/EcommerceFrameworkBundle/Resources/install/class_sources/class_OnlineShopOrderItem_export.json#L289

[Ecommerce][Productindex][Elasticsearch] Mockup objects relation type is hardcoded to "objects"

Therefore asset and document relations do not work anymore.

https://github.com/pimcore/pimcore/blob/master/bundles/EcommerceFrameworkBundle/IndexService/ProductList/ElasticSearch/AbstractElasticSearch.php#L885

The type is stored in the store table but in the elasticsearch index only the IDs are stored. As we now use directly the data from elasticsearch instead of the store table the type information is now missing.

[Ecommerce] [Backoffice] Add options to configure OrderTab

Often the Backoffice is customized. We do have an option to specify the url within the Pimcore menu.
config.menu.order_list.enabled and config.menu.order_list.route
We can't do that in the newly introduced OrderTab of the OnlineShopOrder object.

Give us an option to configure the url and or an option to remove the tab all together.

[ecommerce] custom CartItem attributes features

A similar feature like the checkout data attributes would be great for CartItems (key/value). They could be used to store custom metadata. At the moments only notes are possible but depending on the use case there might be different data needed.

[Bug][Ecommerce]: custom pricing rule class not applied on listings

Expected behavior

Custom pricing rule class gets applied.

Actual behavior

Custom pricing rule class is not used in listings.

Workaround:

image

Steps to reproduce

Configure custom pricing rule class
image

Use pricing rule class

$list = new App\Ecommerce\PricingManager\Rule\Listing();
$list->current()?->myCustomMethod(); // should not throw an error but does

[Ecommerce][Bug] Empty mandatory fields does not prevent saving

Bug Report

Expected behavior

Saving a Price Rule condition should not be possible when mandatory fields are empty.

Actual behavior

Saving works, no error messages or indications.

Steps to reproduce

Create a Price Rule condition with a mandatory field.
Save it.

Code example

If this field is left empty, the condition should not be saved, preferably an error message should be displayed.

{
	xtype: "numberfield",
	fieldLabel: "Minimum quantity",
	labelWidth: 200,
	mandatory: true,
	name: "qty",
	maxValue: 100000,
	value: data.qty,
	width: 600,
}

[Ecommerce] Product discount not being reflected in the Order Object

Bug Report

Before doing any further steps (pull request/workaround) I would like to understand if the following is expected behaviour, a missing feature or just plain false understanding of the feature on my side.

The feature I am describing would be needed for a proper communication with an ERP system.

Issue description

When applying a voucher adding a product discount, the product discount doesn't seem to be reflected in any way in the final Order object. The cart discount is on the other hand clearly reflected under Price Modifications.

2021-02-22_22-46-43

2021-02-22_22-47-04

The applied Pricing Rule is saved with an ID to the Order Item. This might not be enough as the pricing rule might change and afterwards there is no way to understand how the Product Price was discounted.

Expected behavior

The reason for the Product Discount and the value of a discount are clearly reflected in the Order Object.

Actual behavior

Only the discounted Product Price is being persisted with a Pricing Rule ID (in Order-Item), which might not be enough to properly understand the final Order.

Steps to reproduce

Create following pricing rules.
2021-02-22_22-55-49
2021-02-22_22-55-52
2021-02-22_22-56-11
2021-02-22_22-56-14

Then make two orders:

  • with product-discount voucher
  • with cart-discount voucher

I hope I am not missing something obvious here :) Feedback is highly appreciated! Thanks

[Bug]: Missing translations, moving from csv to yaml

Currently it appears like this to me
image

It seems that the translations are under https://github.com/pimcore/ecommerce-framework-bundle/blob/1.x/src/Resources/install/admin-translations/init.csv

What's the reason behind this? would be reasonable to move to
I guess it was to make the ecommerce framework more optional and therefore these translation would be installed on demand. Since the bundle got fully extracted, the translation should be now under
https://github.com/pimcore/ecommerce-framework-bundle/blob/1.x/src/Resources/translations/admin.en.yaml
and let POEditor to translate in every language (nb: the csv has only DE/EN translations)

[Request]: Extend the DefaultMockup class with a method "hasParam"

When trying to access a param via the getParam() method there seems to be no check if the param actually exists. We think it would be helpful to either have a method that allows to check if a param exists or to have the getParam() method throw an exception (DefaultMockupParamNotFound or similar) on a non-existing param.

If preferred we can provide a pull request (preferrably for hasParam()).

[ECOMMERCE] Order Agent fails on setting the PaymentProvider

Just updated Pimcore from 5.0.2 to 5.2.0. Did some customization to fit the update. Now I get this error in the CommitOrderProcessor ( in my server side callback ). I have no idea why and what is the origin of this error.

  • I changed nothing in my Order DataObject
  • I changed nothing in my PaymentProvider
[01-Mar-2018 10:55:34 Europe/Vienna] PHP Fatal error:  Uncaught Symfony\Component\Debug\Exception\FatalThrowableError: Call to a member function setPaymentProviderMPay24Checkout() on null in /var/www/bts-platform/pimcore/lib/Pimcore/Bundle/EcommerceFrameworkBundle/OrderManager/Order/Agent.php:313
Stack trace:
#0 /var/www/bts-platform/pimcore/lib/Pimcore/Bundle/EcommerceFrameworkBundle/CheckoutManager/CommitOrderProcessor.php(175): Pimcore\Bundle\EcommerceFrameworkBundle\OrderManager\Order\Agent->setPaymentProvider(Object(AppBundle\Ecommerce\Payment\MPay24Checkout))
pimcore/pimcore#1 /var/www/bts-platform/pimcore/lib/Pimcore/Bundle/EcommerceFrameworkBundle/CheckoutManager/CommitOrderProcessor.php(115): Pimcore\Bundle\EcommerceFrameworkBundle\CheckoutManager\CommitOrderProcessor->commitOrderPayment(Object(Pimcore\Bundle\EcommerceFrameworkBundle\PaymentManager\Status), Object(AppBundle\Ecommerce\Payment\MPay24Checko$
pimcore/pimcore#2 /var/www/bts-platform/src/CheckoutBundle/Controller/MPay24Controller.php(172): Pimcore\Bundle\EcommerceFrameworkBundle\CheckoutManager\CommitOrderProcessor->han in /var/www/bts-platform/pimcore/lib/Pimcore/Bundle/EcommerceFrameworkBundle/OrderManager/Order/Agent.php on line 313

Ecommerce | Index Boostrap Command

Feature Request

I just have another idea in mind.
Actually we could add a mode to the bootstrap command, so that it will only create "empty" ID-rows for non-existing ones, instead of processing the whole object(s):

https://github.com/pimcore/pimcore/blob/d4bf70250202c56fb81ece2d80a85c282daf67ac/bundles/EcommerceFrameworkBundle/Command/IndexService/BootstrapCommand.php#L131

The store table would then be used as a queue, and the ProcessPreparationQueue command would then take care about the rest:

  • because in_preparation is not set, the entries will be processed.
  • if a data object is part of the index, then the missing data will be added and the entry leaves the queue.
  • if a data object is not part of the index, then the command will remove the row, again.
  • opposed to the bootstrap command, restart (e.g. every 15 minutes) is supported. So if the container is rebuilt while development, nothing bad happens.

This would depend on pimcore/pimcore#6487 though.

[Bug]: Error on recreateOrder if one time token is used

Expected behavior

order is recreated and containing the voucher token which is onetime use

Actual behavior

recreate order reapplies the voucher token to the new order without removing it for the source order and throws an error, that the voucher can not be used anymore

Steps to reproduce

add a onetime use voucher to the cart and start a payment
return and change cart so the order will be recreated
start payment again -> throws exception and the new order has not order items and no voucher

[Bug]: Pricing Rules does not show correct Target Group in Pimcore admin

Expected behavior

Correct Target Groups are prefilled in the select boxes in Pimcore Admin on Pricing Rules when two or more Target Groups have been set up.

Actual behavior

The Target Group select boxes in Pricing Rules shows wrong or no Target Group when two or more Target Groups are set up.

Steps to reproduce

  1. Go to "Pricing Rules" and add a new one.
  2. Go to "Conditions" and set up two or more target groups for the Pricing Rule.
  3. Save and close the Pricing Rules tab.
  4. Open up the Pricing Rule you created again and go to"Conditions".
  5. The Target group select boxes does not show the correct values.

Tested in v10.2.3

[Bug]: DefaultMockup cannot access params starting with a capital letter

When calling e.g. the "builtin" method getOSName it will look for a param with the name "oSName" but not for "OSName" and thus always instantiate the "real" object.

This is due to this line: https://github.com/pimcore/ecommerce-framework-bundle/blob/1.x/src/Model/DefaultMockup.php#L116

Instead the method should first try to use the substring without altering the first letter. If this doesn't work, the lcfirst() attribute name should be tried as a fallback.

We will gladly provide a pull request for this if this issue is confirmed.

[Ecommerce bundle] Editing quantity from pimcore order details page updates the unit price but it should update total order price.

Expected behavior

It should update total price not price of product.

Actual behavior

Editing quantity from pimcore order details page updates the unit price.

Steps to reproduce

  1. Order object
  2. Order details Tab
  3. In specific item from table and click on edit
  4. changing qunitity from edit modal

Code example

on editing orderitem it is calling below function and then qunitiy is chaning but order total price and order item's total price is not changing.

 public function itemChangeAmount(OrderItem $item, $amount)
    {
        // init
        $amount = floatval($amount);

        // add log note
        $note = $this->createNote($item);
        $note->setTitle(__FUNCTION__);
        $oldAmount = $item->getAmount();
        $note->addData('amount.old', 'text', $oldAmount);
        $note->addData('amount.new', 'text', $amount);

        // change
        $item->setAmount($amount);

        // save
        $item->save();
        $note->save();

        return $note;
    }

Ecommerce - customize order detail tag

The Order Details Tab for OnlineShopOrder-Objects is a great idea!
But as I need customizations in the detail-view, it would be great if the detail url could bei overridden (like the pimcore_ecommerce_framework.pimcore.menu.order_list- setting)

Ecommerce: allow sloppy voucher entry

The vouchers are case sensitive. This is not a problem when people copy/paste or click on a link. However, when using manual entry people don't always use proper capitalization and ignore or substitute separator characters (like dash with space or underscore). The voucher code is not accepted when there is not an exact match. This leads to frustration and lost sales.

The solution would be to allow sloppy entry of voucher codes. In order to preserve backwards compatibility the sloppy entry for vouchers should be optional.

Proposed changes

Add a checkbox "Allow sloppy entry" for the voucher series.

When this checkbox is enabled a simplified version of the voucher is added to an extra column. The simplified code ONLY contains lowercase letters and numbers. All other characters are removed.

When a voucher is entered and does not match, the code will be converted to a simplified version and attempted to match. Only when there is no match for both should an exception be thrown.

Example code:

  • EX-GHab3-sa

Simplified code:

  • exghab3sa

Accepted entry:

  • EX-GHAB3-SA
  • exghab3.sa
  • ex-gha b3-sa

Ecommerce Performance | Use a more efficient data structure for retrieving Elastic Search aggregations?

Performance Improvement

Problem Summary

In one of our projects, the retrieval of a simple category filter takes more than 1.2 seconds.
I found out that some loc and data structures for loading Elastic search aggregations can be improved.
Especially the conversion process for aggregations and buckets in the ElasticSearch product list seems to consume a lot of time for large datasets (>20.000 categories in total; 20 on the first level).

Problem Details

This is the initial test code:

public function testControllerAction() {
        $filter = new \Pimcore\Model\DataObject\Fieldcollection\Data\FilterCategory();
        $includeParentCategories = true;
        $filter->setIncludeParentCategories(false);
        $filter->setRootCategory($rootCategory);
        $ecFactory = \Pimcore\Bundle\EcommerceFrameworkBundle\Factory::getInstance();
        $filter->setScriptPath($renderingScriptPath);
        $filter->setIncludeParentCategories($includeParentCategories);
        $filterService = $ecFactory->getFilterService($ecFactory->getEnvironment()->getCurrentAssortmentTenant());

        $productList = $ecFactory->getIndexService()->getProductListForCurrentTenant();
        $productList->prepareGroupBySystemValues('system.parentCategoryIds', true);

        $productList->setCategory(!$forceRootCategorySetup ? $currentCategory : $rootCategory);

        $renderedCategoryNav = $filterService->getFilterFrontend(
            $filter,
            $productList,
            [
                'categoryIds' => $rootCategory->getId(),
                'env' => $this->getEnv(),
                'actualCurrentCategoryId' => $currentCategory->getId()
            ]);
}

I digged into ProductList\ElasticSearch\AbstractElasticSearch and doLoadGroupByValues and found out that the extraction of the filter aggregations and buckets is very time intense.

The subsequential code sequence took (enabled debugger) took 568ms.

if ($result['aggregations']) {            
                foreach ($result['aggregations'] as $fieldname => $aggregation) {
                    $buckets = $this->searchForBuckets($aggregation);
                    $groupByValueResult = [];
                    if ($buckets) {
                        foreach ($buckets as $bucket) {
                            if ($this->getVariantMode() == self::VARIANT_MODE_INCLUDE_PARENT_OBJECT) {
                                $groupByValueResult[] = ['value' => $bucket['key'], 'count' => $bucket['objectCount']['value']];
                            } else {
                                $data = $this->convertBucketValues($bucket); // support subaggregations
                                $groupByValueResult[] = $data;
                            }
                        }
                    }
                    $this->preparedGroupByValuesResults[$fieldname] = $groupByValueResult;
                }
            }
}

Solution Concept

I used the following code to demonstrate that the retrieval could be done much faster: 32ms (vs. original 568ms).

if ($result['aggregations']) {
                $optimisedResult = [];
                foreach ($result['aggregations'] as $fieldname => $aggregation) {
                    $buckets = $aggregation['buckets'];
                    $json = json_encode($buckets);
                    $json = str_replace('key":', 'value":', $json);
                    $json = str_replace('doc_count":', 'count":', $json);
                    $buckets = json_decode($json, true);
                    $preparedGroupByValuesResultsOptimised[$fieldname] = $buckets;
                    $this->preparedGroupByValuesResults[$fieldname] = $groupByValueResult; 
                }
}

With disabled debugger it is still 27ms vs. 94 ms!

This example is just a demonstration that arrays as data structure can cause a lot of performance overhead. The code above should be refactored carefully. In general it might be very helpful to profile the ecommerce productlists of Pimcore with higher amounts of categories/aggregations, as they turn out to be very useful to identify potential performance issues.

[Ecommerce Framework] Migration which enables generateTypeDeclarations

In pimcore/pimcore#8040 the interfaces for the data model classes of the Ecommerce Framework bundle were extended so that the getter methods require return type declarations, e.g.:
https://github.com/pimcore/pimcore/blob/5661134f4bb8841dba8f6aa458277df89e50622c/bundles/EcommerceFrameworkBundle/Model/AbstractFilterDefinition.php#L33

Sadly there never was a migration for this. Consequently Pimcore crashes when you had the Ecommerce framework classes installed in Pimcore 6 (where generateTypeDeclarations did not exist yet) and update to Pimcore X. It also does not matter if you are actually using the Ecommerce Framework data object classes because they are loaded anyway once they got created and so the system crashes on every request:
Declaration of Pimcore\Model\DataObject\FilterDefinition::getPageLimit() must be compatible with Pimcore\Bundle\EcommerceFrameworkBundle\Model\AbstractFilterDefinition::getPageLimit(): ?float
This means that without generateTypeDeclarations being enabled the ecommerce framework classes will not work.

Also if you accidentically uncheck the generateTypeDeclarations checkbox in the class definition of one of the Ecommerce framework classes the same will happen.

In both cases you will not be able to access the Pimcore backend anymore and instead have to manually edit the class definition files and set generateTypeDeclarations to true.

A migration which enables generateTypeDeclarations for the corresponding classes would solve at least the problem when updating from earlier Pimcore versions to Pimcore X. I do not know if we can solve the problem of unchecking the generateTypeDeclarations checkbox manually.

[Ecommerce][Bug] Pricing rule product AND cart condition

Bug Report

Expected behavior

Pricing Rule Actions and Conditions should be compatible with each other.

Actual behavior

When creating a Pricing Rule with Product conditions and Cart Conditions the Rule will never return true and never be applied to the cart.

Steps to reproduce

  1. Create a Price Rule with the following conditions: (Cart amount: [1]) AND (Product Category: [choose any category] AND NOT Product: Product1234)
  2. Add the following action to your rule: Product Discount: 50%
  3. Add two products to your cart:
  • Both from the chosen category
  • One of the products is "Product1234" mentioned above
  1. Go to the checkout
  2. Note that the rules does not apply but it should.

Ecommerce filter interpreter at the attribut level

Hello,

This issue propose to add a filter interpreter parameter in e-commerce yaml config to associate to an attribut, some thing like:

    myAttribut:
        type: varchar(190)
        filter_group: string
        filter_interpreter: Path\To\MyInterpreterClass     <= this is the new setting proposed in this issue

The pupose of this interpreter will be to be able to customize the displaying filters values for this attribut.
Sometimes we want to index in store database some values (let's say an ID for instance) but for the filters we want to get the object and display a specific fields or data reformated during filter html generation, aka to set label to custom values, etc.

I think it could be a valuable tool. Actually we need to check the type of attribut and modifying the labels directly in custom filter-select.html file for instance finishing in hard to maintain code because having all the labels logics in the filter html file.

Having the possibility to define a filter interpreter directly at the attribut level would be more clean and reusable (instead to patch all filters which could be using this attribut for instance, it will be only needed to set a filter_interpreter at the attribut level).

Best regards.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.