Vous n'êtes pas identifié(e).
quelqu'un peut-il m'aider?
je suis en train de créer en local un nouveau squelette
j'ai regroupé sur une même page tous les messages laissés sur les différents articles, ne voulant pas que les messages apparaissent sur leurs articles respectives.
j'ai nommé cette page "Wall", en bref le principe est de faire un commentaire via un article, qui sera édité sur le mur. Sur ce mur ou "Wall", qui est en réalité une brève (=1), on peut également faire un commentaire libre, càd issu de cette brève.
Lorsqu'on valide définitivement le message on retourne sur l'article auquel il est associé, lorsque ce message est posté soit à partir de l'article en question, soit à partir du "Wall" en répondant à un message précédent, celui-ci ayant été alors posté à partir d'un article.
j'ai vu que forum.php mémorise l'URL de retour pour y revenir après, seulement je ne sais pas encore lire et modifier les scripts php.
l'action à entreprendre avec la validation du message est une redirection, ou retour, vers la page "Wall" ou brève, et non aux articles commentés!
voici les lignes de codes à modifier sur ..formulaire/forum.php, du moins je suppose:
// au premier appel (pas de Post-var nommee "retour_forum")
// memoriser eventuellement l'URL de retour pour y revenir apres
// envoi du message ; aux appels suivants, reconduire la valeur.
// Initialiser aussi l'auteur
if ($retour_forum = rawurldecode(_request('retour')))
$retour_forum = str_replace('&var_mode=recalcul','',$retour_forum);
else {
// par defaut, on veut prendre url_forum(), mais elle ne sera connue
// qu'en sortie, on inscrit donc une valeur absurde ("!")
$retour_forum = "!";
// sauf si on a passe un parametre en argument (exemple : {#SELF})
if ($url_param_retour)
$retour_forum = str_replace('&', '&', $url_param_retour);
$retour_forum = rawurlencode($retour_forum);
}
if (_request('retour_forum')){
$arg = forum_fichier_tmp(join('', $ids));
$securiser_action = charger_fonction('securiser_action', 'inc');
// on sait que cette fonction est dans le fichier associe
$hash = calculer_action_auteur("ajout_forum-$arg");
}
merci
Hors ligne
salut,
en gros il te faut utiliser la fonction header, pour ce qui est de la page précédent je sais pas, je pense que poser la question sur un forum spip serais plus indiqué
Pour le reste je sais pas trop ta question est plutot flou
@+
Il en faut peu pour être heureux pompompompompompompompompompompom
Hors ligne
j'ai posé la question sur forum spip, mais pas de réponse encore..
pour le header, on m'a dit cela sur un autre forum, mais j'ai pas compris les instructions à suivre.. n'entendant pas 99% du langage php/javascript
je connais <head></head> mais le header??... c'est la loose quoi.
bn pour éclaircir ma question:
l'url de ma page retour espérée est (en local): http://127.0.0.1/BOS2.0.2/spip.php?breve1
- cette brève étant en html, renvoie ainsi
au fichier forum.html à la racine du squelette, où se trouvent les diverses boucles qui interviennent dans la page.
- cette page forum.html utilise un formulaire càd #FORMULAIRE_FORUM, dans un dossier "formulaire" dans mon squel, lui même nommé aussi forum.html
la validation du message, donc le retour à rediriger, se fait après et dans la prévisualisation ainsi:
Si on valide la previsu, on n'envoie pas en ajax car, si le post reussit
il faudra certainement redessiner toute la page pour afficher le nouveau
forum
][<form action="#ENV{action}#formulaire_forum" method="post" class="noajax">
<div>
[(#ACTION_FORMULAIRE{#ENV{action}})]
<input type='hidden' name='titre' value="#ENV{titre}" />
<input type='hidden' name='texte' value="#ENV{texte}" />
<input type='hidden' name='url_site' value="#ENV{url_site}" />
<input type='hidden' name='nom_site' value="#ENV{nom_site}" />
[<input type="hidden" name="id_forum" value="(#ENV*{id_forum})" />]
[(#INCLURE{fond=formulaires/inc-forum_ajouter_mot}{ajouter_mot})]
(#ENV*{erreurs}|table_valeur{previsu})
</div>
</form>]
<form action="#ENV{action}#formulaire_forum" method="post" enctype='multipart/form-data'><div>
[(#ACTION_FORMULAIRE{#ENV{action}})]
[<input type="hidden" name="id_forum" value="(#ENV*{id_forum})" />]
[<fieldset>
<legend><:bouton_radio_modere_priori:></legend>
<p class="explication">(#ENV{modere})<:forum_info_modere:></p>
</fieldset>]
[(#ENV**{afficher_texte}|choixsiegal{'non', ' ',''})
[<input type="hidden" name="titre" value="(#ENV{titre})" />]
<p class="spip_bouton"><input type="submit" class="submit" value="<:forum_valider:>" /></p>]
[(#ENV**{afficher_texte}|choixsiegal{'non', '',' '})
<fieldset>
bon là dedans ya aussi l'option modération... bref
ensuite j'ai le forum.php
// id_rubrique est parfois passee pour les articles, on n'en veut pas
$ids = array();
if ($id_rubrique > 0 AND ($id_article OR $id_breve OR $id_syndic))
$id_rubrique = 0;
foreach (array('id_article', 'id_breve', 'id_forum', 'id_rubrique', 'id_syndic') as $o) {
$ids[$o] = ($x = intval($$o)) ? $x : '';
}
// ne pas mettre '', sinon le squelette n'affichera rien.
$previsu = ' ';
// au premier appel (pas de Post-var nommee "retour_forum")
// memoriser eventuellement l'URL de retour pour y revenir apres
// envoi du message ; aux appels suivants, reconduire la valeur.
// Initialiser aussi l'auteur
if ($retour_forum = rawurldecode(_request('retour')))
$retour_forum = str_replace('&var_mode=recalcul','',$retour_forum);
else {
// par defaut, on veut prendre url_forum(), mais elle ne sera connue
// qu'en sortie, on inscrit donc une valeur absurde ("!")
$retour_forum = "!";
// sauf si on a passe un parametre en argument (exemple : {#SELF})
if ($url_param_retour)
$retour_forum = str_replace('&', '&', $url_param_retour);
$retour_forum = rawurlencode($retour_forum);
}
if (_request('retour_forum')){
$arg = forum_fichier_tmp(join('', $ids));
$securiser_action = charger_fonction('securiser_action', 'inc');
// on sait que cette fonction est dans le fichier associe
$hash = calculer_action_auteur("ajout_forum-$arg");
}
// pour les hidden
$script_hidden = "";
foreach ($ids as $id => $v)
$script_hidden .= "<input type='hidden' name='$id' value='$v' />";
$script_hidden .= "<input type='hidden' name='arg' value='$arg' />";
$script_hidden .= "<input type='hidden' name='hash' value='$hash' />";
$script_hidden .= "<input type='hidden' name='verif_$hash' value='ok' />";
$script_hidden .= "<input type='hidden' name='afficher_texte' value='$afficher_texte' />";
$script_hidden .= "<input type='hidden' name='retour_forum' value='$retour_forum' />";
// l'ajout de documents est-il autorise ?
// cf. verifier.php
if ($formats = forum_documents_acceptes()) {
include_spip('inc/securiser_action');
$cle_ajouter_document = calculer_cle_action('ajouter-document-'.join('-',array_map('intval',$ids)));
}
return array(
'modere' => (($type != 'pri') ? '' : ' '),
'nom_site' => '',
'table' => $table,
'texte' => '',
'config' => array('afficher_barre' => ($GLOBALS['meta']['forums_afficher_barre']!='non'?' ':'')),
'titre' => str_replace('~', ' ', extraire_multi($titre)),
'action' => $script, # ce sur quoi on fait le action='...'
'_hidden' => $script_hidden, # pour les variables hidden
'url_site' => "http://",
'cle_ajouter_document' => $cle_ajouter_document,
'formats_documents_forum' => $formats,
'ajouter_document' => $_FILES['ajouter_document']['name'],
'nobot' => _request('nobot'),
'ajouter_groupe' => $ajouter_groupe,
'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)),
'id_forum' => $id_forum, // passer id_forum au formulaire pour lui permettre d'afficher a quoi l'internaute repond
'_sign'=>implode('_',$ids)
);
}
// Une securite qui nous protege contre :
// - les doubles validations de forums (derapages humains ou des brouteurs)
// - les abus visant a mettre des forums malgre nous sur un article (??)
// On installe un fichier temporaire dans _DIR_TMP (et pas _DIR_CACHE
// afin de ne pas bugguer quand on vide le cache)
// Le lock est leve au moment de l'insertion en base (inc-messforum)
// Ce systeme n'est pas fonctionnel pour les forums sans previsu (notamment
// si $afficher_texte = 'non')
// [url]http://doc.spip.org/@forum_fichier_tmp[/url]
function forum_fichier_tmp($arg)
{
# astuce : mt_rand pour autoriser les hits simultanes
while (($alea = time() + @mt_rand()) + intval($arg)
AND @file_exists($f = _DIR_TMP."forum_$alea.lck"))
{};
spip_touch ($f);
# et maintenant on purge les locks de forums ouverts depuis > 4 h
if ($dh = @opendir(_DIR_TMP))
while (($file = @readdir($dh)) !== false)
if (preg_match('/^forum_([0-9]+)\.lck$/', $file)
AND (time()-@filemtime(_DIR_TMP.$file) > 4*3600))
spip_unlink(_DIR_TMP.$file);
return $alea;
}
function formulaires_forum_verifier_dist(
$titre, $table, $type, $script,
$id_rubrique, $id_forum, $id_article, $id_breve, $id_syndic,
$ajouter_mot, $ajouter_groupe, $afficher_texte, $url_param_retour)
{
include_spip('inc/acces');
include_spip('inc/texte');
include_spip('inc/forum');
include_spip('inc/session');
include_spip('base/abstract_sql');
$erreurs = array();
// desactiver id_rubrique si un id_article ou autre existe dans le contexte
if ($id_article OR $id_breve OR $id_forum OR $id_syndic)
$id_rubrique = 0;
// stocker un eventuel document dans un espace temporaire
// portant la cle du formulaire ; et ses metadonnees avec
if (!isset($GLOBALS['visiteur_session']['tmp_forum_document']))
session_set('tmp_forum_document',
sous_repertoire(_DIR_TMP,'documents_forum').md5(uniqid(rand())));
$tmp = $GLOBALS['visiteur_session']['tmp_forum_document'];
$doc = &$_FILES['ajouter_document'];
if (isset($_FILES['ajouter_document'])
AND $_FILES['ajouter_document']['tmp_name']) {
// securite :
// verifier si on possede la cle (ie on est autorise a poster)
// (sinon tant pis) ; cf. charger.php pour la definition de la cle
if (_request('cle_ajouter_document') != calculer_cle_action($a = "ajouter-document-$id_article-$id_breve-$id_forum-$id_rubrique-$id_syndic")) {
$erreurs['document_forum'] = _T('public:documents_interdits_forum')
. "ajouter-document-$id_article-$id_breve-$id_forum-$id_rubrique-$id_syndic"
.", "
._request('cle_ajouter_document')
;
unset($_FILES['ajouter_document']);
} else {
include_spip('inc/ajouter_documents');
list($extension,$doc['name']) = fixer_extension_document($doc);
$acceptes = forum_documents_acceptes();
if (!in_array($extension, $acceptes)) {
# normalement on n'arrive pas ici : pas d'upload si aucun format
if (!$formats = join(', ',$acceptes))
$formats = '-'; //_L('aucun');
$erreurs['document_forum'] = _T('public:formats_acceptes', array('formats' => $formats));
}
else {
include_spip('inc/getdocument');
if (!deplacer_fichier_upload($doc['tmp_name'], $tmp.'.bin'))
$erreurs['document_forum'] = _T('copie_document_impossible');
# else if (...)
# verifier le type_document autorise
# retailler eventuellement les photos
}
// si ok on stocke les meta donnees, sinon on efface
if (isset($erreurs['document_forum'])) {
spip_unlink($tmp.'.bin');
unset ($_FILES['ajouter_document']);
} else {
$doc['tmp_name'] = $tmp.'.bin';
ecrire_fichier($tmp.'.txt', serialize($doc));
}
}
}
// restaurer le document uploade au tour precedent
else if (file_exists($tmp.'.bin')) {
if (_request('supprimer_document_ajoute')) {
spip_unlink($tmp.'.bin');
spip_unlink($tmp.'.txt');
} else if (lire_fichier($tmp.'.txt', $meta))
$doc = @unserialize($meta);
}
if (strlen($texte = _request('texte')) < 10
AND !$ajouter_mot AND $GLOBALS['meta']['forums_texte'] == 'oui')
$erreurs['texte'] = _T('forum_attention_dix_caracteres');
else if (defined('_FORUM_LONGUEUR_MAXI')
AND _FORUM_LONGUEUR_MAXI > 0
AND strlen($texte) > _FORUM_LONGUEUR_MAXI)
$erreurs['texte'] = _T('forum_attention_trop_caracteres',
array(
'compte' => strlen($texte),
'max' => _FORUM_LONGUEUR_MAXI
));
if (strlen($titre=_request('titre')) < 3
AND $GLOBALS['meta']['forums_titre'] == 'oui')
$erreurs['titre'] = _T('forum_attention_trois_caracteres');
if (!count($erreurs) AND !_request('confirmer_previsu_forum')){
if ($afficher_texte != 'non') {
$previsu = inclure_previsu($texte, $titre, _request('url_site'), _request('nom_site'), _request('ajouter_mot'), $doc);
$erreurs['previsu'] = $previsu;
}
}
return $erreurs;
}
function forum_documents_acceptes()
{
$formats = trim($GLOBALS['meta']['formats_documents_forum']);
if (!$formats) return array();
if ($formats !== '*')
$formats = array_filter(preg_split(',[^a-zA-Z0-9/+_],', $formats));
else {
include_spip('base/typedoc');
$formats = array_keys($GLOBALS['tables_mime']);
}
sort($formats);
return $formats;
}
// [url]http://doc.spip.org/@inclure_previsu[/url]
function inclure_previsu($texte,$titre, $url_site, $nom_site, $ajouter_mot, $doc)
{
$bouton = _T('forum_message_definitif');
include_spip('public/assembler');
// supprimer les <form> de la previsualisation
// (sinon on ne peut pas faire <cadre>...</cadre> dans les forums)
return preg_replace("@<(/?)form\b@ism",
'<\1div',
inclure_balise_dynamique(array('formulaires/inc-forum_previsu',
0,
array(
'titre' => safehtml(typo($titre)),
'texte' => safehtml(propre($texte)),
'url_site' => vider_url($url_site),
'nom_site' => safehtml(typo($nom_site)),
'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)),
'ajouter_document' => $doc,
'erreur' => $erreur,
'bouton' => $bouton
)
),
false));
}
function formulaires_forum_traiter_dist() {
$forum_insert = charger_fonction('forum_insert', 'inc');
list($redirect,$id_forum) = $forum_insert();
return array('redirect'=>$redirect,'id_forum'=>$id_forum);
}
?>
bon j'ai coupé les lignes vides, ce message étant déjà pas mal long.
toujours pas clair?? heu.. bah je voudrais juste que mes validations reviennent sur une seule et même page..
c'est possible pour quelqu'un qui pige rien au php, et qui n'a pas le temps en ce moment d'ouvrir le pavé "php&mysql pour les nuls" , qui m'attends là sur mon bureau?
méga loose...
Dernière modification par seds (08-04-2010 19:56:26)
Hors ligne
pour la redirection basique, tu peux opter, à la fin de ta validation, pour un petit bout tel que
MERCI de lire le mode d'emploi avant de poster !!
Hors ligne
merci alnoss, mais ça marche pas
j'ai collé ta ligne dans forum.php, et quand on clique sur "envoyer un message", que ce soit d'un article du site, ou du mur (mon url de retour), on revient sur l'url retour, on tourne en rond sans passer par le formulaire où l'on passe le message.
j'ai essayé ça aussi
header("location:mon_url")
mais je tourne en rond
on m'a dit par ailleurs de mettre
<input type="hidden" name="addr" value="<?php echo htmlspecialchars($contentURL); ?>"/>
mais je n'ai pas trouvé où je devais le mettre.
qu'en penses-tu?
une chose est sure c'est que je ne fais pas les bonnes manipulations
Dernière modification par seds (10-04-2010 08:45:29)
Hors ligne
c'est déprimant
soit je tourne en rond, soit j'ai ça:
Parse error: syntax error, unexpected T_STRING in....
je me goure qlqpart, quand je touche à forum.php c'est la cata, quand je touche à forum.html rien ne se passe
les totals-néophytes comme moi ne peuvent pas faire une toute petite, mais vraiment toute petite modif sur une action qui parait simple aux experts, mêmes aux débutants, sans se prendre devoir apprendre par coeur le tuto php ????
(je rappelle que sur mon bureau j'ai "php&mysql pour les nuls" mais faut que je finissent "flash8" qui me dit de lire avant un "actionscript".. bon je bidouille plutôt bien le html, expert en css -fastoche lol-, et commence à bien me la péter sur les bouches spip, mais là, pour ce retour sur une pauvre page, c'est vraiment la dérouillée!)
Dernière modification par seds (10-04-2010 11:30:05)
Hors ligne
Je souhaiterais faire la même chose autant que toi. J'ai participé à plusieurs forums, mais je n'arrive pas à trouver une réponse favorable jusqu'à nos jours. Je viens d'envoyer à un ami un fax par email sur ce. Il m'a promis de trouver au plus vite une réponse qui résout mon problème.
Hors ligne
Saluton,
Pourquoi nous re-sortir ce vieux post de 2010 ?
Sur ce comparatif : http://socialcompare.com/fr/comparison/ … ent-system, je compte une soixantaine de CMS écrit en PHP.
Et, j'imagine, qu'il n'y a pas une once de standardisation entre eux.
J'en conclus que celui qui choisit ce genre de produit doit en assumer les conséquences.
Le temps qu'il croyait gagner avec du prêt-à-porter il va devoir l'investir pour "customiser" le bouzin.
Je hais les CMS, ces usines à gaz, ces canons pour écraser des mouches.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Bonjour,
Il me semble que votre demande relève d'un développement spécifique plutôt qu'une modification de code "anodine", éventuellement de type "truc" ou "astuce".
Cette "huile de coude" qui risque de vous coûter une somme non négligeable, va de plus, devoir être maintenue à chaque mise à jour officielle de votre spip.
Je vous suggère donc d'y réfléchir avant de continuer à y investir dedans.
Bonne continuation
Jc.
Dernière modification par Jc (06-08-2014 02:22:29)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne