PDA

View Full Version : ایجاد یک لیست اخبار



Mohammad S
شنبه 02 دی 1391, 01:46 صبح
سلام خدمت همگی دوستان عزیز
برای طراحی صفحه وب که لیستی از اطلاعیه ها و اخبار را نشان دهد، نیاز به راهنمایی دارم.
من ابتدا یک جدول حاوی عنوان خبر، متن خبر و یک ID ایجاد کردم و خبرها را در آن قرار می دهم. سپس با استفاده از تگ marquee و li عنوان خبرها را نشان می دهم. حال می خواهم کاربر وقتی روی یکی از عناوین کلیک کرد، متن خبر مورد نظر نشان داده شود. نمی خواهم او را به صفحه دیگری منتقل کنم بلکه می خواهم متن خبر را توسط alert (البته به فرم jQuery چون زیباتر است) به او نشان دهم.
اما نمی دانم چگونه می توان با کلیک بر روی یک لینک، متنی را از دیتابیس خوانده و به کاربر نشان داد.
البته مطمئن نیستم روش کارم درست باشد. لطفاً اگر راهکار بهتری هم می شناسید، ما را بی نصیب نفرمایید.
قابل ذکر است که من در فایل functions، لیست تمامی اخبار را واکشی می کنم و در همان صفحه اصلی که محل نمایش خبرها است، تگ marquee را تولید می کنم.

با تشکر از همه دوستان

Unique
شنبه 02 دی 1391, 02:00 صبح
دوست عیزیز باید از ajax استفاده کنید یا همون چند تا خبر را متنشون را توی یک div البته display:none بریزین و با همون jquery نمایش بدین !

Mohammad S
شنبه 02 دی 1391, 09:49 صبح
دوست عیزیز باید از ajax استفاده کنید یا همون چند تا خبر را متنشون را توی یک div البته display:none بریزین و با همون jquery نمایش بدین !

ممنونم. راستش تا حالا با Ajax کار نکردم.
میشه یه دستور ساده برای این کار برام بنویسید یا منبعی که سریع بتونم کارمو انجام بدم؟ یا این که از چه دستوری باید استفاده شود؟
این که متنشونو تو تگ div بگذارم امکان پذیر نیست چون تعداد خبرها متغیره و حتما باید از دیتابیس خونده بشه.

mahmod2000
شنبه 02 دی 1391, 10:23 صبح
در مورد ajax jquery تحقیق کنید.. در همین انجمن هم پست های زیادی پیدا میکنید در این مورد

Mohammad S
یک شنبه 03 دی 1391, 01:14 صبح
در مورد ajax jquery تحقیق کنید.. در همین انجمن هم پست های زیادی پیدا میکنید در این مورد
ممنونم
من به w3schools هم مراجعه کردم اما متاسفانه به نتیجه نرسیدم. در واقع منطق کارم را نمی دانم که چیست.
اجازه دهید من از اول توضیح دهم که چه چیزی دارم و چه چیزی نیاز دارم.

من یک فایل دارم که به عنوان sidebar است و تگ marquee را در آن تعریف کرده ام. درون این تگ از لیست با تگ a استفاده کرده ام. کد آن در زیر قرار داده ام:

$NewsResult = GetNews();
if ($NewsResult)
{
$recordCount = mysql_num_rows($NewsResult);
$marquee="<ul>";
for($i=0; $i < $recordCount; $i++ )
{
$marquee.= '<img src="images/Intro-News-Arrow.png" />&nbsp;';
$marquee.= '<li style="display: inline;"><a id="newsID" value="'.mysql_result($NewsResult,$i, 'NewsID').'" href="#" class="big-link" data-reveal-id="myModal" onclick="getNewsBody(this.value)">'.mysql_result($NewsResult,$i, 'NewsTitle').'</a></li><br />';

}
$marquee.="</ul>";
}

سپس نیاز دارم زمانی که کاربر بر روی عنوان یکی از اخبار کلیک کرد، کد خبر به دیتابیس ارسال شود و در پاسخ، عنوان و متن خبر بازگردد. برای این کار، از متد $.post از jquery ajax استفاده کردم و کدی را به شکل زیر در قسمت header سایت نوشته ام (البته مطمئن نیستم درست باشد!)


