https://github.com/pimcore/output-data-config-toolkit
Output Data Config Toolkit community bundle adds some additional tools for formatting data outputs to Pimcore.
https://github.com/pimcore/output-data-config-toolkit
Last synced: about 1 year ago
JSON representation
Output Data Config Toolkit community bundle adds some additional tools for formatting data outputs to Pimcore.
- Host: GitHub
- URL: https://github.com/pimcore/output-data-config-toolkit
- Owner: pimcore
- License: other
- Created: 2016-04-14T07:49:16.000Z (about 10 years ago)
- Default Branch: 5.x
- Last Pushed: 2024-08-29T06:17:07.000Z (almost 2 years ago)
- Last Synced: 2024-09-29T10:48:15.939Z (over 1 year ago)
- Language: PHP
- Homepage:
- Size: 541 KB
- Stars: 21
- Watchers: 18
- Forks: 21
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
- Security: SECURITY.md
Awesome Lists containing this project
README
# OutputDataConfigToolkit
This toolkit provides an user interface to create output formats for data objects based on different output channels.
So it is possible to define, which attributes of a data objects should be printed in a certain output channel.
An output data configuration consists of
- values = data object attributes
- operators = can combine, modify, calculate, ... values
#### Table of Contents
- [Configuration](#configuration)
- [Defining output data configuration for different output channels](#defining-output-data-configuration-for-different-output-channels)
- [Working with output channels in code](#working-with-output-channels-in-code)
- [Events](#events)
- [Adding new operators](#adding-new-operators)
- [Defining output data configuration programmatically](#defining-output-data-configuration-programmatically)
- [Migration from Pimcore 4](#migration-from-pimcore-4)
## Configuration
### Channel Config
After installing the bundle, a config file is located at `config/pimcore/outputdataconfig/config.php`. In this config file available output channels can be configured as follows:
```php
[
"channel1",
"channel2",
"mychannel1",
"mychannel2"
]
];
```
### Functional Config
In `config.yml`:
```yaml
output_data_config_toolkit:
tab_options:
# order classes by name (defaults by id)
order_by_name: true
# classes that should be listed by default in output config tab
default_classes:
- Product # class name
- Pimcore\Model\DataObject\ProductCategory # full namespace
- 12 # class id
classification_store:
# defines which classification keys are displayed in the config dialog tree
# the possible values are:
# 'all', -> always show all keys
# 'object', -> only show keys which are in any assigned group of the current object
# 'relevant', -> use 'object' mode if any group is assigned, else show all keys (i.e. on a folder)
# 'none' -> do not show classification store keys
display_mode: relevant
```
[Read more about the classification store display modes.](doc/classificationstore.md)
## Defining output data configuration for different output channels
Output data configurations can be configured in an additional tab in the data object editor.
There for each data object class and output channel an output output data configuration can be defined.

The output data configurations can be inherited along the data objects tree. The column Object ID shows from with data object the output data configuration is inherited from.
By clicking overwrite, the editor opens and a new output data configuration can be configured.

## Working with output channels in code
The bundle provides a service class, with converts a Pimcore data object to an output data structure based on its ouput data configuration.
```php
productListSpecification($property, $this->product);
}
```
A sample template helper see `doc/ProductListSpecification.php`, the needed service configuration:
```yml
# Product Detail Specification Template Helper
app.templating.helper.productDetailSpecification:
class: App\Templating\Helper\ProductDetailSpecification
arguments: ['@translator', '@Pimcore\Localization\IntlFormatter']
tags:
- { name: templating.helper, alias: productDetailSpecification }
```
## Events
| Event | Description |
| ----- | ----------- |
| `outputDataConfigToolkit.initialize` | Before any output-config tab's initialization, so you can i.e. manipulate the configuration object, or only show the tab for a specific class type. For a full example see [OutputDataConfigToolkitListener](doc/OutputDataConfigToolkitListener.php). |
| `outputDataConfigToolkit.saveEvent` | Before a specific output config is saved. Can be implemented to sort config attributes or to modify attributes in any other way. |
## Adding new operators
Create a Pimcore bundle and add following files:
### php implementation of operator
- must be in namespace `OutputDataConfigToolkitBundle\ConfigElement\Operator`
- must implement `AbstractOperator`
```php
getChilds();
if($childs[0]) {
$value = $childs[0]->getLabeledValue($object);
$value->value = $value->value == 0 ? null : $value->value;
return $value;
}
return null;
}
}
```
### java script implementation of operator
- must be in namespace `pimcore.bundle.outputDataConfigToolkit.outputDataConfigElements.operator`
- must extend `pimcore.bundle.outputDataConfigToolkit.outputDataConfigElements.Abstract`
```javascript
pimcore.registerNS("pimcore.bundle.outputDataConfigToolkit.outputDataConfigElements.operator.RemoveZero");
pimcore.bundle.outputDataConfigToolkit.outputDataConfigElements.operator.RemoveZero = Class.create(pimcore.bundle.outputDataConfigToolkit.outputDataConfigElements.Abstract, {
type: "operator",
class: "RemoveZero",
iconCls: "pimcore_icon_operator_remove_zero",
defaultText: "operator_remove_zero",
getConfigTreeNode: function(configAttributes) {
if(configAttributes) {
var node = {
draggable: true,
iconCls: this.iconCls,
text: t(this.defaultText),
configAttributes: configAttributes,
isTarget: true,
maxChildCount: 1,
expanded: true,
leaf: false,
expandable: false
};
} else {
//For building up operator list
var configAttributes = { type: this.type, class: this.class};
var node = {
draggable: true,
iconCls: this.iconCls,
text: t(this.defaultText),
configAttributes: configAttributes,
isTarget: true,
maxChildCount: 1,
leaf: true
};
}
return node;
},
getCopyNode: function(source) {
var copy = new Ext.tree.TreeNode({
iconCls: this.iconCls,
text: t(this.defaultText),
isTarget: true,
leaf: false,
maxChildCount: 1,
expanded: true,
configAttributes: {
label: null,
type: this.type,
class: this.class
}
});
return copy;
},
getConfigDialog: function(node) {
},
commitData: function() {
}
});
```
## Defining output data configuration programmatically
For defining definitions programmatically utilize the `\OutputDataConfigToolkitBundle\ConfigAttribute\...`
classes.
I.e. adding a classification store key to a channel definition:
```php
$config = new \OutputDataConfigToolkitBundle\ConfigAttribute\Value\DefaultValue();
$config->applyDefaults(); // datatype, type, class
$config->applyFromClassificationKeyConfig($keyConfig);
// create definition for channel and add value
$newConfig = new \OutputDataConfigToolkitBundle\OutputDefinition();
$newConfig->setChannel("my_channel");
$newConfig->setClassId($classId);
$newConfig->setObjectId(12345);
$newConfig->setConfiguration($serializer->serialize($config, 'json'));
$newConfig->save();
```
### Support for textual class ids
Execute the following statement:
```mysql
ALTER TABLE bundle_outputdataconfigtoolkit_outputdefinition MODIFY `classId` varchar(50);
```
## Migration from Pimcore 4
- Change table name from `plugin_outputdataconfigtoolkit_outputdefinition` to
`bundle_outputdataconfigtoolkit_outputdefinition`.
```sql
RENAME TABLE plugin_outputdataconfigtoolkit_outputdefinition TO bundle_outputdataconfigtoolkit_outputdefinition;
```
- Change namespace from `Elements\OutputDataConfigToolkit` to `OutputDataConfigToolkitBundle`.
- Removed key value support.
- Changed permission key to `bundle_outputDataConfigToolkit`, execute following SQL statement
```sql
UPDATE users_permission_definitions SET `key` = REPLACE(`key`, 'plugin_outputDataConfigToolkit', 'bundle_outputDataConfigToolkit');
UPDATE users SET permissions = REPLACE(`permissions`, 'plugin_outputDataConfigToolkit', 'bundle_outputDataConfigToolkit');
```
- namespaces for custom operators and values changed from `pimcore.plugin.outputDataConfigToolkit.*` to `pimcore.bundle.outputDataConfigToolkit.*`