{"id":23582465,"url":"https://github.com/fork/craft-transform","last_synced_at":"2025-10-25T13:39:00.559Z","repository":{"id":56096969,"uuid":"309747605","full_name":"fork/craft-transform","owner":"fork","description":"Transform Craft CMS element and field data structures","archived":false,"fork":false,"pushed_at":"2025-04-08T15:46:45.000Z","size":56,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-06-07T09:19:07.367Z","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":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fork.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","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,"zenodo":null}},"created_at":"2020-11-03T16:40:10.000Z","updated_at":"2025-04-08T15:46:12.000Z","dependencies_parsed_at":"2025-04-08T16:41:15.527Z","dependency_job_id":null,"html_url":"https://github.com/fork/craft-transform","commit_stats":{"total_commits":10,"total_committers":2,"mean_commits":5.0,"dds":"0.30000000000000004","last_synced_commit":"bf91f144adf4bc08e9e251723a5ef8bd4ba3b38e"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/fork/craft-transform","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fork%2Fcraft-transform","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fork%2Fcraft-transform/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fork%2Fcraft-transform/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fork%2Fcraft-transform/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fork","download_url":"https://codeload.github.com/fork/craft-transform/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fork%2Fcraft-transform/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262094861,"owners_count":23258052,"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-12-27T01:11:40.971Z","updated_at":"2025-10-25T13:38:55.541Z","avatar_url":"https://github.com/fork.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"left\"\u003e\n  \u003cimg width=\"600\" title=\"Craft Transform\" src=\"resources/img/plugin-logo.png\" alt=\"Craft Transform\" /\u003e\n\u003c/div\u003e\n\n# Transform Plugin for Craft 5.x\n\n**Table of contents**\n\n- [Features](#features)\n- [Requirements](#requirements)\n- [Setup](#setup)\n- [Usage](#usage)\n- [Roadmap](#roadmap)\n\n\u003c!-- /TOC --\u003e\n\n---\n\n## Features\n\n- Transform Craft CMS contents to custom data structures\n- Create custom Transformer classes for your components\n- Cache contents on a Transformer basis (via providing `getCacheKey`)\n\n## Requirements\n\n- Craft CMS \u003e= 5.x\n\n## Setup\n\n**1. Install**\n\nInstall the package\n\n```sh\ncd /path/to/project\ncomposer require fork/craft-transform\n```\n\n**2. Configure namespace and create transformers**\n\n- Copy the example `config.php` to your Craft config directory and rename it to `transform.php`\n- Specify the namespace to your custom Transformer classes (in your project plugin/module). Here's an example:\n\n```php\n\u003c?php\n\nreturn [\n    '*' =\u003e [\n        'transformerNamespace' =\u003e '\\company\\project\\transformers'\n    ],\n    'dev' =\u003e [\n        'enableCache' =\u003e false,\n    ],\n    'staging' =\u003e [\n        'enableCache' =\u003e true,\n    ],\n    'production' =\u003e [\n        'enableCache' =\u003e true,\n    ],\n];\n```\n\nIn your project plugin/module create a `transformers` directory to put your transformers. Here is an example Transformer class:\n\n```php\n\u003c?php\n\nnamespace company\\project\\transformers;\n\nuse Craft;\nuse League\\Fractal\\TransformerAbstract;\n\nclass FooterTransformer extends TransformerAbstract {\n\n    public function transform()\n    {\n        $footer = Craft::$app-\u003eglobals-\u003egetSetByHandle('footer');\n        $footerNavGlobals = $footer-\u003efooterNavigationElements-\u003eall();\n        $footerLinks = [];\n\n        foreach ($footerNavGlobals as $linkEntry) {\n            $link = [\n                'href' =\u003e $linkEntry-\u003enavigationLink-\u003egetUrl(),\n                'name' =\u003e $linkEntry-\u003enavigationLink-\u003egetText(),\n                'slug' =\u003e $linkEntry-\u003enavigationLink-\u003ehasElement() ? $linkEntry-\u003enavigationLink-\u003egetElement()-\u003eslug : $linkEntry-\u003enavigationLink-\u003egetUrl(),\n                'target' =\u003e $linkEntry-\u003enavigationLink-\u003egetTarget()\n            ];\n            $footerLinks[] = $link;\n        }\n\n        return $footerLinks;\n    }\n\n}\n```\n\n## Usage\n\nIn your templates you can use `craft.transform.getData()`. The first parameter is optional. It could be your `entry` to get the data from.\nAlso, it could be `null`. The second parameter must match with the corresponding Transformer class. E.g. pass `'Footer'` to use the `FooterTransformer`.\n\n```twig\n{% set articleData = {\n    headline: entry.title,\n    contentBlocks: craft.transform.getData(entry, 'ContentBlocks')\n} %}\n\n{% include '@components/templates/article-page/article-page.twig' with {\n    header: craft.transform.getData(null, 'Header'),\n    headline: articleData.headline,\n    contentBlocks: articleData.contentBlocks,\n    footer: craft.transform.getData(null, 'Footer')\n} only %}\n```\n\n\n## Roadmap\n\n- [x] Caching\n- [x] Logo\n- [ ] Settings maybe (instead of config file)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"resources/img/heart.png\" width=\"38\" height=\"41\" alt=\"Made with love by Fork\" /\u003e\n\n  \u003cp\u003eBrought to you by \u003ca href=\"https://www.fork.de\"\u003eFork Unstable Media GmbH\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffork%2Fcraft-transform","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffork%2Fcraft-transform","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffork%2Fcraft-transform/lists"}