Concernant l'édition à la volée en AJAX

24 réponses - 7727 vues
Bonjour, J'aimerai savoir si il y avait moyen d'adapter ceci pour phpBB mais uniquement pour les admin (et/ou modérateur)
Il me semble avoir compris le principe mais n'en suis pas totalement sur donc il faudrait modifier :
**Code **
``makeEditable('desc');``
Pour pouvoir mettre l'édition en place sur le champs voulu, jusqu'à la je pense que je peux y arriver après c'est pour le rendre uniquement valable pour les admin et modérateur et pourquoi pas pour le membre ayant poster le message.
Il faudrai alors indique dans le code de viewtopic l'id du textarea ?
J'aimerai bien qu'on éclaire un peu ^^
Merci par avancer,
Cordialement Oyo.
Salut Oyo ! En fait il faudrai déjà que tous les posts aient des id uniques (c'est pas le plus dur, ok). Et ensuite oui il te faudra lister tous les éléments que tu as envie de rendre éditable. Tu fais tout ça avec le makeEditable et hop.
A vrai dire je n'ai jamais testé ceci à grande échelle. C'est à dire sur une page qui présentée plusieurs champs éditable.
Mais si tu as des problèmes, je pourrai t'aider :)
C'est vrai que j'ai vu dans une version récente d'IPB qu'il l'avait mis en place pour faire une édition rapide des posts et c'est vraiment pratique !
Salut j0k3r_n0ir ! Pour l'id unique c'est déjà le cas avec:
**Code **
``{postrow.U_POST_ID}`` qui se trouve dans viewtopic_body.tpl et défini par
**Code **
``'U_POST_ID' => $postrow[$i]['post_id']`` dans viewtopic.php
là déjà on est fixé sur ce point pas trop dur, parcontre c'est la mise en place des "pseudo permission" qui me possera plus de pb je penses.
C'est claire que c'est plus pratique effectivement j'ai vu ça sur IPB ^^
Bon je vais tester ça :)
Ouep c'est l'id du post quoi. Le "p" qui est passé à viewtopic.php :)
Pour les permissions je pense que c'est le même système que pour afficher le bouton "éditer", ça parait logique lol
Oui en effet, parcontre dans makeEditable('desc'); il faudrait que je mette quoi pourque l'id doit être unique ? J'avais pensé a faire:
p_(+id du poste)
Par contre dans l'exemple donnée il n'y a pas de base de donnée ce n'est pas génant si ? car phpBB parse le message pour l'enregister.
Par rapport au permission c'est surtout comment le gerer par au ce poste car dans ton exemple tout le monde peu le faire ^^
bon aller je vais aller chopper la source du forum IPB sur le quel je suis admin pour voir ça :p
Bah c'est bon, puisque que dans tous les cas tu auras le numéro du post, donc l'id sera forcément unique. Oui tu peux utiliser une base de donnée puisque tu envoie tout ça à un fichier PHP :)
D'accord pour les permissions, mais il suffit que tu génère le code qui va bien au moment de l'affichage de la page.
Bouh c'est mal de copier ^^
lol mais je suis une kiche :) Bon faudrai que je teste ça au lieux de parler moi ^^ pas bien roo :p
**.: Edit :.**
Bon ça marche pas trop mal cependant comment faire pour réussir à déclarer:
p_X ou X reprénsenterai le numero du topic ? Créer p_X n'est pas dur mais c'est surtout comment savoir pour déclarer comme dit précédement dans la fonction:
makeEditable() ?
Voila ce que j'ai réalisé pour l'instant: Dans viewtopic_body.tpl
**Code **
``<p id="p_{postrow.U_POST_ID}">{postrow.MESSAGE}</p>``
Ensuite comme je n'ai pas encore trouver comment créé la valeur de makeEditable(p_X) j'ai déclarer simplement makeEditable(p_1) vu que je viens de faire une nouvelle installe (non sans mal humm XD)
Ensuite j'ai édité le code de edit.php que voici:
**Code **
``<?php
define('IN_PHPBB', true);
$phpbb_root_path = './../';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
include($phpbb_root_path . 'includes/bbcode.'.$phpEx);
include($phpbb_root_path . 'includes/functions_post.'.$phpEx);
// Start session management
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
// End session management
$orig_word = array();
$replacement_word = array();
obtain_word_list($orig_word, $replacement_word);
$id = (isset($_POST['id'])) ? $_POST['id'] : '';
$content = (isset($_POST['content'])) ? $_POST['content'] : '';
// Séparation p_X en X
$parms = '/p_(\d+)/i';
$rep = '$1';
$sids = preg_replace($parms, $rep, $id);
// Création des uid pour les bbcode
$uid = make_bbcode_uid();
// Verrification du html
$html_on = (!$board_config['allow_html']) ? $board_config['allow_html'] : $userdata['user_allowhtml'];
// Verrification des BBcode
$bbcode_on = (!$board_config['allow_bbcode']) ? $board_config['allow_bbcode'] : $userdata['user_allowbbcode'];
// Verrification des Smilies
$smilies_on = (!$board_config['allow_smilies']) ? $board_config['allow_smilies'] : $userdata['user_allowsmile'];
// Parse du message
$content = prepare_message($content, $html_on, $bbcode_on, $smilies_on, $uid);

