[RESOLU] Distribuer une liste $body sur 2 colonnes

Petit nouveau ! | 4 Messages

02 déc. 2013, 02:34

Bonjour,

Je ne suis pas du tout familiarisée avec la syntaxe php (l'html va (très) bien mais là…) et je ne sais pas comment résoudre ou en tout cas distribuer les éléments suivants sur deux colonnes (données "Vertical" et "Horizontal" cf. titre des parties en h5). MERCI D'AVANCE pour vos lumières :

-------------------------------------------

$body .= "\n<h5><strong>Horizontal</strong></h5>\n<ul>\n";
$i = 0;
foreach ($question_array as $value) {
$body .= '<li class="eci-list">' . ($i + 1) . '. ' . str_replace('"', '', stripslashes($value)) . "</li>\n";
if ($i == $last_across) {
$body .= "</ul>\n<h5><strong>Vertical</strong></h5>\n<ul>\n";
}
$i++;
}
$body .= "</ul>\n";

-------------------------------------------

Une liste de définitions (générées ailleurs et sans limite de nombre) apparaissent pour chaque catégorie (vertical ou horizontal). C'est pour des mots croisés.

Eléphant du PHP | 79 Messages

02 déc. 2013, 04:36

Bonjour, pourquoi tu n'utilises pas la balise 'table' ?

Je te conseil fortement aussi de ne pas confondre les deux langages, entend par là que tu n'as pas besoin de faire echo "plein de code html", la ou tu as besoin d'afficher une variable tu ouvre et tu fermes une balise php style <?php echo $var ?>

exemple pour faire un tableau html :

<div id="grille">
<table>
<thead>
<tr>
<th>col1</th>
<th>col2</th>
<th>col3</th>
</tr>
</thead>
<tbody>
<?php foreach( $result as $item) ?>
<!-- tr représente les lignes -->
<tr>
<!-- td les cellules donc les colonnes -->
<td><?php echo $item['col1'] ?></td>
<td><?php echo $item['col2'] ?></td>
<td><?php echo $item['col3'] ?></td>
</tr>
<?php endforeach ?>
</tbody>
</table>
</div>
ciao

Eléphanteau du PHP | 46 Messages

02 déc. 2013, 10:35

bonjour, la remarque de orenx22 est tout à fait pertinente
faire afficher du code html par php n'est pas une bonne pratique
elle consomme du temps serveur et des ressources alors qu'on a nul besoin de php pour afficher le contenu de la page

la mise en forme par tableau pour avoir 2 colonnes est une solution , une autre est d'utiliser des div

pour exemple, dans ton cas:
(adapte la largeur des div à ton template)
<?php
	$tableau_defin_horiz  = array();
	$tableau_defin_vertic = array();
	
	for($indice=1; $indice<=15; $indice++)
	{
		$tableau_defin_horiz[$indice]   = "definition horizontale ".$indice;
		$tableau_defin_vertic[$indice]  = "definition verticale ".$indice;
	}
	
	$last_across = 15;
?>
	
<div style="width: 800px; height: auto;">

	<div style="display: block; float: left; width: 380px;">
	<h2>Horizontal</h2>
		<?php for($i=1; $i<=$last_across; $i++) : ?>
			<?php echo $tableau_defin_horiz[$i]?><br />
		<?php endfor; ?>
	</div>
	
	<div style="display: block; float: left; width: 380px;">
	<h2>Vertical</h2>
		<?php for($i=1; $i<=$last_across; $i++) : ?>
			<?php echo $tableau_defin_vertic[$i]?><br />
		<?php endfor; ?>
	</div>	
</div>
bien sur ceci n'est qu'une piste à améliorer
ca te donne une base de travail
salutations :D

Mammouth du PHP | 2278 Messages

02 déc. 2013, 10:52

Je vois peu de echo dans le code d'origine...
Un exemple non testé se trouve ici:
http://codepen.io/raphaelgoetter/pen/ehfxb
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Petit nouveau ! | 4 Messages

02 déc. 2013, 14:20

Bonjour et merci beaucoup à tous pour vos retours.

Mon problème ne se situe pas vraiment dans la construction du tableau ou de la div, en fait j'y ai pensé, ai essayé, mais sans résultats juste plein d'erreurs.
C'est la déclaration $body ainsi que la condition/boucle (?) foreach qui englobent et gèrent les 2 données (vertical, horizontal). Je ne sais pas comment distribuer correctement la déclaration dans sa forme actuelle… Je ne sais pas si je suis claire…
Je suis vraiment nulle en php et c'est le seul exemple sympa de mots croisés interactif que j'ai pu trouver. J'ai réussi à modifier quelques éléments à ma convenance, mais cette imbrication là me rend plus nerveuse

Mammouth du PHP | 2278 Messages

02 déc. 2013, 15:48

Un essai. Reste à savoir comment tu veux disposer les définitions:
DEFS HOR GRILLE
GRILLE
GRILLE
DEF VERT
ou autrement?
<style>
body {
  margin: 10px;
  font-family: helvetica, arial, sans-serif;
}
.columns {
			-webkit-columns: 4;
			-moz-columns: 4;
			columns: 4;
}
		
p {
			color: #333;
			padding: 10px;
			margin: 0;
			background: beige;
}
</style>
<?PHP

$definitions_h = array(
1=> array ("armoire"),
2 => array("chaise", "table"),
3 => array("maison", "cheminer"),
);
$nb_h = count($definitions_h);

$definitions_v = array(
1=> array ("homme"),
2 => array("femme", "pendule"),
3 => array("corps", "Levy-Strauss"),
);
$nb_v = count($definitions_v);

$textes_h ="";
for ( $i = 1; $i<= $nb_h; $i ++)
{
	$defs = $definitions_h[$i];
	$textes_h .= "<p>".$i." ";
	foreach ($defs as $definition)
	{
		$textes_h .= " ".$definition.".";	
	}
	$textes_h .= "</p>";
}
print "$textes_h";


$textes_v ="";
for ( $i = 1; $i<= $nb_v; $i ++)
{
	$defs = $definitions_v[$i];
	$textes_v .= "<p>".$i." ";
	foreach ($defs as $definition)
	{
		$textes_v .= " ".$definition.".";	
	}
	$textes_v .= "</p>";
}
print "$textes_v";
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Petit nouveau ! | 4 Messages

02 déc. 2013, 19:26

Merci beaucoup,

Mais encore une fois ce qui me perturbe c'est que je travaille sur la base de la déclaration d'un plugin déjà existant.
Je ne peux pas tout retravailler puisque certaines données prennent leurs sources dans d'autres fichiers ou à d'autres niveaux (que je ne maîtrise donc pas).

En fait dans les exemples que vous me proposez je ne vois jamais reprise la déclaration suivante :
foreach ($question_array as $value) {
$body .= '<li class="eci-list">' . ($i + 1) . '. ' . str_replace('"', '', stripslashes($value)) . "</li>\n";

qui me semble indispensable pour la redistribution des données

Voic la page concernée pour vous rendre compte, et voici le mot de passe pour y accéder : colombe
http:// www. brazza-va- bien. com / mots-croises /

Merci

Eléphanteau du PHP | 46 Messages

02 déc. 2013, 20:15

ok je cerne mieux ton pb :)
voilà une seconde proposition
essaies çà:


$body .= "\n
<table><tr>
<td><h5><strong>Horizontal</strong></h5>\n<ul>\n";
$i = 0;
foreach ($question_array as $value) {
$body .= '<li class="eci-list">' . ($i + 1) . '. ' . str_replace('"', '', stripslashes($value)) . "</li>\n";
if ($i == $last_across) {
$body .= "</ul>\n</td><td><h5><strong>Vertical</strong></h5>\n<ul>\n";
}
$i++;
}
$body .= "</ul></td></tr></table>\n";

Petit nouveau ! | 4 Messages

02 déc. 2013, 20:41

Nico !!!!
Tu es un Prince, c'est GENIAL, PARFAIT les mots même me manquent.
Tu peux jeter un coup d'oeil à l'url donnée précédemment si tu veux.

Merci Nico et encore merci à tous