ساخت CMS ساده با PHP - قسمت 12 - منوی برگه ها و نمایش برگه

‏  12 دقیقه
۱۱ مرداد ۱۳۹۳
ساخت CMS ساده با PHP - قسمت 12 - منوی برگه ها و نمایش برگه

به نام خدا و سلام در ادامه آموزش ساخت CMS و در قسمت قبلی محتوای کامل مطلب رو نشون دادیم و همچنین برای خطاهای احتمالی صفحه 404 رو هم طراحی کردیم،در این قسمت قصد داریم با استفاده از یه تابع منوی اصلی سایت که لیست برگه‌ها رو نشون میده رو ایجاد کنیم و هم چنین محتوای برگه‌ها رو هم نشون بدیم.

تابع ایجاد منوی اصلی

ما در بخش مدیریت برگه هایی رو ایجاد و منتشر می‌کنیم و قصد داریم لیست این برگه‌ها رو در منوی اصلی سایت نمایش بدیم.

<div class="navbar navbar-default navbar-static-top" role="navigation">
  <ul class="nav navbar-nav">
	  <li><a href="http://localhost:2020/CMS">خانه</a></li>
	  
  </ul>
</div>

این منوی پیش فرض هستش که با ساختار bootstrap طراحی شده،ما برای ساخت منو نیاز داریم تا برگه‌ها رو به صورت لینک‌های در تگ‌های li تولید کنیم.

در فایل functions خودتون این تابع رو اضافه کنید.

function create_menu($id="",$class=""){
    $pages=  mysql_query("SELECT * FROM pages WHERE page_status='published'");
    //$id=!empty($id)?$id:'main-menu';
    //$class=!empty($class)?$class:'menu';
    //$menu="<ul id=\"$id\" class=\"$class\" >";
    $menu="";
    while ($page=  mysql_fetch_assoc($pages)){

        $menu.="<li id=\"menu-item-{$page['page_ID']}\"><a title=\"{$page['page_title']}\" href=\"view.php?page_id={$page['page_ID']}\">{$page['page_title']}</a></li>";
    }
    //$menu.="</ul>";
    return $menu;
}

در این تابع یه کوئری ایجاد کردیم تا تمام سطر‌های جدول pages رو دریافت کنه به شرطی که برگه منشتر شده باشه و در حالت پیش نویس نباشه.بعد دز یه حلقه اونو در یه متغییر با نام menu به صورت تگ‌های li نوشتیم و مقادیر لازم رو مثل عنوان برگه با شناسه برگه رو در این تگ‌ها قرار دادیم.

برای لینک هم یه کوئری استرینگ به صفحه view.php ایجاد کردیم و نام متغییر رو page_id قرار دادیم.اگه توجه کنید در ابتدیا تابع چندین خط رو به صورت comment نوشتیم این برای موقعی هست که بخواین منو رو به صورت تگ‌های کامل یه لیست ایجاد کنید فقط کافیه اون خط‌ها رو از حالت comment خارج کنید.

خوب حالا برای استفاده در قالب و در صفحاتی که منوی اصلی نشون داده میشه،باید تابع رو در محل مورد نظر فراخوانی کنید.

<div class="navbar navbar-default navbar-static-top" role="navigation">
  <ul class="nav navbar-nav">
	  <li><a href="http://localhost:2020/CMS">خانه</a></li>
	   <?php echo create_menu(); ?>
  </ul>
</div>

با فرخوانی منو لیست برگه‌های منتسر شده چاپ میشه.

خوب حالا وقتی روی یه برگه کیک میشه لینک‌ها یه کوئری استرینگ میفرستن به صفحه view.php و متغییر page_id هم مقدار دهی شده و باید کدهای داخل صفحه view رو تغییر بدیم.

در ابتدا کدهای زیر رو به اول صفحه و بعد از کدهای دریافت مطلب تک اضافه می‌کنیم.

