Oui, j'ai tester, cela fonctionne bien
Par contre maintenant, dans le code actuel, quand on clique un première fois sur click-suite, on ferme la div extrait, mais on affiche rien dans la div suite
Si on clique encore, on ré ouvre les deux en même temps Oo
Mais le code fonctionne, on récupère bien les news correspondant à l'id dont on a cliquer sur click-suite
Voici le code actuel
news.php
<div class="infoMaj">
<?php
$news = array();
$query=$cnx->prepare('SELECT COUNT(news_id) AS Nbnews FROM t_news');
$query->execute();
$data0=$query->fetch();
//pour le pagination
$totalDesMessages = $data0['Nbnews'];
$nombreDeMessagesParPage = 10;
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
//Nombre de pages
$page = (isset($_GET['page']))?intval($_GET['page']):1;
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
// fin pagination
$query=$cnx->prepare('SELECT
news_id,
news_title,
news_content,
news_date,
news_icon
FROM t_news
ORDER BY news_id DESC
LIMIT :premier, :nombre');
$query->bindValue(':premier',(int) $premierMessageAafficher,PDO::PARAM_INT);
$query->bindValue(':nombre',(int) $nombreDeMessagesParPage,PDO::PARAM_INT);
$query->execute();
if ($query->rowCount()<1)
{
$news = 'Aucune nouvelle actuelement!';
}
else
{
while ($data=$query->fetch(PDO::FETCH_OBJ)){
$news_content = parseZCode($data->news_content);
$extrait = parseZCode(substr($data->news_content, 0,96));
// Trouver le dernier espace juste apres le dernier mot de $extrait
$espace = strrpos($extrait,' ');
?>
<div class="bloc">
<div class="infos-news">
<img class="title-news" src="<?php echo $data->news_icon; ?>" alt=""/>
<span class="title-news"><?php echo parseZCode($data->news_title); ?></span>
<small><?php echo changedateusfr($data->news_date); ?></small>
</div>
<div class="infos-news">
<?php
if (substr_count($news_content, '<br />') >= 2) {
?>
<div class="extrait"><?php echo $extrait; ?> ...</div>
<div class="click_suite" data-id = "<?php echo $data->news_id?>">lire la suite</div>
<div class="suite"></div>
<?php
}
if (substr_count($news_content, '<br />') <= 2) {
?>
<div><p><?php echo $news_content; ?></p></div>
<?php
}
?>
</div>
</div>
<?php
}
$query->CloseCursor();
}
echo get_list_page($page, $nombreDePages, 'accueil');
?>
</div>
effet.js
[javascript]
$(".click_suite").on("click",function () {
var id = $(this).attr("data-id");
var suite = $(this).next(".suite");
var that = $(this);
var showText='Lire la suite';
var hideText='Fermer';
var showColor='#0000ff';
var hideColor='#ff0000';
$.ajax({
dataType: "html",
type: "POST",
url: "./includes/newsz.php",// page php dans laquelle tu renvoies le contenu de la new avec un echo en fonction de la variable post "id_post" envoyée ci-dessous
data: 'id_post='+id,
success: function(result)//retour de requête
{
//// on utilise result qui est le retour de la requête pour ensuite alimenter un div (ou autre traitement)
suite.html(result);
suite.toggle("slow",function(){
$(this).css("display") == "block" ? that.text(hideText).css('color',hideColor) : that.text(showText).css('color',showColor);
});
that.prev(".extrait").toggle("fast");
}
});
})
[/javascript]
newsz.php
<?php
header('Content-type: text/html; charset=UTF-8');
include ('../conf/contants.php');
include ('../conf/conf.php');
include ('../inc/function.php');
include ('../inc/function_sql.php');
include ('../inc/mcode.php');
include ('../inc/ariane.php');
// récupération du post 'id_post' envoyé par la requête ajax (intval pour sécuriser et caster en entier)
$id = isset($_POST['id_post'])? intval($_POST['id_post']) : null;
//...
$query=$cnx->prepare('SELECT
news_content
FROM t_news
WHERE news_id = :id');
$query->bindValue(':id',(int) $id,PDO::PARAM_INT);
$query->execute();
$data=$query->fetch(PDO::FETCH_OBJ);
echo parseZCode($data->news_content);
// et tu affiche le résultat de la requête avec un echo (comme si tu voulais afficher le texte)
?>
au passage, on peux pas faire un header au lieu de faire des includes pour récupérer les pages de confs, et si oui, comment tu le ferait?
Code : Tout sélectionner
include ('../conf/contants.php');
include ('../conf/conf.php');
include ('../inc/function.php');
include ('../inc/function_sql.php');
include ('../inc/mcode.php');
include ('../inc/ariane.php');
Merci beaucoup
Cordialement
Ps: (Edit):
J'ai trouvé le soucis
En plus j'ai enlever l'extrait, et j'ai simplement mit en condition, que si il y'a plus de 2 lignes on met un lien qui dit "Lire la news" sinon on affiche directement la news.
Et ensuite avec ton code Js j'ai simplement initialiser la div.suite à hide et tout fonctionne super bien.
Je te met les codes au cas où tu discerne une erreur ou que tu sait qu'on peux optimiser ceci, mais sinon je pense que le sujet est résolut, je comprend mieux l'ajax maintenant, et ça je t'en remercie.
Le code complet (toutes les pages)
le script Js
[javascript] $(".click_suite").on("click",function () {
var id = $(this).attr("data-id");
var suite = $(this).next(".suite");
var that = $(this);
$.ajax({
dataType: "html",
type: "POST",
url: "./includes/newsz.php",// page php dans laquelle tu renvoies le contenu de la new avec un echo en fonction de la variable post "id_post" envoyée ci-dessous
data: 'id_post='+id,
success: function(result)//retour de requête
{
// on utilise result qui est le retour de la requête pour ensuite alimenter un div (ou autre traitement)
suite.html(result);
suite.toggle("slow",function(){
$(this).css("display") == "block" ? that.text(hideText).css('color',hideColor) : that.text(showText).css('color',showColor);
});
// that.prev(".extrait").toggle("fast");
}
});
})
})[/javascript]
news.php
?>
<div class="bloc">
<div class="infos-news">
<img class="title-news" src="<?php echo $data->news_icon; ?>" alt=""/>
<span class="title-news"><?php echo parseZCode($data->news_title); ?></span>
<small><?php echo changedateusfr($data->news_date); ?></small>
</div>
<?php
if (substr_count($news_content, '<br />') >= 2) {
?>
<div class="click_suite" data-id = "<?php echo $data->news_id; ?>">Lire la news</div>
<div class="suite"></div>
<?php
}
if (substr_count($news_content, '<br />') <= 2) {
?>
<div><p><?php echo $news_content; ?></p></div>
<?php
}
?>
</div>
<?php
}
newsz.php (la page de destination) (si tu peux me répondre par rapport au header pour les includes demandé plus haut stp?)
<?php
header('Content-type: text/html; charset=UTF-8');
include ('../conf/contants.php');
include ('../conf/conf.php');
include ('../inc/function.php');
include ('../inc/function_sql.php');
include ('../inc/mcode.php');
include ('../inc/ariane.php');
// récupération du post 'id_post' envoyé par la requête ajax (intval pour sécuriser et caster en entier)
$id = isset($_POST['id_post'])? intval($_POST['id_post']) : null;
//...
$query=$cnx->prepare('SELECT
news_content
FROM t_news
WHERE news_id = :id');
$query->bindValue(':id',(int) $id,PDO::PARAM_INT);
$query->execute();
$data=$query->fetch(PDO::FETCH_OBJ);
echo parseZCode($data->news_content);
// et tu affiche le résultat de la requête avec un echo (comme si tu voulais afficher le texte)
?>
Merci beaucoup
Cordialement