akeneo-labs/pim-enhanced-connector
Installation
composer require akeneo-labs/pim-enhanced-connector:~1.4
Enable the bundle in app/AppKernel.php:
new Pim\Bundle\EnhancedConnectorBundle\PimEnhancedConnectorBundle(),
Clear Cache & Rebuild Assets
php app/console cache:clear --env=prod
php app/console pim:installer:assets --env=prod
First Use Case: Family Export
/var/exports/families.csv).First Use Case: Attribute Export
family_code for PimGento compatibility.Delta-Based Product Exports
# config.yml
pim_enhanced_connector:
reader:
product:
delta: true
last_export_time: "%last_export_time%" # Use a parameter or env var
Completeness and Enabled Filters
complete, incomplete) and enabled status:
pim_enhanced_connector:
reader:
product:
completeness: complete
enabled: true
Categorized/Uncategorized Products
pim_enhanced_connector:
reader:
product:
categorized_only: true # or false
Order of Exports for PimGento Follow this sequence for PimGento compatibility:
family_code).Automated Exports with CRON
0 3 * * * php app/console pim:export:run --export=your_product_export_job --env=prod
Custom Export Jobs Extend the bundle’s readers/processors for custom logic:
// src/Akeneo/EnhancedConnector/Reader/ProductReader.php
class CustomProductReader extends \Pim\Bundle\EnhancedConnectorBundle\Reader\ProductReader
{
protected function filterProducts(QueryBuilder $qb)
{
$qb->andWhere('p.enabled = :enabled')
->setParameter('enabled', true);
// Add custom filters (e.g., by custom attribute)
}
}
Register the service in services.yml:
pim_enhanced_connector.reader.product: '@your_namespace.custom_product_reader'
Post-Export Processing Use Symfony’s event system to trigger actions after export:
// src/Akeneo/EnhancedConnector/EventListener/ExportListener.php
class ExportListener
{
public function onExportFinished(ExportFinishedEvent $event)
{
if ($event->getExport()->getJobCode() === 'your_product_export') {
// Trigger SSH transfer, notify Slack, etc.
}
}
}
Bind to the event in services.yml:
services:
your_namespace.export_listener:
tags:
- { name: kernel.event_listener, event: pim_enhanced_connector.export.finished, method: onExportFinished }
Dynamic Configuration Use parameters for runtime configuration (e.g., last export time):
# app/config/parameters.yml
last_export_time: "%kernel.root_dir%/../var/last_export_time.txt"
Read/write the file in your export job:
file_put_contents($this->container->getParameter('last_export_time'), time());
Deprecated Services
pim_enhanced_connector.reader.orm.family → pim_base_connector.reader.orm.family).DataGrid Filter Bug
Product Detachment
PimGento Order Dependencies
Delta Export Edge Cases
updated_at isn’t updated correctly.updated_at timestamps in the database for critical products.Export Logs
Enable verbose logging in config.yml:
monolog:
handlers:
main:
level: debug
channels: ["!event"]
Check logs for SQL queries and export progress:
grep -i "export" app/log/prod.log
Query Builder Debugging Dump the final query in your custom reader:
$query = $qb->getQuery();
$sql = $query->getSQL();
file_put_contents('/tmp/export_query.sql', $sql);
CSV Validation Validate exports against PimGento’s requirements:
code and label (no spaces in codes).code, type, and family_code.enabled, family, and categories are correctly formatted.Performance Optimization
pim_enhanced_connector:
reader:
product:
batch_size: 1000
updated_at is indexed in the pim_catalog_product table.Testing Exports
pim:export:run command with --dry-run to validate configurations:
php app/console pim:export:run --export=your_job --dry-run
updated_at:
UPDATE pim_catalog_product SET updated_at = NOW() WHERE id = 123;
Custom Fields
pim_catalog_product_value):
// In your custom reader
$qb->leftJoin('p.productValues', 'pv')
->addSelect('pv.text as custom_field');
Backup Exports
# In a post-export script
tar -czvf /backups/exports-$(date +%Y%m%d).tar.gz /var/exports/
Documentation
family_code).How can I help you explore Laravel packages today?