نمایش محصولات در صفحه اصلی بر اساس دسته و برند در فروشگاه اینترنتی با PHP

31 شهریور 1397
php-ecommerce-brand-and-category

در این قسمت به سراغ نمایش محصولات در صفحه اصلی بر اساس دسته و برند خاص می رویم. اگر منظورم را متوجه نمی شوید می خواهم بگویم که وقتی بر روی لینک های موجود در سمت راست صفحه اصلی کلیک می کنید باید محصولاتی که در دسته و برند مورد نطر شما قرار دارد، در صفحه اصلی به نمایش بگذارید.

نمایش محصولات بر اساس دسته بندی و برند در فروشگاه اینترنتی

برای انجام اینکار باید به سراغ فایل 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 خواهم کرد. موفق باشید.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری فروشگاه اینترنتی با PHP توصیه می‌کند:
نویسنده شوید

دیدگاه‌های شما (4 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

بردیا صفا
28 اردیبهشت 1399
برند ها و دسته بندی های من انجام نمی شود بر اساس گفته های شماعمل کردم امانتیجه نمی دهد

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

ر
06 اردیبهشت 1399
سلام میشه لطفا پروژه هایی مثل ایجاد یک سایت اموزشگاه را نیز منتشر کنید مچکرم

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

امید
29 خرداد 1398
بسم الله الرحمن الرحیم با عرض سلام و آرزوی موفقیت برای سایت خوبتان امکان دارد آموزش منوی چند سطحی و کد php آن را بفرمائید؟

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

جهانگیر پچکم
30 خرداد 1398
سلام و ممنونم از اظهار لطف شما شما می تونید سوال خودتون رو در آدرس https://www.roxo.ir/q مطرح بفرمایید و با انواع جوابهایی که دوستان ارائه می دن آشنا بشین. با تشکر ، جهانگیر پچکم

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

محمدرضا
28 آذر 1397
با سلام برای این آموزش خیلی زحمت کشیدین. من که خیلی استفاده کردم. برای شما آرزوی موفقیت دارم

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

جهانگیر پچکم
01 دی 1397
سلام ، ممنونم که آموزش ها موثر بوده، انشاالله سعی می کنم که آموزش های بعدی را با کیفیت بهتری برای شما عزیزان آماده کنم. ممنونم آقا محمد رضا

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

Mohammad
26 خرداد 1398
واقعا مرسی ازتون من باید یه پروژه برای قبوای دوتا از پودمانایی که افتادم میبردم یه سایت دیگرو دنبال کردم و یه سری از اموزش های اون سایت پوای بود و بخش رایگامش کامل نبود ولی سایت شما همه جای اموزشش رایگانه واقعا مرسی

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.