if(isset($_GET['page_id'])){
    $page_id=intval($_GET['page_id']);
    $page= get_page_by_id($page_id);
    if(!$page){
        redirect("404.php");
    }
}

دقیقا مثل کدهای نمایش مطلب اگه برگه ای متاسب با page_id وجود داشته باشه در متغییر page قرار میگیره و در غیر این صورت میره به صفحه 404.

خوب حالا تابع get_page_by_id اینطوری میشه:

function get_page_by_id($id=null){
    if(!empty($id) && intval($id)){       
        $result=  mysql_query("SELECT * FROM pages WHERE page_ID={$id} LIMIT 1");
        return mysql_fetch_assoc($result);
    }
    return false;
}

اینم دقیقا مثل تابع get_post_by_id هستش و فقط کوئری برای جدول page هستش.

نکته :

بهینه سازی میتونه به این صورت باشه که یه تابع برای این کار بنویسیم و هر دو تا جدول رو پشتیبانی کنه،یه آرگومان برای تابع مشخص میکنیم و میگیم از کدوم جدول اطلاعات رو واکشی کنه.

خوب حالا برای نمایش صحیح اطلاعات در صفحه view کدهای داخل محتوا رو هم به شکل زیر تغییر میدیم.

مثلا برای عنوان صفحه به این شکل در میاد.

echo isset($post)?$post['post_title']:'';
echo isset($page)?$page['page_title']:'';

چون در هر لحظه یه متغییر ست میشه ما گفتیم هر کدوم ست شده بود همونو چاپ کنهو

کدهای کامل صفحه view.php به این شکل در میاد.

<?php 
require_once 'init.php';
if(isset($_GET['p'])){
    $post_id=intval($_GET['p']);
    $post= get_post_by_id($post_id);
    if(!$post){
        redirect("404.php");
    }
}
if(isset($_GET['page_id'])){
    $page_id=intval($_GET['page_id']);
    $page= get_page_by_id($page_id);
    if(!$page){
        redirect("404.php");
    }
}
?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title><?php
     echo isset($post)?$post['post_title']:'';
     echo isset($page)?$page['page_title']:'';
    ?></title
    <!-- Bootstrap -->
    <link href="css/bootstrap.css" rel="stylesheet">
     <link href="css/bootstrap-rtl.css" rel="stylesheet">
    <link href="css/bootstrap-theme.css" rel="stylesheet">
    <link href="css/style.css" rel="stylesheet">
  </head>
  <body>
      <div class="container">
          <div class="row">
              <div class="navbar navbar-default navbar-static-top" role="navigation">
                  <ul class="nav navbar-nav">
                      <li><a href="http://localhost:2020/CMS">خانه</a></li>
                       <?php echo create_menu(); ?>
                  </ul>
              </div>
          </div>
          <div class="row">
              <div class="col-md-8">
                  <div class=" panel panel-default">
                          <div class="panel-heading">
                              <h3 class="panel-title">
                                  <?php
                                  echo isset($post)?$post['post_title']:'';
                                  echo isset($page)?$page['page_title']:'';
                                  ?>
                              </h3>
                              <span style="margin-top: -15px;" class="pull-left">
                                  <?php
                                  
                                  echo isset($post)?get_persian_date($post['post_date']):'';
                                   echo isset($page)?get_persian_date($page['page_date']):'';
                                  ?>
                              </span>
                          </div>
                          <div class="panel-body">
                              <p><?php
                              echo isset($post)?$post['post_body']:'';
                              echo isset($page)?$page['page_body']:''; 
                              ?></p>
                          </div>
                  </div>
                  <?php if(isset($post)): ?>
                  <div id="comments" class="alert alert-info text-center ">
                      <span>تعداد نظرات این مطلب : </span>
                       <span> <?php 
                       echo get_post_comment_count($post_id);
                       ?></span>
                  </div>
                  <?php endif; ?>
              </div>
              <div class="col-md-4">
                  <div class="panel panel-default">
                      <div class="panel-heading">
                          <h3 class="panel-title">اخرین مطالب</h3>
                      </div>
                      <div class="panel-body">
                          <ul class="posts-list">
                          <?php
                           $latest=get("posts",10);
                          while($post=mysql_fetch_assoc($latest)): ?>
                              <li ><a href="view.php?p=<?php echo $post['post_ID']; ?>"><?php echo $post['post_title']; ?></a></li>
                          <?php endwhile; ?>
                           </ul>
                      </div>
                  </div>
              </div>
          </div>
      </div>
    <script src="js/jquery-1.10.2.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
    <script src="js/script.js"></script>
  </body>