// Update du poste avec les nouvelle donnée :)
$sql = 'UPDATE ' . POSTS_TEXT_TABLE . " SET bbcode_uid = '$uid', post_text = '".addslashes($content)."' WHERE post_id = '" . (int) intval($sids) . "' LIMIT 1";
if( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not update post', '', __LINE__, __FILE__, $sql);
}
else
{

// On selectionne le message éditer ^^
$sql = 'SELECT bbcode_uid, post_text FROM ' . POSTS_TEXT_TABLE . ' WHERE post_id = ' . (int) intval($sids);
if(!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not query post information', '', __LINE__, __FILE__, $sql);
}
$row = $db->sql_fetchrow($result);
$bb = $row['bbcode_uid'];
$message = $row['post_text'];
// BBcode
if ( $board_config['allow_bbcode'] )
{
if ( $bb != '' )
{
$message = ( $board_config['allow_bbcode'] ) ? bbencode_second_pass($message, $bb) : preg_replace('/\:[0-9a-z\:]+\]/si', ']', $message);
}
}
// Censurer
if (count($orig_word))
{
$message = str_replace('\"', '"', substr(@preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "@preg_replace(\$orig_word, \$replacement_word, '\\0')", '>' . $message . '<'), 1, -1));
}


// Smilies
if ( $board_config['allow_smilies'] )
{
$message = smilies_pass($message);
}
// Cliquer
$message = make_clickable($message);


// Saut de ligne
$message = str_replace("\n", "\n<br />\n", $message);
echo $message;
}
?>``
Jusqu'a là pas de problème ça fonctionne bien sauf que lorsqu'on édite une 1er fois ça fonctionne nickel:
Admettons que le poste contient:
**:**
> Voila un test avec Ajax !
Je l’édite et j’ajoute ceci :
**:**
> Voila un test avec Ajax !
C'est vraiment bien ce petit joue joue ^^
Une fois enregistrer il m’affiche bien ce que j'ai ajouter au dessus parcontre je souhaite le réediter ^^ par contre là j'obtient ceci:
**:**
> Voila un test avec Ajax ! <BR><BR>C'est vraiment bien ce petit joue joue ^^
:aie: en ce qui concernet les smilies et les bbcode c'est la même :s il affiche le code html :/
**Oyo** : > Bon ça marche pas trop mal cependant comment faire pour réussir à déclarer:
p_X ou X reprénsenterai le numero du topic ? Créer p_X n'est pas dur mais c'est surtout comment savoir pour déclarer comme dit précédement dans la fonction:
makeEditable() ?Le plus simple je pense que c'est de stocker tous les id de la page en cours dans un tableau. Ensuite tu boucle dessus pour faire les makeEditable.
Pour l'HTML, je te répondrai que c'est normal, puisque qu'il édite le contenu de la balise et donc du HTML. En fait il faudrai qu'au moment ou tu cliques pour éditer tu charge le message contenu dans la bdd comme ça t'aura tout le bbcode nikel sans HTML.
Pour ça il faut que tu modif la fonction JS edit pour qu'elle lance un requete AJAX qui va chercher le contenu du post.
Ca ne sera pas de l'edit in place en temps réel, il y aura un mini temps de chargement, pas très grave.
Parcontre là je ne suis pas assez fort pour faire le tableau :/ du moins je vais essayer de voir mais je ne pense pas être capable de le faire seul :) Oui j'ai bien vu que innerHTML récupere le contenue html j'ai chercher une fonction qui permet de récuper le texte mais j'avoue ne pas avoir trouver au du moins si mais dans le message à la place du texte j'ai le droit à un jolie "undefined" XD
Par contre pour la requête je ne sais pas faire non plus :) j'y connais rien en js et encore moins en ajax :'( (honte à moi)
Effectivement mais ça sera toujours plus rapide que de faire un edit normal :)

(24 résultats)


Catégories


Tags


Liens