Page 1 sur 1
Distribuer une liste $body sur 2 colonnes
Posté : 02 déc. 2013, 02:34
par cignet
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.
Re: Distribuer une liste $body sur 2 colonnes
Posté : 02 déc. 2013, 04:36
par orenx22
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
Re: Distribuer une liste $body sur 2 colonnes
Posté : 02 déc. 2013, 10:35
par nico63800
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

Re: Distribuer une liste $body sur 2 colonnes
Posté : 02 déc. 2013, 10:52
par sirakawa
Je vois peu de echo dans le code d'origine...
Un exemple non testé se trouve ici:
http://codepen.io/raphaelgoetter/pen/ehfxb
Re: Distribuer une liste $body sur 2 colonnes
Posté : 02 déc. 2013, 14:20
par cignet
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
Re: Distribuer une liste $body sur 2 colonnes
Posté : 02 déc. 2013, 15:48
par sirakawa
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";
?>
Re: Distribuer une liste $body sur 2 colonnes
Posté : 02 déc. 2013, 19:26
par cignet
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
Re: Distribuer une liste $body sur 2 colonnes
Posté : 02 déc. 2013, 20:15
par nico63800
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";
Re: Distribuer une liste $body sur 2 colonnes
Posté : 02 déc. 2013, 20:41
par cignet
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