<?php
require('../includes/header.php');

?>


<!doctype html>
<html class="no-js" lang="en">


<head>
    <meta charset="utf-8">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <title>TUTORIAL || POWER LINKS CTG</title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <!-- Place favicon.ico in the root directory -->
    <link rel="shortcut icon" type="image/x-icon" href="../images/icon.png">
    <link rel="apple-touch-icon" href="apple-touch-icon.png">
	
	
	

</head>

<body>
    <!--[if lt IE 8]>
        <p class="browserupgrade">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
    <![endif]-->  

    <!-- Body main wrapper start -->
    <div class="wrapper">
        <!-- Start Header Style -->

        <!-- End Header Style -->
        <!-- Start Bradcaump area -->
        <div class="ht__bradcaump__area" data--black__overlay="6" style="background: rgba(0, 0, 0, 0) url(<?php echo WEB_URL; ?>/plc/images/bg/5.jpg) no-repeat scroll center center / cover ;">
            <div class="ht__bradcaump__wrap">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12">
                            <div class="bradcaump__inner text-center">
                                <h2 class="bradcaump-title">TUTORIAL</h2>
                                <nav class="bradcaump-inner">
                                  <a class="breadcrumb-item" href="index.html">Home</a>
                                  <span class="brd-separetor">-</span>
                                  <span class="breadcrumb-item active">Videos</span>
                                </nav>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
	
        <!-- End Bradcaump area -->
		
		<div class="profile-tabs">
					
  	<ul class="main__menu" role="tablist" id="myTab">
		<li class="nav-item"><a class="nav-link active" href="#AllPROJECT" aria-controls="profile" role="tab" data-toggle="tab">All PROJECTS</a></li>
				
						<li class="nav-item"><a class="nav-link" href="#RUNNING" aria-controls="profile" role="tab" data-toggle="tab">RUNNING</a></li>
						<li class="nav-item"><a class="nav-link" href="#COMPALITE" aria-controls="profile" role="tab" data-toggle="tab">COMPALITE</a></li>
						
					</ul>
        
	
	<div class="tab-content">
	<hr>
<div id="AllPROJECT" class="tab-pane active">
<section class="htc__latest__project__area ptb--150 bg__white">
            <div class="container">
                <div class="row">
                    <div class="htc__latest__project__wrap clearfix">
                        <!-- Start Single Project -->
						
						<?php $sqli=$conn->query("Select * from project where display BETWEEN 1 AND 2 ORDER BY RAND()");
							foreach ($sqli as $key => $project) {
											?>
                        <div class="col-md-4 col-lg-4 col-sm-6 col-xs-12">
                            <div class="project foo">
                                <div class="project__thumb">
                                    <a href="single-project.html">
                                        <img class="" alt="project images" src='upload/<?php echo $project ['FileName']; ?>' 
										width="" height="500" >
                                    </a>
                                    <div class="project__hover__info">
                                        <div class="project__action">
                                            <h2><a href="single-project.php?Id=<?php echo $project["Id"]; ?>"><?php echo $project["ProjectName"]; ?></a></h2>
                                            <h4><?php echo $project ['SortAddress']; ?></h4>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
						<?php } ?>
                        <!-- End Single Project -->
                       
                    </div>
                </div>
            </div>
        </section>
      
    </div>
	<div id="RUNNING" class="tab-pane">
<section class="htc__latest__project__area ptb--150 bg__white">
            <div class="container">
                <div class="row">
                    <div class="htc__latest__project__wrap clearfix">
                        <!-- Start Single Project -->
						
						<?php $sqli=$conn->query("Select * from project where display=1 ORDER BY RAND()");
							foreach ($sqli as $key => $project) {
											?>
                        <div class="col-md-4 col-lg-4 col-sm-6 col-xs-12">
                            <div class="project foo">
                                <div class="project__thumb">
                                    <a href="single-project.html">
                                        <img class="" alt="project images" src='upload/<?php echo $project ['FileName']; ?>' 
										width="" height="500" >
                                    </a>
                                    <div class="project__hover__info">
                                        <div class="project__action">
                                            <h2><a href="single-project.php?Id=<?php echo $project["Id"]; ?>"><?php echo $project["ProjectName"]; ?></a></h2>
                                            <h4 ><?php echo $project ['SortAddress']; ?></h4>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
						<?php } ?>
                        <!-- End Single Project -->
                       
                    </div>
                </div>
            </div>
        </section>
      
    </div>
	<div id="COMPALITE" class="tab-pane">
<section class="htc__latest__project__area ptb--150 bg__white">
            <div class="container">
                <div class="row">
                    <div class="htc__latest__project__wrap clearfix">
                        <!-- Start Single Project -->
						
						<?php $sqli=$conn->query("Select * from project where display=2 ORDER BY RAND()");
							foreach ($sqli as $key => $project) {
											?>
                        <div class="col-md-4 col-lg-4 col-sm-6 col-xs-12">
                            <div class="project foo">
                                <div class="project__thumb">
                                    <a href="single-project.html">
                                        <img class="" alt="project images" src='upload/<?php echo $project ['FileName']; ?>' 
										width="" height="500" >
                                    </a>
                                    <div class="project__hover__info">
                                        <div class="project__action">
                                            <h2><a href="single-project.php?Id=<?php echo $project["Id"]; ?>"><?php echo $project["ProjectName"]; ?></a></h2>
                                            <h4><?php echo $project ['SortAddress']; ?></h4>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
						<?php } ?>
                        <!-- End Single Project -->
                       
                    </div>
                </div>
            </div>
        </section>
      
    </div>
	</div>
			
		</div>

		


        
        <!-- End Footer Area -->
    </div>
    <!-- Body main wrapper end -->



</body>
</html>
<script>
$(function(){
  var hash = window.location.hash;
  hash && $('ul.nav a[href="' + hash + '"]').tab('show');

  $('.main__menu a').click(function (e) {
    $(this).tab('show');
    var scrollmem = $('body').scrollTop() || $('html').scrollTop();
    window.location.hash = this.hash;
    $('html,body').scrollTop(scrollmem);
  });
});
</script>

<?php
require('../includes/footer.php');
?>