Comment modifier ma fonction comme dans un système de pagination pour qu'il n'affiche que les 6 prochains menus ?

Eléphant du PHP | 137 Messages

17 août 2022, 04:46

Bonjour.

J'ai un petit nouveau bug de changement d'affichage de menu de mon projet USSD (ce que j'appelle: "PAGINATION") qui pourtant fonctionnait avant que je ne fasse des modifications dans une autre partie de mon projet.

Image

Comme vous pouvez le constater sur la capture d'écran que je viens de vous envoyer, la Page suivante (7 à 12) sélectionnée en bleu sur cette capture d'écran, du Menu apparait juste en dessous de l'index alors que quand on envoie le message "99" qui actionne l'option "Next", la 1ère liste de Menu de l'index par défaut (1 à 6) devrait disparaître et laisser place à la liste de Menus suivante (7 à 12).

LE CODE QUI GERE L'AFFICHAGE DES MENUS EST LE SUIVANT:

Code : Tout sélectionner

function toString(){ $objectString=''; $items=$this->children; $bufferLimit=(count($items)==0)?1:$this->getBufferLimit()+1; do{ $bufferLimit-=1; $objectString=$this->recurseMenu($items,$bufferLimit); }while(strlen($objectString>160)); $this->index=$bufferLimit; return $objectString; } function getBufferLimit() { $len=count($this->children); $margin=$len-$this->index; if($margin<5) return $this->index+$margin; else return $this->index+6; //Permet de définir le Nombre de Menu à afficher au niveau de l'index "/ussd/receiver.php" dont le Menu est "/ussd/MyTree.php". }
Comment donc modifier le return $this->index+6 dans ma fonction getBufferLimit pour qu'il affiche SEULEMENT les 6 prochaines liste de Menu même quand on clique sur l'action "99. Next" au lieu de les afficher en dessous des précédents comme on le voit actuellement sur la capture d'écran ci-dessus sachant qu'elle est également utilisé dans la fonction "toString" ci-dessous ???

Merci de m'aider s'il vous plaît.

Mammouth du PHP | 1967 Messages

17 août 2022, 09:25

salut, de nouveau j'ai rien compris mais cette ligne a des parenthèse mal placées

}while(strlen($objectString>160));
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 137 Messages

17 août 2022, 17:37

Merci pour votre réponse. Mais $objectString représente tout ou l'ensemble du contenu qui s'affiche sur l'écran contenu de la page dans la fonction recurseMenu:

Code : Tout sélectionner

function recurseMenu($items,$bufferLimit) { $objectString="<strong>". $this->getTitle() . "</strong>" . PHP_EOL; $lastMenu=false; if(count($items)>0) { foreach ($items as $i => $item) { if ($i >= $bufferLimit){ break; } $num = $i + 1; //get node by name $userSessions = $_SESSION['userSessions']; $currUserSession = $userSessions[$this->address]; $node = $currUserSession->getNode($item); $title = $node->getTitle(); $objectString .= PHP_EOL . $num . '. ' . $title; } } else { $objectString=$objectString.PHP_EOL . 'NO DATA AVAILABLE, TRY AGAIN LATER'; } $lastMenu=$bufferLimit==count($items); $objectString=$objectString . PHP_EOL . PHP_EOL . "<strong>0. Exit</strong>"; if($this->getParent() != '0'){ $objectString=$objectString . PHP_EOL . "<strong>#. Back</strong>"; } if($lastMenu===false){ $rem=count($items)-$this->index; $objectString=$objectString . PHP_EOL . "<strong>99. Next (".$rem.")</strong>"; } return $objectString; }
Vraiment aidez-moi s'il vous plaît à résoudre ce problème.

Eléphant du PHP | 137 Messages

17 août 2022, 22:20

Quand je débugue lors du 1er appel à "99. Next", je reçois: comme valeur de $len = 12, de $margin = 12 et de $this->index = 0.
Quand je débugue lors du 2ème appel à "99. Next", je reçois: comme valeur de $len = 12, de $margin = 7 et de $this->index = 5.
Quand je débugue lors du 3ème appel à "99. Next", je reçois: comme valeur de $len = 12, de $margin = 2 et de $this->index = 10.


Voici mon code avec le débugage:

Code : Tout sélectionner

function getBufferLimit() { $len=count($this->children); $margin=$len-$this->index; echo "<pre>"; echo $len; echo "</pre>"; echo "<pre>"; echo $margin; echo "</pre>"; echo "<pre>"; echo $this->index; echo "</pre>"; if($margin<5) return $this->index+$margin; else return $this->index+5; //Permet de définir le Nombre de Menu à afficher au niveau de l'index "/ussd/receiver.php" dont le Menu est "/ussd/MyTree.php". }
Comment donc scinder l'affichage des menus par 5 à chaque appel de "99. Next" ???

Merci de m'aider s'il vous plaît.