true, 'languages' => true, 'cache' => [ 'shopify' => true ], 'routes' => [ // French product pages (default) [ 'pattern' => '(:any)', 'action' => function($slug) { // Skip known pages if (in_array($slug, ['home', 'error', 'thanks'])) { return null; } $products = getShopifyProducts(); foreach ($products as $product) { if ($product['handle'] === $slug) { return Page::factory([ 'slug' => $product['handle'], 'template' => 'product', 'parent' => site()->homePage(), 'content' => [ 'title' => $product['title'], 'shopifyHandle' => $product['handle'], 'uuid' => $product['id'] ] ]); } } // Not a product, let Kirby handle normally return null; } ], // English product pages [ 'pattern' => 'en/(:any)', 'action' => function($slug) { // Skip known pages if (in_array($slug, ['home', 'error', 'thanks'])) { return null; } $products = getShopifyProducts(); foreach ($products as $product) { if ($product['handle'] === $slug) { return Page::factory([ 'slug' => $product['handle'], 'template' => 'product', 'parent' => site()->homePage(), 'content' => [ 'title' => $product['title'], 'shopifyHandle' => $product['handle'], 'uuid' => $product['id'] ] ]); } } // Not a product, let Kirby handle normally return null; } ] ], 'thumbs' => [ 'quality' => 85, 'format' => 'webp', 'presets' => [ 'product-card' => [ 'width' => 600, 'height' => 600, 'crop' => true, 'format' => 'webp' ], 'product-detail' => [ 'width' => 1200, 'format' => 'webp' ], 'default' => [ 'width' => 1024, 'format' => 'webp' ], ], 'srcsets' => [ 'default' => [400, 600, 800, 1024, 1440, 2048], 'webp' => [ '400w' => ['width' => 400, 'format' => 'webp'], '600w' => ['width' => 600, 'format' => 'webp'], '800w' => ['width' => 800, 'format' => 'webp'], '1024w' => ['width' => 1024, 'format' => 'webp'], '1440w' => ['width' => 1440, 'format' => 'webp'], ], ], ], ];