Besoin d'aide en php, explication et eclairissement

Besoin d'aide en php, explication et eclairissement - PHP - Programmation

Marsh Posté le 27-09-2002 à 17:47:34    

first, je débute php, donc je galère un peu ..
Je veux mettre un forum sur mon site. j'en ai trouvé un qui est très bien, mais il manque l'option "Etre prévenu par email lorsque réponse", l'option existe seulement sur la page ou on peut lire tous les posts du sujet..
Alors mon but, c 'est d'ajouter un checkbox , regarder si le checkbox a été sélectionné, puis ensuite lancer la méthode de la classe qui est nécessaire..
C'est la que je bloque.. Je ne suis pas sûr de comprendre correctement la syntaxe sous Php..
et c'est la que j'ai besoin d'aide..
 
la classe est appelé de cette facon.
fixed]require $root_path."sources/misc/tracker.php";[/fixed]
 
Ca je le comprend..
mais ce que je comprend pas.. c'est que dans le fichier tracker.php.. Je ne vois rien qui appelle la méthode de la classe.
 

$idx = new tracker;
 
class tracker {
 
    var $output    = "";
    var $base_url  = "";
    var $html      = "";
 
    var $forum     = array();
    var $topic     = array();
    var $category  = array();
 
     
    function tracker($is_sub=0) {


 
je suppose que la fonction tracker est appelé en créant l'objet
$idx = new tracker;
mais j'aurais pensé qu'il fallait ecrire quelque chose comme ca pour que ca marche..
$idx = new tracker;
$idx->tracker(); //Appelle la methode tracker de la classe tracker..
 
Pouvez m'expliquer comment ca marche tout ca ??
et comment je fais pour lancer tracker avec $is_sub=1 ??
 
HELP HELP  :ouch:

Reply

Marsh Posté le 27-09-2002 à 17:47:34   

Reply

Marsh Posté le 27-09-2002 à 18:47:34    

tracker() est le constructeur de la classe tracker.
Donc en instanciant l'objet par  
$idx= new Tracker();
tu appelles et exécutes le constructeur.
 
Tu pourrais me donner l'adresse des sources ou je peux télécharger ce forum stp :)


---------------
...oups kernel error...
Reply

Marsh Posté le 27-09-2002 à 19:19:50    

ouais pas de probleme...
http://www.ibf-french.com
 
Ok, bon alors comment je fais pour que $is_sub=1 quand instancie l'objet ?  

Reply

Marsh Posté le 27-09-2002 à 19:28:25    

thx :)
 
tu fais  
$idx= new Tracker(1);
 
$is_sub est initialisé à 0 si tu ne spécifies pas de valeur.
C'est une valeur par défaut qui permet de ne pas devoir l'écrire tout le temps.


---------------
...oups kernel error...
Reply

Marsh Posté le 27-09-2002 à 19:49:41    

ok, ben alors..
Quelque chose que je ne comprends pas..
Si tu avais le source , je pourrais te poser une question car la, j ai peur de ne pas etre clair..
 
..
Je me lance quand meme..
 
Normalement sur ce forum.
Tu peux suivre un topic en cliquant sur "suivre ce sujet"
ce que ca fait.. c'est que on appelle on instancie un objet de la class tracker... Si $is_sub=0. alors ca perment de rediriger vers une page qui affiche des messages (d'erreur ou de confirmation d'inscription) , si $is_sub =1, ca ne redirige pas.. Ca passe directement sur les message..  
exemple :  
 

if ($is_sub != 1)
  {
   $print->redirect_screen( $ibforums->lang['sub_added'], "act=ST&f={$this->topic['fid']}&t={$this->topic['tid']}&st={$ibforums->input['st']}" );
  }
  else
  {
   return;
  }


 
 
Hors... (ce que je veux c'est pouvoir appeler ce constructeur  
avec $is_sub=1 )
Quand j'ajoute celle ligne : require $root_path."sources/misc/tracker.php"; dans la page ou on enregistre le post.. et que je mets $is_sub a 1(il est vraiment a 1, ca marche, pas de probleme)
Il ne prend plus compte de la redirection dans la page ou j ai mis la ligne citée plus haut.
Ceci est la ligne de redirection de la page "POST.php" ou je veux appeler ma classe Tracker
$std->boink_it($class->base_url."&act=ST&f={$class->forum['id']}&t={$this->topic['tid']}" );
 
Donc en mettant $Is_sub a 1, il doit eviter les redirection dans la classe Tracker et prendre celle dans la class Post..
mais la redirection ne se fait plus (par l intermédiaire de boink_it) si je mets ... require tracker.php
 
La Méthode boink_it

function boink_it($url)
 {
  global $ibforums;
 
  if ($ibforums->vars['header_redirect'] == 'refresh')
  {
   @header("Refresh: 0;url=".$url);
  }
  else
  {
   @header("Location: ".$url);
  }
   
  exit();
 }


 
 
Je ne sais pas si je suis très clair... mais bon.. si tu peux me filer un coup de main.. j'apprécirais.


Message édité par zetoune le 27-09-2002 à 19:51:02
Reply

Marsh Posté le 27-09-2002 à 19:55:52    

j'ai pris le source et j'ai déjà jeté un (petit) oeil.
dès que je vois qqch je te fais signe pcq là j'ai pas encore eu le temps de tout saisir :D


---------------
...oups kernel error...
Reply

Marsh Posté le 27-09-2002 à 20:01:21    

ben ok.. j'attends que tu es regardé plus précisément

Reply

Marsh Posté le 27-09-2002 à 20:46:37    

"Alors mon but, c'est d'ajouter un checkbox , regarder si le checkbox a été sélectionné, puis ensuite lancer la méthode de la classe qui est nécessaire.. "
 
Ou veux tu en venir exactement ?
"être prévenu en cas de réponse" sur la page de list des posts ne te convient pas, tu le veux sur quelle page ?
 
(en tout cas, ça risqe d'être dur et prendre du temps, y a rien de plus compliqué que de se plonger dans les sources d'un autre...)


---------------
...oups kernel error...
Reply

Marsh Posté le 27-09-2002 à 20:56:16    

ouais c'est ca..
je veux le rajouter sur les pages  qui ont a trait aux posts (edit,ajout,reponse)
comme le forum d'hardware en fait.

Reply

Marsh Posté le 27-09-2002 à 21:13:52    

je pourrais rajouter deux trois lignes de codes sauvages.
Genre
if ($moncheckestcoche=='YES';)
{
  if (si tu n es deja inscrit au forum';)
     inscrire_to_db
}
 
mais je voudrais faire quelque chose de plus propre que ca..
 

Reply

Marsh Posté le 27-09-2002 à 21:13:52   

Reply

Marsh Posté le 28-09-2002 à 04:08:29    

désolé, c'est pas possible d'après ce que j'ai vu :(
 
pour activer le tracker, il faut que l'url comporte "...&act=Track&..." hors une page de redirection est affichée à la fin.
Pour poster, il faut que "act=Post", et elle est redirrigée aussi.
 
Tu ne saurais pas à la fois enregistrer le message et activer la notification dans une seule page (pas 2 redirection en 1 fois).
 
 
2 solution

  • tu pourrais insérer :
Code :
  1. $db_string = $DB->compile_db_insert_string( array (
  2.  'member_id'   => $ibforums->member['id'],
  3.          'topic_id'    => $this->topic['tid'],
  4.  'start_date'  => time(),
  5.  )       );
  6. $DB->query("INSERT INTO ibf_tracker (" .$db_string['FIELD_NAMES']. " ) VALUES (". $db_string['FIELD_VALUES'] ." )" );


dans le fichier /source/post.php
La récupération des arguments passés par le post se fait normalement par  
$ibforums->input['nom_argument'];
 
mais bon c'est plus du brol qu'autre chose  :cry:  
 

  • tu modifies le constructeur de Tracker
Code :
  1. $idx = new tracker;
  2. class tracker {
  3.     var $output    = "";
  4.     var $base_url  = "";
  5.     var $html      = "";
  6.     var $forum     = array();
  7.     var $topic     = array();
  8.     var $category  = array();
  9.    
  10.     function tracker($is_sub=0, $redir=1) {
  11. ....
  12. ....
  13. if ($is_sub != 1 && $redir==1)
  14. {
  15. $print->redirect_screen( $ibforums->lang['sub_added'], "act=ST&f={$this->topic['fid']}&t={$this->topic['tid']}&st={$ibforums->input['st']}" );
  16. }
  17. else
  18. {
  19. return;
  20. }


 
dans la page post.php
tu ajoutes avant la redirection un test de la variable postée  

Code :
  1. if ($ibforum->input['notify']==1) // (par ex)
  2. {
  3.      $tracker= new Tracker(0,0);
  4. }


Message édité par ethernal le 28-09-2002 à 04:09:46

---------------
...oups kernel error...
Reply

Marsh Posté le 28-09-2002 à 04:30:27    

ouais ben en fait.. je viens juste de terminer ma solution et ca marche..(et tu as repondu juste apres que j ai fini:P) mais c'est la meme chose que toi (deuxieme version)..
sauf qu'en fait.. j ai remarqué que act=Track que lorsqu on clique sur Suivre ce sujet..
Donc j ai rajouté dans tracker.php les lignes suivants.

if ($act=="Track" )
{
 $idx = new tracker;
}
else
{
 $idx = new tracker(1);
}


 
 
et dans la class Post j ai rajouté une methode notify_answer qui appelle la class Tracker


function notify_answer($topic_id=-1,$member_group)
 {
  global $ibforums, $std ;
   
  if (($ibforums->input['enablenotification']==1)&&($std->is_number($topic_id)))
  {
   if ($topic_id>=1)
   {
    $ibforums->input['f']=$member_group;
    $ibforums->input['t']=$topic_id;
    require $root_path."sources/misc/tracker.php";
   }
  }
 }


 
 
 
Voila. Merci pour ton aide... C'est cool..
 

Reply

Marsh Posté le 28-09-2002 à 04:41:19    

c'est une très bonne solution aussi :)
 
franchement pour qq qui y connait rien en php, tu te  débrouilles vraiment très bien, et c'est rare  :jap:  
en général, ces sujets sont les pires à répondre, pcq la personne y connait que dalle et qu'elle te lache plus (c presque du harcelement...) tant que tu lui as pas filé qq chose qui tourne et qu'elle sait implémenter (c'est pour cela que personne se lance :lol: ).
 
je suis étonné en bien pour une fois ;)
Amuses toi bien et bonne continuation :)
 :hello:


Message édité par ethernal le 28-09-2002 à 04:41:44

---------------
...oups kernel error...
Reply

Marsh Posté le 28-09-2002 à 04:46:53    

Merci du compliment..
J ai commencé le php depuis la semaine derniere...
Mais je programme en ASP, meme si c'est très différent , ca aide quand même a comprendre..et j'ai fait un peu de C et de .Net
 
C'est pour ca que je voulais l'Avis que quelqu un qui connaissait bien sur php car je voulais faire quelque chose de propre en utilisant les outils deja programmés..
 

Reply

Marsh Posté le 02-10-2002 à 02:33:40    

Je ne sais si tu viens regarder encore ce topic, mais  
J'aurais une question encore..
Dans le code du forum.
y a un truc comme :
 
return <<<EOF
 
Comment je dois interpréter cette ligne ???
 

Reply

Marsh Posté le 02-10-2002 à 14:23:25    

dans quel fichier ?


---------------
...oups kernel error...
Reply

Marsh Posté le 02-10-2002 à 14:58:32    

ben a peu près dans pas mal tous les fichiers skin_*.php
 
Exemple dans skin_post.php dans /skin/s1/skin_post.php
 
les fonctions sont toutes du genre
 
function NomFonction($param)
{
     global $ibforums;
     return <<<EOF
     <!--Code HTML-->
     EOF;
}
 
Un - je ne comprends pas comment ca fait pour fonctionner alors qu'il y a du code HTML dans une fonction .
Deux - Je suppose que le return <<<EOF doit informer au server que le texte qui suit ne doit pas etre du php ?
 
Parceque j'ai fait une fonction en plus et j ai du mettre return <<<EOF pour qu elle fonctionne. SInon ca plantait. Dans ma tête le EOF c est juste pour le curseur sur un enregistrement non ?

Reply

Marsh Posté le 02-10-2002 à 15:21:57    

désolé je ne connais pas cette notation.
et mes recherches ont été infructueuses :(
 
donc je suppose que cela correspond à un  

Code :
  1. return "texte et $variables_php";


sans avoir à se soucier des ' et " à escaper (entre autre avec le js)....
 
Si tu trouves d'autres renseignements là dessus, fais en moi part stp :)


---------------
...oups kernel error...
Reply

Marsh Posté le 02-10-2002 à 15:26:07    

ha quoique :
http://www.php.net/manual/en/function.echo.php

Citation :

echo <<<END
This uses the "here document" syntax to output
multiple lines with $variable interpolation. Note
that the here document terminator must appear on a
line with just a semicolon no extra whitespace!
END;


 
donc le principe dois être le même avec EOF et return.
 
je me demande même si le tag EOF ou END n'est pas simplement choisi par le programmeur.  La règle serait de mettre  
return <<<TAG
mon texte sur plusieurs lignes avec des variables
TAG;


Message édité par ethernal le 02-10-2002 à 15:30:29

---------------
...oups kernel error...
Reply

Marsh Posté le 02-10-2002 à 15:29:37    

ben moi j ai trouvé des trucs mais c'était en perl..
 
donc nous sommes du meme avis, c'est ce que je me disais...
ouais si je trouve je te dis..
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed