Mammouth du PHP |
586 Messages
23 nov. 2023, 19:57
Puisque tu connais les coordonnées de chaque tile (et les dimensions, je suppose), au lieu d'utiliser un tableau html, une alternative pourrait être le positionnement absolu en css.
L'idée est d'afficher toutes les balises html <img> des tiles en position absolute dans un div conteneur en position relative.
Puis pour chaque tile, calculer les propriétés css top et left pour positionner l'image dans le conteneur en fonction de pos_x, pos_y et des dimensions :
- la tile avec pos_x=0 et pos_y=0 sera placée en haut à gauche du conteneur.
- la tile avec pos_x=0 et pos_y=1 sera placée à droite de la première.
- la tile avec pos_x=1 et pos_y=0 sera placée sous de la première, etc.
<?php
const TILE_WIDTH = 150;
const TILE_HEIGHT = 150;
$pays = $_GET['pays'] ?? 'France';
/** @var \PDO $bdd */
$pdostat = $bdd->prepare('SELECT tile, pos_x, pos_y FROM map WHERE pays_name=?');
$pdostat->execute([$pays]);
$tiles = $pdostat->fetchAll();
?>
<h1><?= htmlspecialchars($pays) ?></h1>
<?php if (empty($tiles)) : ?>
<p>Pas de tiles !</p>
<?php else : ?>
<div style="position: relative;">
<?php foreach ($tiles as $tile) : ?>
<img src="<?= $tile['tile'] ?>"
style="position: absolute; top: <?= $tile['pos_x'] * TILE_WIDTH ?>px; left: <?= $tile['pos_y'] * TILE_HEIGHT ?>px;"
alt="">
<?php endforeach; ?>
</div>
<?php endif; ?>