Comment agir sur tout les éléments de ma boucle??

Eléphanteau du PHP | 24 Messages

25 mars 2011, 19:39

Bonjour,

Je n'arrive pas à résoudre un problème qui vous paraitra surement très simple.
J'importe dans une page une boucle de contenu du type
<?php
class MaClasse
{
    protected $machin;
    protected $truc;
    
    public function maBoucle(......)
    {
         $content_query = $this->bdd->query('SELECT * FROM matable ORDER BY id DESC LIMIT '.$debut.', '.$fin.'');
         while($done = $content_query->fetch())
         {
              echo ' 
              <div id="conteneur">'.$mon_contenu.'
                   <div id="illustration">'.$ma_div_style_float_left.'</div>
             </div>
         }
         $content_query->closeCursor();
    }
    ect........
}
Le contenu étant souvent plus important que mon illustration (je parle du contenu des div), je ne souhaite pas que ce contenu depasse sous mon illustration.
J'ai donc indiqué une hauteur de 100% pour la div d'illustration (qui est en float:left;) mais je dois récupérer pour se faire la hauteur du parent soit le conteneur.

Je me suis donc servi de offsetHeight en js pour l'attribuer au style de ce même Id pour récupérer la hauteur et l'attribuer au style CSS comme ceci :
<div id="blabla">
<?php
    $content = new MaClasse($db.....);
    $content->maBoucle(....);
?>
<script type="text/javascript">
    var hauteur = document.getElementById('conteneur').offsetHeight;
    document.getElementById('conteneur').style.height = hauteur + 'px';
</script>
</div>
C'est à partir de là que je bloque, ce n'est pas franchement surprenant mais cela ne fonctionne que sur le premier contenu de la boucle ensuite ça ne marche évidement pas.
J'aurais donc besoin de vos conseils pour me débloquer à ce niveau là.
Je sais pas si mon expliquation est assez claire mais bon pour vous c'est limite trop facile :D

ViPHP
ViPHP | 5462 Messages

25 mars 2011, 19:47

récupère le rowCount

sinon pas besoin de while + fetch un foreach suffit
foreach($content_query as $done)
:wink:

Eléphanteau du PHP | 24 Messages

25 mars 2011, 20:18