</html>
نکته :

 برای جلوگیری از شیطونی دیگران که ممکنه دو تا متغییر رو در آدرس ارسال کنن میتونید چک کنید فقط در هر لحظه یکی از متغییر‌های کوئری استرینگ ست شده باشه

خوب اینم از بخش ساخت منو اصلی و نمایش برگه‌های سایت.در قسمت بعدی بخش ارسال نظر و نمایش نظرات رو طراحی می‌کنیم.

موفق و پیروز باشید.

چه امتیازی به این مقاله می دید؟
نویسنده کیوان علی محمدی
یادگیرنده ی همیشگی،برنامه نویس،نویسنده،عاشق خلق چیزهای عجیب،عاشق تحلیل داده ها، مسئول بخش فنی و هم بنیان گذار در سون لرن.

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.

نظرات کاربران

mohamad mohamadi

سلام من میخوام vip بخرم اینجارو بروز کردید ؟

وحید صالحی

آقای محمدی عزیز فعلا امکان بروزرسانی نیست آقای علیمحمدی درگیر دوره وردپرس هستند به محض اینکه بروزرسانی بشه اطلاع رسانی خواهیم کرد در ضمن یک ایمل به بنده بزنید تا ایمیلتون رو داشته باشم و هر زمان که به روزرسانی انجام شده بهتون اطلاع خواهم داد

mohamad mohamadi

آقای صالحی آخه فردا vip من تموم میشه و دیگه پول ندارم بخرم چیکار کنم ?

وحید صالحی

آقا محمد hین کار, کار یکی دوساعت نیست که سریع بشه انجام داد انشالله تا زمانی که آموزش آپدیت بشه شرایط برای شما هم محیا میشه 😉

mohamad mohamadi

سلام میشه الان بزاری لطفا

وحید صالحی

سلام فعلا امکانش نیست آقای علیمحمدی درگیر دوره وردپرس هستند انشالله یکم سرشون خلوت تر بشه آپدیت میکنن

mohamad mohamadi

سلام پس میشه 1دونه درستشو بهم بدید جایگوزین کنم؟

کیوان علی محمدی

سلام چشم باید کدش رو دوباره بنویسیم و بذاریم رو سایت.

mohamad mohamadi

سلام آقای علی محمدی من هرکار کردم و حتی فایل جلسه آخر را دانلود کردم 1 ارور میده همش
میشه بگید چجوری ارور را درست کنم؟

لینک ارور
http://s3.picofile.com/file/8209818584/zzz.png

کیوان علی محمدی

سلام این خطای mysql هست چون توابعش در نسخه های جدید php منسوخ شده.

حسین

با سلام
من تازه با سایتتون اشنا شدم.
ایا این اموزش ها به صورت ویدئو می باشد یا pdf
ممنون

کیوان علی محمدی

سلام این آموزش به صورت متنی با قابلیت دانلود PDF هست.

شمس اباد

ممنون از زحماتتون

شمس اباد

سلام .خسته نباشید جناب اقای اوند و علی محمدی
.این سی ام اس رو خیلی وقته استارتشو زدید بهمن ماه پارسال بود ولی هنوز تموم نشده.من دوباره عضویت طلایی گرفتم.کی تموم میشه؟چند جلسه مونده؟

لقمان آوند

سلام
2-3 جلسه ی دیگه بیشتر نمونده که تو ه مین ماه انشاءالله تموم میشه .