83 lines
2.2 KiB
PHP
Executable file
83 lines
2.2 KiB
PHP
Executable file
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* Le modèle de la Page d'Archive d'une Catégorie de Produits.
|
|
*/
|
|
|
|
namespace HaikuAtelier;
|
|
|
|
use HaikuAtelier\Data\Product;
|
|
use HaikuAtelier\WP\Resource;
|
|
use Illuminate\Support\Arr;
|
|
use Roots\WPConfig\Config;
|
|
use Timber\Timber;
|
|
use WC_Product;
|
|
use WP_Term;
|
|
|
|
use function add_action;
|
|
use function assert;
|
|
use function base64_encode;
|
|
use function get_queried_object;
|
|
use function is_array;
|
|
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 WP_Term La Catégorie affichée. */
|
|
$current_term = get_queried_object();
|
|
|
|
/** @var list<Product> Les Produits de la Catégorie affichée. */
|
|
$products = wc_get_products([
|
|
'category' => [$current_term->slug],
|
|
'limit' => 12,
|
|
'order' => 'DESC',
|
|
'orderby' => 'date',
|
|
'status' => 'publish',
|
|
])
|
|
|> function (/** @var list<WC_Product>|stdClass */ mixed $products): array {
|
|
assert(is_array($products), 'Les Produits de la Catégorie doivent être un tableau.');
|
|
|
|
return $products;
|
|
}
|
|
|> (static fn(/** @var list<WC_Product> */ array $products): array => Arr::map(
|
|
$products,
|
|
Product::from_wc_product(...),
|
|
));
|
|
|
|
$context['products'] = $products;
|
|
$context['category_id'] = $current_term->term_id;
|
|
|
|
// Injecte les états initiaux des données du Produit sous forme de JSON dans le contexte.
|
|
$page_states = [
|
|
'nonce' => wp_create_nonce('wc_store_api'),
|
|
'authString' => base64_encode(
|
|
Config::get('WOOCOMMERCE_API_CONSUMER_KEY') . ':' . Config::get('WOOCOMMERCE_API_CONSUMER_SECRET'),
|
|
),
|
|
]
|
|
|> 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',
|
|
);
|
|
});
|
|
|
|
// Rendu
|
|
Timber::render(filenames: $templates, data: $context);
|