haiku-atelier-2024/web/app/themes/haiku-atelier-2024/archive-product.php

55 lines
1.6 KiB
PHP
Executable file

<?php
declare(strict_types=1);
/**
* Le modèle de la Page Boutique (« E-Shop »).
*/
namespace HaikuAtelier;
use HaikuAtelier\Data\Product;
use HaikuAtelier\WP\Resource;
use Roots\WPConfig\Config;
use Timber\Timber;
use WC_Product;
use function add_action;
use function array_map;
use function assert;
use function is_string;
use function wc_get_products;
use function wp_create_nonce;
use function wp_json_encode;
$context = Timber::context();
$templates = ['boutique.twig'];
/** @var list<WC_Product> $wc_products Les informations brutes des Produits. */
$wc_products = wc_get_products(['limit' => 12, 'order' => 'DESC', 'orderby' => 'date', 'status' => 'publish']);
$products = array_map(callback: Product::from_wc_product(...), array: $wc_products);
$context['products'] = $products;
// Injecte les états initiaux des données du Produit sous forme de JSON dans le contexte.
$page_states = ['authString' => Config::get('WOOCOMMERCE_API_AUTH_STRING'), 'nonce' => wp_create_nonce('wc_store_api')]
|> wp_json_encode(...);
assert(is_string($page_states));
$context['page_states'] = $page_states;
add_action('wp_enqueue_scripts', function (): void {
Resource::enqueue_style_file(
handle: 'haiku-atelier-2024-styles-page-boutique',
path : '/assets/css/pages/page-boutique.css',
);
Resource::enqueue_script_module_file(
id : 'haiku-atelier-2024-scripts-page-boutique',
path: '/assets/js/scripts-page-boutique.js',
);
Resource::enqueue_script_module_file(
id : 'haiku-atelier-2024-scripts-menu-categories',
path: '/assets/js/scripts-menu-categories.js',
);
});
Timber::render(data: $context, filenames: $templates);