{"id":19429345,"url":"https://github.com/ergonode/integration-shopware","last_synced_at":"2025-04-14T17:05:22.867Z","repository":{"id":251221264,"uuid":"829334544","full_name":"ergonode/integration-shopware","owner":"ergonode","description":null,"archived":false,"fork":false,"pushed_at":"2024-08-28T06:43:02.000Z","size":1631,"stargazers_count":2,"open_issues_count":3,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-14T17:03:29.516Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ergonode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-16T08:17:01.000Z","updated_at":"2025-02-11T09:02:57.000Z","dependencies_parsed_at":"2024-08-28T07:56:08.395Z","dependency_job_id":"5ca5e558-9c77-4c52-96b3-e4f2af774a68","html_url":"https://github.com/ergonode/integration-shopware","commit_stats":null,"previous_names":["ergonode/integration-shopware"],"tags_count":38,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergonode%2Fintegration-shopware","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergonode%2Fintegration-shopware/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergonode%2Fintegration-shopware/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergonode%2Fintegration-shopware/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ergonode","download_url":"https://codeload.github.com/ergonode/integration-shopware/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248923766,"owners_count":21183952,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-10T14:19:00.573Z","updated_at":"2025-04-14T17:05:22.832Z","avatar_url":"https://github.com/ergonode.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Shopware Ergonode Integration\n\n## Description\n\nThis plugin synchronizes data from Ergonode to Shopware. It takes advantage of Ergonode's GraphQL API and utilizes\nErgonode's streams.\n\n## Key features\n\n### Category sync\n\nThis plugin synchronizes Ergonode's categories and single category tree into Shopware. First, it looks into\ncategoryTreeStream to see if the main tree has changed since last sync. If it did, the plugin then iterates through\nall category leaves using the cursor. Categories not found in Shopware are created with code as its name. Translations\nare not persisted at this point. Categories already existing in Shopware have their parents updated.\n\nAfter it's done, or when no changes were detected, the categoryStream is fetched and category translations are\npersisted.\n\n\u003e Missing features:\n\u003e - Categories removed from the tree in Ergonode are not removed from Shopware\n\u003e - Category order within the tree is not synchronized into Shopware\n\n### Product sync\n\nProducts are synchronized using productStream. Main fields (fields that are found directly in Shopware's ProductEntity)\ncan be configured in Settings \u003e Ergonode integration \u003e Attribute mappings. One Shopware field can be mapped to one\nErgonode field and one Ergonode field can be mapped to many Shopware fields. These mappings are not required; the plugin\nwill use Ergonode's code as product name if no such mapping is provided.\n\nErgonode attributes of type `select` and `multiselect` will be added as properties in Shopware after attribute sync\n(see below). Attributes of other type can be added as custom fields by selecting them in plugin's config page under\n\"Ergonode attributes as custom fields\".\n\nDeleted products are also deleted in Shopware using productDeletedStream.\n\n### Attribute sync\n\nIn order for attributes of type `select` or `multiselect` to appear in Shopware as properties, first the attribute sync\nmust be executed.\n\n### Product cross-selling\n\nProduct cross-selling can be set up by creating product relations in Ergonode, then in plugin config selecting those\nfields under \"Ergonode attributes as cross selling\".\n\n### Product visibility\n\nProduct visibility can be set up using Ergonode's segments functionality. In Shopware plugin configuration segments'\nAPI keys can be set per sales channel and product visibility per sales channel will be updated accordingly.\n\n### Languages\n\nErgonode languages are synchronized into Shopware.\n\n### Executing sync and scheduling\n\nThe synchronization process is added as a bunch of scheduled tasks which are run periodically. The process can be\ntriggered manually in Settings \u003e Ergonode integration \u003e Synchronization. Tasks use a lock system so that only one task\nof given type is ran at once. These tasks utilize Ergonode's cursors where applicable, meaning that they only process\nchanges that occurred since last sync.\n\n### Sync history\n\nSynchronization history can be viewed under Settings \u003e Ergonode integration \u003e Import history.\n\n## Configuration\n\nThe minimal configuration required involves setting up plugin's configuration in Shopware. The required settings are:\n\n- Ergonode GraphQL API endpoint (global setting)\n- Ergonode API key (can be set up per sales channel)\n- Code of the category tree to synchronize\n\n## Development\n\n### Dev notes\n\nProductSyncProcessor might not properly handle variants that were \"detached\" since last sync.\n\nWhen uninstalling plugin and selecting \"Remove all app data permanently\", all plugin tables and mappings will be\nremoved. This means that all mappings will be lost and next synchronization will create duplicated entities.\n\n### Testing\n\nIn plugin root you can use the make commando and then the test you want to perform:\n\n`make phpstan`\n`make phpunit`\n`make phpmd`\n\n### Building ZIP\n\nTo build Store package execute:\n\n`make release`\n\nNOTE: The make file is used from the plugin root.\n\n### Cache\n\nIn order to cache Ergonode GQL API requests you need to change the parameter `ergonode_integration.use_gql_cache`\nin `src/Resources/config/parameters.yml` to `true` and\nuse `Ergonode\\IntegrationShopware\\Api\\Client\\ErgonodeGqlClientInterface` in your\nclasses instead of concrete `Ergonode\\IntegrationShopware\\Api\\Client\\ErgonodeGqlClient` class. Cached client class is\n`Ergonode\\IntegrationShopware\\Api\\Client\\CachedErgonodeGqlClient`.\n\nMore cache config options can be found in\n`src/Resources/config/packages/cache.yml`.\n\nIn order to clear cache pool run `bin/console cache:pool:clear ergonode_gql_request_cache`.\n\nAvailable cache pools:\n- ergonode_gql_request_cache\n- ergonode_attribute_mapping_cache\n\n## Plugin version compatibility\n| Shopware         | Plugin      |\n|------------------|-------------|\n| 6.6 from 6.6.0.0 | Version 3.x |\n| 6.5 from 6.5.0.0 | Version 2.x  |\n| 6.4 from 6.4.0.0 | Version 1.x  |","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fergonode%2Fintegration-shopware","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fergonode%2Fintegration-shopware","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fergonode%2Fintegration-shopware/lists"}