72 lines
2.4 KiB
PHP
72 lines
2.4 KiB
PHP
<?php
|
|
/**
|
|
* Le modèle de la Page d'un Produit.
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
use Timber\Timber;
|
|
use function Crell\fp\pipe;
|
|
|
|
require_once __DIR__ . "/src/inc/HTML.php";
|
|
require_once __DIR__ . "/src/inc/TraitementInformations.php";
|
|
|
|
// Contexte et modèles
|
|
$contexte = Timber::context();
|
|
$modeles = ["produit.twig"];
|
|
|
|
/** @var WC_Product $produit */
|
|
$produit = wc_get_product();
|
|
$donnees_produit = recupere_informations_produit_page_produit(wc_get_product());
|
|
|
|
$est_variation = $produit->get_type() == "variable";
|
|
$attributs = pipe(
|
|
match ($est_variation) {
|
|
$produit->get_attribute("pa_side") !== "" => $produit->get_attribute("pa_side"),
|
|
$produit->get_attribute("pa_stone") !== "" => $produit->get_attribute("pa_stone"),
|
|
$produit->get_attribute("pa_size") !== "" => $produit->get_attribute("pa_size"),
|
|
default => "",
|
|
},
|
|
fn($chaine) => explode(", ", $chaine),
|
|
);
|
|
$prix_variations = pipe(
|
|
// Récupère les Variations
|
|
wc_get_product()->get_children(),
|
|
// Récupère les informations de chaque Variation
|
|
fn($enfants) => array_map(callback: fn($id) => wc_get_product($id), array: $enfants),
|
|
// Récupère les Prix
|
|
fn($variations) => array_map(callback: fn($variation) => $variation->get_price(), array: $variations),
|
|
);
|
|
|
|
$produits_meme_collection = array_map(
|
|
callback: "recupere_informations_produit_page_produit",
|
|
array: recupere_produits_meme_collection($donnees_produit["collection"])($donnees_produit["id"]),
|
|
);
|
|
|
|
$contexte["produit"] = $donnees_produit;
|
|
$contexte["produits_meme_collection"] = $produits_meme_collection;
|
|
$contexte["est_variation"] = $est_variation;
|
|
$contexte["attributs"] = $attributs;
|
|
$contexte["prix_variations"] = $prix_variations;
|
|
|
|
/**
|
|
* Charge les Scripts nécessaires pour la page Produit.
|
|
*/
|
|
function charge_scripts_page_produit(): void {
|
|
wp_enqueue_script_module(
|
|
id: "haiku-atelier-2024-scripts-page-produit",
|
|
src: get_template_directory_uri() . "/assets/js/scripts-page-produit.js",
|
|
deps: [],
|
|
version: filemtime(get_template_directory() . "/assets/js/scripts-page-produit.js"),
|
|
);
|
|
wp_enqueue_script_module(
|
|
id: "haiku-atelier-2024-scripts-menu-categories",
|
|
src: get_template_directory_uri() . "/assets/js/scripts-menu-categories.js",
|
|
deps: [],
|
|
version: filemtime(get_template_directory() . "/assets/js/scripts-menu-categories.js"),
|
|
);
|
|
}
|
|
add_action("wp_enqueue_scripts", "charge_scripts_page_produit");
|
|
|
|
// Rendu
|
|
Timber::render(filenames: $modeles, data: $contexte);
|