<script>
$(document).ready(function(){
$("#newsID").click(function(){
$.post("sidebar.php",{newsID:$("#newsID").val()},

alert("ok!!!");
);
});
});
</script>
قسمت alert هم برای تست گذاشته ام وگرنه نیازی نیست.

از طرفی در فایل siderbar.php در بالای فایل نوشته ام:


if (isset($_Post['newsID']))
{
$newsID = $_Post['newsID'];
$NewsResult=GetNewsBodyByID($newsID);
$NewsTitle=mysql_result($NewsResult,0, 'NewsTitle');
$NewsBody=mysql_result($NewsResult,0, 'NewsBody');
}
اما مثل اینکه enewsID اصلا از طریق Post ارسال نشده است!!

ضمنا برای نمایش مقادیر بازگشتی از jQery‌ استفاده کرده ام (خودم ننوشته ام) که یک تگ div مخفی است و در واقع با کلیک بر روی لینک، یک alert تغییر قیافه یافته توسط css اجرا می شود. درون این تگ div، باید دو مقدار $NewsTitle و $NewsBody قرار است نمایش داده شود.

حال اگه دوستان لطف کنن و بگن کجای کار من مشکل داره؟ اصلاً منطق کار من درسته یا نه؟

سوال دیگری دارم که مربوط به بخش تابع callback در دستور $.post است. در مثال فوق چگونه می توانم از این آپشن استفاده کنم؟ آیا اصلاً نیازی به آن دارم؟


با تشکر و عذرخواهی بابت طولانی شدن مطلب

siavashsay
یک شنبه 03 دی 1391, 11:08 صبح
دوست عزیز !
شما باید برای هر خبر که میخواید روش کلیک بشه و خبر کامل رو نشون بده یک آیدی مربوط به اون توی DB تون داشته باشید !
حتی المقدور اگر این آیدی به صورت عدد باشه که خیلی بهتره !
سپس با کلیک بروی اون مقدار آیدی اون رو گرفته به فایل PHP ارسال ( توسط پست ) و بعد مقدار رو توسط همون تابع فراخوانی میکنید !
بنده 3 تا صفحه براتون طراحی کردم !
1- صفحه ای که لیست عناوین خبریتون میاد که بصورت لینک هست
2- کد jQuery که آیدی اون خبر رو به صفحه دریافت اطلاعات پست و مقدار رو برمیگردونه
3- صفحه دریافت اطلاعات که آیدی اون خبر رو میگیره توسط پست و متن کامل خبر رو برمیگردونه

1- صفحه عناوین خبری :


<?php
// DB connect ...
$sql=mysql_query("SELECT * FROM `news`");
while($obj=mysql_fetch_object($sql)){
$newsID=$obj->newsId;
$newsTitle=$obj->newsTitle;
?>
<div><a href="#" onclick="getNews('<?php echo $newsID;?>')"> <?php echo $newsTitle;?></a></div>
<?php
}
?>


2- کد jQuery (تابع ارسال و دریافت ) :

function getNews(id){
$.post("getNews.php",{id:id},function cBack(news){
alert(news);
});
}


3- صفحه PHP دریافت اطلاعات و ارسال به تابع jQuery


<?php
//DB connect...
if(isset($_POST['id'])){
$newsid=$_POST['id'];
$sql=mysql_query("SELECT `newsText` FROM `news` WHERE `newsid`='$newsid'");
$obj=mysql_fetch_object($sql);
$newsText=$obj->newsText;
echo $newsText;
}
?>


یک مقدار توجه کنید در کدها به راحتی متوجه میشید قضیه چیه ! :)
خیلی سادس !

php4all
یک شنبه 03 دی 1391, 11:31 صبح
سلام.
این کار ساده تر از چیزیه که فکرشو می کنید!

شما اول کل اطلاعات خبر رو نمایش بدید!! هم عنوان و هم متن.
بعد متن و عنوان رو داخل دیوهای جداگانه قرار بدید. بعد در تگ هد این کد رو قرار بدید(البته بعد از ایندکس کردن جی کوئری از گوگل یا...)


<script type="text/javascript">
$(doucument).ready(function(){
$(div#title).click(founction(){
$(div#matn).slidetoggle();
}
)
}
)
</script>