2026-04-02

This commit is contained in:
gcch 2026-04-02 11:04:05 +02:00
commit 15371d2469
13 changed files with 295 additions and 125 deletions

View file

@ -6,25 +6,30 @@ declare(strict_types=1);
* Le modèle de la Page 404.
*/
namespace HaikuAtelier;
use Exception;
use HaikuAtelier\WP\Resource;
use Timber\Timber;
use function add_action;
$context = Timber::context();
$templates = ['404.twig'];
/**
* Charge les scripts et styles de la page.
* Charge les scripts et styles de la page.
*
* @throws Exception une exception est levée s'il est impossible d'obtenir la date de modification du fichier à charger
*/
function charge_scripts_styles_page_404(): void {
function load_page_resources(): void {
Resource::enqueue_style_file(
handle: 'haiku-atelier-2024-styles-page-a-propos',
path: '/assets/css/pages/page-modele-simple.css'
);
}
add_action('wp_enqueue_scripts', 'charge_scripts_styles_page_404');
add_action('wp_enqueue_scripts', load_page_resources(...));
Timber::render(
data: $context,

View file

@ -6,9 +6,17 @@ declare(strict_types=1);
* Le modèle de la Page Boutique (« E-Shop »).
*/
namespace HaikuAtelier;
use Exception;
use HaikuAtelier\Data\Product;
use HaikuAtelier\WP\Resource;
use Timber\Timber;
use WC_Product;
use function add_action;
use function array_map;
use function wc_get_products;
require_once __DIR__ . '/src/inc/TraitementInformations.php';
@ -25,11 +33,11 @@ $products = array_map(
$context['products'] = $products;
/**
* Charge les scripts et styles de la page.
* Charge les scripts et styles de la page.
*
* @throws Exception une exception est levée s'il est impossible d'obtenir la date de modification du fichier à charger
*/
function charge_scripts_page_boutique(): void {
function load_page_resources(): void {
Resource::enqueue_style_file(
handle: 'haiku-atelier-2024-styles-page-boutique',
path: '/assets/css/pages/page-boutique.css'
@ -44,10 +52,7 @@ function charge_scripts_page_boutique(): void {
);
}
add_action('wp_enqueue_scripts', 'charge_scripts_page_boutique');
// $lal = wp_json_encode($context);
// echo "<script>console.debug({$lal});</script>";
add_action('wp_enqueue_scripts', load_page_resources(...));
Timber::render(
data: $context,

View file

@ -6,14 +6,23 @@ declare(strict_types=1);
* Le modèle de la Page d'Accueil.
*/
namespace HaikuAtelier;
use Exception;
use HaikuAtelier\WP\Resource;
use Timber\Timber;
use function add_action;
$context = Timber::context();
$templates = ['accueil.twig'];
// Charge les scripts et styles de la page
function charge_scripts_styles_page_accueil(): void {
/**
* Charge les scripts et styles de la page.
*
* @throws Exception une exception est levée s'il est impossible d'obtenir la date de modification du fichier à charger
*/
function load_resources(): void {
Resource::enqueue_style_file(
handle: 'haiku-atelier-2024-styles-page-accueil',
path: '/assets/css/pages/page-accueil.css'
@ -24,7 +33,7 @@ function charge_scripts_styles_page_accueil(): void {
);
}
add_action('wp_enqueue_scripts', 'charge_scripts_styles_page_accueil');
add_action('wp_enqueue_scripts', load_resources(...));
Timber::render(
data: $context,

View file

@ -3,16 +3,24 @@
declare(strict_types=1);
/**
* Le modèle de la Page À Propos (« About »).
* Le modèle de la Page « À Propos (About) ».
*/
namespace HaikuAtelier;
use Exception;
use HaikuAtelier\WP\Resource;
use Timber\Timber;
use function add_action;
use function get_template_directory;
use function getimagesize;
use function is_bool;
$context = Timber::context();
$templates = ['a-propos.twig'];
// Les dimensions de l'image du storytelling.
/** Les dimensions de l'image du storytelling. */
$image_dimensions = getimagesize(filename: get_template_directory() . '/assets/img/about/haikuabout.png');
if (is_bool($image_dimensions)) {
@ -22,11 +30,11 @@ if (is_bool($image_dimensions)) {
$context['image_dimensions'] = $image_dimensions;
/**
* Charge les scripts et styles de la page.
* Charge les scripts et styles de la page.
*
* @throws Exception une exception est levée s'il est impossible d'obtenir la date de modification du fichier à charger
*/
function charge_scripts_styles_page_a_propos(): void {
function load_resources(): void {
Resource::enqueue_style_file(
handle: 'haiku-atelier-2024-styles-page-a-propos',
path: '/assets/css/pages/page-a-propos.css'
@ -37,7 +45,7 @@ function charge_scripts_styles_page_a_propos(): void {
);
}
add_action('wp_enqueue_scripts', 'charge_scripts_styles_page_a_propos');
add_action('wp_enqueue_scripts', load_resources(...));
Timber::render(
data: $context,

View file

@ -3,13 +3,28 @@
declare(strict_types=1);
/**
* Le modèle de la Page Panier (« Cart »).
* Le modèle de la Page « Panier (Cart) ».
*/
namespace HaikuAtelier;
use Exception;
use HaikuAtelier\WP\Resource;
use Illuminate\Support\Number;
use Timber\Timber;
use function add_action;
use function collect;
use function Crell\fp\pipe;
use function filemtime;
use function genere_balise_img_multiformats;
use function get_template_directory;
use function get_template_directory_uri;
use function is_bool;
use function recupere_et_formate_attributs_produit;
use function WC;
use function wp_enqueue_script_module;
use function wp_enqueue_style;
// Importe la fonction pour récupérer les informations affichées des Produits dans le Panier
require_once __DIR__ . '/src/inc/TraitementInformations.php';
@ -18,7 +33,7 @@ require_once __DIR__ . '/src/inc/TraitementInformations.php';
$contexte = Timber::context();
$modeles = ['panier.twig'];
$pays_acceptes = [
$allowed_countries = [
'AD',
'AL',
'AM',
@ -90,22 +105,33 @@ $pays_acceptes = [
];
// Récupère les informations affichés des Produits du Panier
$panier = [];
$cart = [];
/** @var float $sous_total_panier Le sous-total de la Commande dans le Panier. */
$sous_total_panier = WC()->cart->get_subtotal();
/** Le sous-total de la Commande dans le Panier. */
$cart_subtotal = WC()->cart->get_subtotal();
/** @var string|null $code_promo Le code promo appliqué au Panier s'il existe. */
$code_promo = collect(WC()->cart->get_applied_coupons())->first();
/** @var string|null $promo_code Le code promo appliqué au Panier s'il existe. */
$promo_code = collect(WC()->cart->get_applied_coupons())->first();
/** @var int $sous_total_reduction Le total du montant de la Réduction appliquée au Panier */
$sous_total_reduction = Number::format(WC()->cart->get_totals()['discount_total'], maxPrecision: 2);
/** @var array<string,int> */
$cart_totals = WC()->cart->get_totals();
/** @var float $total_panier Le total de la Commande dans le Panier. */
$total_panier = Number::format((float) WC()->cart->get_totals()['total'], maxPrecision: 2);
/** @var string $cart_subtotal_with_discount Le total du montant de la Réduction appliquée au Panier. */
$cart_subtotal_with_discount = $cart_totals['discount_total']
|> (static fn(int $number) => Number::format($number, maxPrecision: 2))
|> (static fn(false|string $number) => is_bool($number) ? '0' : $number);
/** @var float $cart_total Le total de la Commande dans le Panier. */
$cart_total = $cart_totals['total']
|> (static fn(int $number) => Number::format($number, maxPrecision: 2))
|> (static fn(false|string $number) => is_bool($number) ? '0' : $number)
|> (static fn(string $number) => (float) $number);
/** @var string $shipping_subtotal Le sous-total de la livraison. */
$shipping_subtotal = $cart_totals['shipping_total']
|> (static fn(int $number) => Number::format($number, precision: 0))
|> (static fn(false|string $number) => is_bool($number) ? '0' : $number);
foreach (WC()->cart->get_cart() as $cle_panier => $article_panier) {
$panier[$cle_panier] = [
$cart[$cle_panier] = [
'attributs' => $article_panier['data']?->get_type() === 'variation'
? recupere_et_formate_attributs_produit($article_panier['data']?->get_attributes())
: [],
@ -128,8 +154,7 @@ $email = WC()->customer->get_billing_email();
$adresse_livraison = WC()->customer->get_shipping();
$adresse_facturation = WC()->customer->get_billing();
$adresse_renseignee = $adresse_livraison['city'] !== '';
$pays_livraison = collect(WC()->countries->get_countries())->only($pays_acceptes)->toArray();
$total_livraison = Number::format((float) WC()->cart->get_totals()['shipping_total'], precision: 0);
$allowed_countries = collect(WC()->countries->get_countries())->only($allowed_countries)->toArray();
$methodes_livraison = collect(WC()->session->get('shipping_for_package_0')['rates'])
->values()
->map(static fn(WC_Shipping_Rate $methode): array => [
@ -143,36 +168,32 @@ $contexte['email'] = $email;
$contexte['adresse_livraison'] = $adresse_livraison;
$contexte['adresse_facturation'] = $adresse_facturation;
$contexte['adresse_renseignee'] = $adresse_renseignee;
$contexte['sous_total_panier'] = $sous_total_panier;
$contexte['code_promo'] = $code_promo;
$contexte['sous_total_reduction'] = $sous_total_reduction;
$contexte['total_panier'] = $total_panier;
$contexte['produits_panier'] = $panier;
$contexte['pays_livraison'] = $pays_livraison;
$contexte['sous_total_livraison'] = $total_livraison;
$contexte['sous_total_panier'] = $cart_subtotal;
$contexte['code_promo'] = $promo_code;
$contexte['sous_total_reduction'] = $cart_subtotal_with_discount;
$contexte['total_panier'] = $cart_total;
$contexte['produits_panier'] = $cart;
$contexte['pays_livraison'] = $allowed_countries;
$contexte['sous_total_livraison'] = $shipping_subtotal;
$contexte['methodes_livraison'] = $methodes_livraison;
// Charge les scripts et styles de la page
function charge_scripts_styles_page_panier(): void {
wp_enqueue_style(
/**
* Charge les scripts et styles de la page.
*
* @throws Exception une exception est levée s'il est impossible d'obtenir la date de modification du fichier à charger
*/
function load_resources(): void {
Resource::enqueue_style_file(
handle: 'haiku-atelier-2024-styles-page-panier',
src: get_template_directory_uri() . '/assets/css/pages/page-panier.css',
deps: [],
ver: filemtime(get_template_directory() . '/assets/css/pages/page-panier.css'),
media: 'all'
path: '/assets/css/pages/page-panier.css'
);
wp_enqueue_script_module(
Resource::enqueue_script_module_file(
id: 'haiku-atelier-2024-scripts-page-panier',
src: get_template_directory_uri() . '/assets/js/scripts-page-panier.js',
deps: [],
version: filemtime(get_template_directory() . '/assets/js/scripts-page-panier.js')
path: '/assets/js/scripts-page-panier.js'
);
}
add_action('wp_enqueue_scripts', 'charge_scripts_styles_page_panier');
// $lal = wp_json_encode($contexte);
// echo "<script>console.debug({$lal});</script>";
add_action('wp_enqueue_scripts', load_resources(...));
// Rendu
Timber::render(

View file

@ -18,6 +18,7 @@ $templates = ['boutique.twig'];
/** @var WP_Term */
$current_term = get_queried_object();
/** @var string */
$category_slug = $current_term->slug;
/** @var list<WC_Product> $raw_products Les informations brutes des Produits. */
@ -29,16 +30,21 @@ $raw_products = wc_get_products([
'status' => 'publish'
]);
/** @var list<Product> */
$products = array_map(
callback: Product::new(...),
array: $raw_products
);
$context['products'] = $products;
/** @var string */
$products_category_id = array_shift($raw_products)?->get_category_ids()[0] ?? '';
$context['products_category_id'] = $products_category_id;
/**
* Charge les ressources nécessaires pour la page d'Archive.
* Charge les scripts et styles de la page.
*
* @throws Exception une exception est levée s'il est impossible d'obtenir la date de modification du fichier à charger
*/
function load_page_resources(): void {
Resource::enqueue_style_file(
@ -57,9 +63,6 @@ function load_page_resources(): void {
add_action('wp_enqueue_scripts', 'load_page_resources');
$lal = wp_json_encode($context);
echo "<script>console.debug({$lal});</script>";
// Rendu
Timber::render(
filenames: $templates,