Merci pour ta réponse. (c'est toujours toi qui me répond =D> )
Alors j'ai donc récupéré le rowCount via une function getCount() mais là je n'arrive visiblement pas à m'en servir. :cry:
Je sais j'ai vraiment du mal mais je n'arrive pas à faire en sorte que mon script js prenne en compte ce nombre... je l'ai peut-être mal placé cela dit.
En bref j'essaye encore...

ViPHP
ViPHP | 5462 Messages

25 mars 2011, 20:24

fait en sorte que la requete lise un nombre limité d'entrées, et fait plutôt de la pagination

Eléphanteau du PHP | 24 Messages

25 mars 2011, 20:40

J'ai déjà une pagination de 5 éléments par page en fait appellé par une class Pagination (original je sais :D )
Mais je crois que j'ai compris le système, merci encore.

Eléphanteau du PHP | 24 Messages

26 mars 2011, 15:39

Bon bas j'ai visiblement rien compris pour changer :cry: .
Je n'ai surement pas compris le rowCount.
Après avoir essayé un tas de truc j'en suis presque revenu au point de départ que j'indiquerais ici.

Voilà ce que j'ai fait, je vais essayer d'être plus précis en virant le superflue...

BaseActu.class.php
<?php
    class BaseActu extends ...
	{
		protected $bdd;
		protected $val;
                ect...
		
		public function __construct($bdd, ect...)
		{
			$this->bdd = $bdd;
                        ect...
		}
		
		// ---------- AFFICHAGE DES ACTU ----------
		public function readActu($nbr)
		{
			// GET COMMENTAIRE
			if(isset($_GET['comment']))
			{
				if(empty($_GET['id']) OR empty($_GET['n']))
				{
					echo '<meta http-equiv="Refresh" content="0; url=zindex.php">';
				}
				else
				{
					$_GET['id'] = (int)$_GET['id'];
					$_GET['n'] = (int)$_GET['n'];
					
					if(empty($_SESSION['pseudo'])) { echo 'bla bla bla. <a href="inscription.php" title="s\'inscrire">inscription</a>'; }
					else { $this->commentActu($_GET['id'], $_GET['n']); }
				}
			}
			
			// PREPA PAGINATION
			$pagination = new Pagination();
			$pagination->controlPage($this->bdd, 'actu', $nbr);
			$firstEntry = $pagination->getFirstEntry();
			$messageByPage = $pagination->getMessageByPage();
			
			
			// BOUCLE ACTU EN WHILE POUR LE MOMENT ....désolé faut bien débuter :)
			$actu_query = $this->bdd->query('SELECT id, title, picture, content, signature, avatar, nbr_comment, DATE_FORMAT(act_date, \'%d / %m / %Y à %Hh%S\') AS act_date FROM actu ORDER BY id DESC LIMIT '.$firstEntry.', '.$messageByPage.'');
			while($actu_done = $actu_query->fetch())
			{
				echo '
				<div class="actu_border">
				    <div class="actu_write">
						<img src="avatar_user/'.$actu_done['avatar'].'" alt="'.$actu_done['signature'].'" class="actu_avatar" />
					</div>
					<div class="actu_titre">
					    <strong>'.strtoupper($actu_done['title']).'</strong>
						<br/><span class="grey">posté par <strong>'.$actu_done['signature'].'</strong> le '.$actu_done['act_date'].'</span>
					</div>
					<div id="actu_content">'; // <------------ LA DIV DONT IL EST QUESTION -------------------------------
					if($actu_done['picture'] != 1)
					{
						echo '
						<div class="actu_img"> // <---------- DIV en float:left et height de 100%
						    <img src="image/'.$actu_done['picture'].'" alt="'.$actu_done['title'].'" width="70" height="70" />
						</div>';
					}
					echo $actu_done['content'].'
					</div>
					<div class="actu_footer">
					    <div class="actu_comment">
								<span class="pink">'.$actu_done['nbr_comment'].'</span> commentaires</a> | 
								<a href="actu.php?no='.$actu_done['id'].'" title="voir les commentaires de l\'actu" class="awhite"> voir les commentaires</a> |
								<a href="actu.php?no='.$actu_done['id'].'" onclick="viewForm(\'viewComment\');return false" title="commenter cette actu" class="awhite"> poster un commentaire</a>
						</div>
					</div>
				</div>
				<br/>
				';
			}
			
			// PAGINATION
			$actualPage = $pagination->getActualPage();
			$pageNumber = $pagination->getPageNumber();
			$pagination->readPage('zindex', $actualPage, $pageNumber);
			$this->val = $actu_query->rowCount();
			$actu_query->closeCursor();
		}
                
                // LES AUTRES FONCTIONS INUTILES CONCERNANT MON PROBLEME.......................... puis
                public function getVal()
		{
			return $this->val;
		}
        }
zindex.php
<!-- ma page et mes imports inutiles ici...puis  -->
<div>
<?php
           // AFFICHAGE  ACTU
            $actu = new BaseActu($bdd);
	    $actu->readActu(5);
		?>
	     <script type="text/javascript">
		    var hauta = document.getElementById('<?php $actu->getVal(); ?>'+'actu_content').offsetHeight;
		    document.getElementById('<?php $actu->getVal(); ?>'+'actu_content').style.height = hauta + 'px';
            </script>
</div>
Et bien évidement ça n'affecte encore que ma première actu.
Quand je récupère ma valeur ça m'indique 5, forcément il y a 5 actus par page et c'est là que je bloque.

Le css de mes deux div (pas forcément utile mais bon)
#actu_content {
	padding:10px;
	text-align:left;
}
.actu_img {
	float:left;
	padding-right: 10px;
	padding-bottom:10px;
	height:100%;
}
Quand je change de page il prend bien évidement en compte la première actu affiché mais sur les 4 suivantes c'est de nouveau l'arnarchie.
Je ne demande évidement pas qu'on me mache le travail car si c'est le cas je ne comprendrai pas forcément mais m'indiquer où ça ne va pas.