در این قسمت به سراغ نمایش محصولات در صفحه اصلی بر اساس دسته و برند خاص می رویم. اگر منظورم را متوجه نمی شوید می خواهم بگویم که وقتی بر روی لینک های موجود در سمت راست صفحه اصلی کلیک می کنید باید محصولاتی که در دسته و برند مورد نطر شما قرار دارد، در صفحه اصلی به نمایش بگذارید.
برای انجام اینکار باید به سراغ فایل functions.php برویم و در آنجا یک سری تغییرات را انجام دهیم. باید ابتدا کاری کنیم که کد دسته و کد برند بر روی لینک های هر دسته و برند نمایش داده شود بنابراین اگر تابع getCat() را مشاهده کنید و خط زیر را در آن بیابید.
echo "<li><a href='#'>$cat_title</a></li>";
این خط باید تغییر کند و به شکل زیر در آیید تا بتواند کد دسته را نیز در لینک خود به نمایش در بیاورد.
echo "<li><a href='index.php?cat_id=$cat_id'>$cat_title</a></li>";
دقت کنید که در اینجا هم از ترفندی که در قسمت قبل خدمت شما عرض کردم استفاده می کنیم.
به این شکل که از آرایه ی فوق سراسری $_GET کمک می گیریم. به طور مشابه همین کار را برای تابع getBrand() نیز انجام می دهیم. یعنی در تابع getBrand() نیز خط زیر را پیدا می کنیم.
echo "<li><a href='#'>$brand_title</a></li>";
و آن را به شکل زیر تغییر می دهیم.
echo "<li><a href='index.php?brand_id=$brand_id'>$brand_title</a></li>";
بعد از انجام کارهای بالا باید به سراغ تابع getPro() برویم. تابع getPro() باید به گونه تغییر کند که اگر در url ما شماره id دسته (cat_id) و همچنین شماره id برند (brand_id) وجود نداشت، آنگاه کار کند.
در این حالت تمامی محصولات را فارغ از دسته و برندشان به نمایش در می آورد. من دستور شرطی زیر را برای اینکار در نظر گرفتم.
if((!isset($_GET['cat_id']))&&(!isset($_GET['brand_id'])))
یعنی به شکل زیر، تابع getPro() را تغییر می دهیم.
//display products function getPro() { global $con; //display products when not set cat_id and brand_id if((!isset($_GET['cat_id']))&&(!isset($_GET['brand_id']))){ $get_pro="select * from products order by RAND() LIMIT 0,12"; $run_pro=@mysqli_query($con,"SET NAMES utf8"); $run_pro=@mysqli_query($con,"SET CHARACTER SET utf8"); $run_pro=mysqli_query($con,$get_pro); echo"<h2>جدیدترین محصولات</h2>"; while($row_pro=mysqli_fetch_array($run_pro)) { $pro_id=$row_pro['product_id']; $pro_cat=$row_pro['product_cat']; $pro_brand=$row_pro['product_brand']; $pro_title=$row_pro['product_title']; $pro_price=$row_pro['product_price']; $pro_desc=$row_pro['product_desc']; $pro_image=$row_pro['product_image']; echo" <div class='product_box'> <h3>$pro_title</h3> <img width='200' height='150' src='Admin_area/$pro_image' alt='image' /> <div class='price'>قیمت:<span>$pro_price تومان</span></div> <div class='buynow'><a href='#'>هم اکنون می خرید</a></div> <a href='details.php?product_id=$pro_id'>جزئیات</a> </div>"; } } }
حالا برای هر کدام از 2 حالت باقی مانده (حالت اول: زمانی که cat_id در url قرار دارد و حالت دوم: وقتی که brand_id در url قرار دارد) 2 تابع جدید می نویسیم.
تابع زیر که برای حالت اول است (زمانی که cat_id در url موجود است) را برای شما قرار دادم نام این تابع را getCatPro() گذاشته ام. شما باید این تابع را قبل از علامت ؟> در فایل functions.php قرار دهید.
//display products when set cat_id function getCatPro() { global $con; if(isset($_GET['cat_id'])){ $pro_cat_id=$_GET['cat_id']; //query getting products of cat $get_pro="select * from products where product_cat='$pro_cat_id' "; //query getting name of category $get_cat_name="select cat_title from categories where cat_id='$pro_cat_id' "; $run_pro=@mysqli_query($con,"SET NAMES utf8"); $run_pro=@mysqli_query($con,"SET CHARACTER SET utf8"); $run_pro=mysqli_query($con,$get_pro); $run_cat_name=mysqli_query($con,$get_cat_name); //display name of category while($row_cat_name=mysqli_fetch_array($run_cat_name)) { $pro_cat_name=$row_cat_name['cat_title']; echo"<h2>$pro_cat_name</h2>"; } //display message when empty of category $cunt_pro_cat=mysqli_num_rows($run_pro); if($cunt_pro_cat==0) { echo"<br/><br/><b><h3>متاسفانه محصول خاصی در این دسته وجود ندارد</h3></b>"; } //display products of category while($row_pro=mysqli_fetch_array($run_pro)) { $pro_id=$row_pro['product_id']; $pro_cat=$row_pro['product_cat']; $pro_brand=$row_pro['product_brand']; $pro_title=$row_pro['product_title']; $pro_price=$row_pro['product_price']; $pro_desc=$row_pro['product_desc']; $pro_image=$row_pro['product_image']; echo" <div class='product_box'> <h3>$pro_title</h3> <img width='200' height='150' src='Admin_area/$pro_image' alt='image' /> <div class='price'>قیمت:<span>$pro_price تومان</span></div> <div class='buynow'><a href='#'>هم اکنون می خرید</a></div> <a href='details.php?product_id=$pro_id'>جزئیات</a> </div>"; } } }
در تابع بالا با استفاده از دستورات sql، ابتدا با id دسته به دست آمده از url، محصولاتی که دارای این id دسته هستند را به دست می آوریم (منظورم متغییر $get_pro است) و بعد از آن باز هم با استفاده از همین id، نام دسته محصول را استخراج می کنیم (منظورم متغییر $get_cat_name است). در ادامه با استفاده از این دو متغییر سایر اطلاعات محصولات را در اختیار می گیریم.
دقت کنید که در کد بالا تابع mysqli_num_rows() تعداد سطرهای متناسب با کوئری را برای ما به عنوان نتیجه باز می گرداند. این یعنی اینکه اگر ما در یک دسته خاص، محصولی برای عرضه نداشتیم مقدار بازگشتی برابر با 0 می شود از این رو من یک شرط نیز قرار دادم یه کد زیر دقت کنید.
//display message when empty of category $cunt_pro_cat=mysqli_num_rows($run_pro); if($cunt_pro_cat==0) { echo"<br/><br/><b><h3>متاسفانه محصول خاصی در این دسته وجود ندارد</h3></b>"; }
در صورتی که مقدار بازگشتی تابع mysqli_num_rows() برابر با صفر شود، جمله "متاسفانه محصول خاصی در این دسته وجود ندارد" برای مشتری به نمایش در می آید.
حالا می رویم سراغ حالت دوم یعنی زمانیکه brand_id در url قرار دارد. برای این حالت نیز تابع getBrandPro() را به صورت زیر به فایل functions.php و قبل از ؟> اضافه کردم.
//display products when set brand_id function getBrandPro() { global $con; if(isset($_GET['brand_id'])){ $pro_brand_id=$_GET['brand_id']; //query getting products of brand $get_pro="select * from products where product_brand='$pro_brand_id' "; //query getting name of brand $get_brand_name="select brand_title from brands where brand_id='$pro_brand_id' "; $run_pro=@mysqli_query($con,"SET NAMES utf8"); $run_pro=@mysqli_query($con,"SET CHARACTER SET utf8"); $run_pro=mysqli_query($con,$get_pro); $run_brand_name=mysqli_query($con,$get_brand_name); //display name of brand while($row_brand_name=mysqli_fetch_array($run_brand_name)) { $pro_brand_name=$row_brand_name['brand_title']; echo"<h2>$pro_brand_name</h2>"; } //display message when empty of brand $cunt_pro_brand=mysqli_num_rows($run_pro); if($cunt_pro_brand==0) { echo"<br/><br/><b><h3>متاسفانه محصول خاصی در این برند وجود ندارد .</h3></b>"; } //display products of brand while($row_pro=mysqli_fetch_array($run_pro)) { $pro_id=$row_pro['product_id']; $pro_cat=$row_pro['product_cat']; $pro_brand=$row_pro['product_brand']; $pro_title=$row_pro['product_title']; $pro_price=$row_pro['product_price']; $pro_desc=$row_pro['product_desc']; $pro_image=$row_pro['product_image']; echo" <div class='product_box'> <h3>$pro_title</h3> <img width='200' height='150' src='Admin_area/$pro_image' alt='image' /> <div class='price'>قیمت:<span>$pro_price تومان</span></div> <div class='buynow'><a href='#'>هم اکنون می خرید</a></div> <a href='details.php?product_id=$pro_id'>جزئیات</a> </div>"; } } }
با توجه به توضیحاتی که مورد تابع getCatPro() دادم، ما می توانید همان توضیحات را برای تابع getBrandPro() نیز در نظر بگیرید.
کار ما با فایل functions.php تمام شده است. حالا فقط کافی است که این دو تابع جدید یعنی getCatPro() و getBrandPro() را به فایل index.php اضافه نماییم. به همین خاطر ابتدا فایل index.php را با استفاده از Notepad++ باز کرده و کد زیر را در آن پیدا کنید.
<?php getPro(); ?>
و حالا کد بالا را به صورت کد زیر تغییر می دهیم.
<?php getPro(); getCatPro(); getBrandPro(); ?>
حالا همه چیز آماده است. wamp را روشن کنید و به آدرس http://localhost/ecommerce می رویم. در قسمت سمت راست بر روی دسته بندی های مورد نظر کلیک کنید تا فقط محصولات آن دسته در صفحه، نمایش داده شود. مثلا در تصویر زیر وقتی من بر روی دسته بندی "دوربین" فشار دادم.
و بعد باید در صفحه و قسمت سمت چپ فقط دوربین ها به نمایش در بیایند.
همین اتفاق در مورد برندها هم به طور مشابه روی می دهد. خودتان امتحان کنید. خب دوستان گلم، به پایان این قسمت از آموزش رسیدیم، امیدوارم مطالب آموزشی امروز را به خوبی تمرین کنید، چون هر کدام از آنها بعدا به کار می آیند. در قسمت آینده به منو (menu) سر خواهیم زد و لینک های آن را مرتب می کنیم و شروع به آموزش بخش search خواهم کرد. موفق باشید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.