Thứ Năm, 23 tháng 6, 2016

Phần 56 - Làm phần quản lý sản phẩm trang chủ

- Tiếp theo là làm phần sản phẩm trang chủ , bạn tạo thư mục 'san_pham_trang_chu' trong thư mục 'quan_tri/chuc_nang' rồi tạo file 'san_pham_trang_chu.php' trong thư mục 'san_pham_trang_chu' với nội dung sau :


<?php
    if(!isset($bien_bao_mat)){exit();}
?>

<?php
    $so_dong_tren_mot_trang=10;
    if(!isset($_GET['trang'])){$_GET['trang']=1;}   

    $tv="select count(id) from san_pham where trang_chu='co' ";

    $tv_1=mysql_query($tv);
    $tv_2=mysql_fetch_array($tv_1);
    $so_trang=ceil($tv_2[0]/$so_dong_tren_mot_trang);
   
    $vtbd=($_GET['trang']-1)*$so_dong_tren_mot_trang;
    $tv="select id,ten,gia,hinh_anh,sap_xep_trang_chu from san_pham where trang_chu='co' order by sap_xep_trang_chu desc limit $vtbd,$so_dong_tren_mot_trang";

    $tv_1=mysql_query($tv);
?>

<form method="post" >
    <table width="990px" class="tb_a1" >
        <tr style="background:#CCFFFF;height:40px;" >
            <td width="120px" ><b>Hình ảnh</b></td>
            <td width="450px" ><b>Tên</b></td>
            <td align="center" width="140px" ><b>Giá</b></td>
            <td align="center" width="140px" ><b>Trang chủ</b></td>
            <td align="center" width="140px" ><b>Thứ tự</b></td>       
        </tr>
        <?php
            $i=1;
            while($tv_2=mysql_fetch_array($tv_1))
            {
                $id=$tv_2['id'];
                $ten=$tv_2['ten'];
                $gia=$tv_2['gia'];
                $gia=number_format($gia,0,",",".");
                $link_hinh="../hinh_anh/san_pham/".$tv_2['hinh_anh'];
                $sap_xep_trang_chu=$tv_2['sap_xep_trang_chu'];
                $ten_select="select_".$i;
                $ten_input="input_".$i;
                $ten_id="id_".$i;
                ?>
                    <tr class="a_1" >
                        <td align="center" >
                            <img src="<?php echo $link_hinh; ?>" style="width:100px;margin-top:10px;margin-bottom:10px;" border="0" >
                        </td>
                        <td>
                            <?php echo $ten; ?>
                        </td>
                        <td align="center" >
                            <?php echo $gia; ?>
                        </td>
                        <td align="center" >
                            <select name="<?php echo $ten_select; ?>" >
                                <option value="" >Không</option>
                                <option value="co" selected >Có</option>
                            </select>
                        </td>
                        <td align="center" >
                            <input value="<?php echo $sap_xep_trang_chu; ?>" style="width:50px" name="<?php echo $ten_input; ?>" >
                            <input  type="hidden" value="<?php echo $id; ?>" name="<?php echo $ten_id; ?>" > 
                        </td>                   
                    </tr>
                <?php               
                $i++;
            }
        ?>
        <tr>
            <td colspan="3" align="center" >
                &nbsp;
            </td>
            <td colspan="2" align="center" >
                <br>
                <input type="submit" name="bieu_mau_san_pham_trang_chu" value="Cập nhật" style="width:180px;height:50px;font-size:24px" >
                <br><br>
            </td>           
        </tr>
        <tr>
            <td colspan="5" align="center" >
                <br>
                <?php
                    for($i=1;$i<=$so_trang;$i++)
                    {
                        $link_phan_trang="?thamso=san_pham_trang_chu&trang=".$i;
                        echo "<a href='$link_phan_trang' class='phan_trang' >";
                            echo $i;
                        echo "</a> ";
                    }
                ?>
                <br><br>
            </td>
        </tr>
    </table>
</form>


- Bạn xem giải thích code (phần chữ xanh)  của file 'san_pham_trang_chu.php' ở phần bên dưới :


<?php
    if(!isset($bien_bao_mat)){exit();} // xuất ra trang trắng nếu truy cập trực tiếp vào file này
?>

<?php
    $so_dong_tren_mot_trang=10;// số sản phẩm xuất ra trong 1 trang , ở đây là 10 sản phẩm
    if(!isset($_GET['trang'])){$_GET['trang']=1;}   
    // nếu không tồn tại biến 'trang' trên url thì biến này có giá trị là 1 , làm như vậy là để tính biến $vtbd
    // biến $vtbd là vị trí bắt đầu giới hạn menu trong câu truy vấn select , limit phía dưới
    // 
giá trị biến $vtbd tùy theo biến 'trang' trên url
    // (nghĩa là giá trị của biến $vtbd tùy vào trang đang hiện hành)


    $tv="select count(id) from san_pham where trang_chu='co' ";
    // đếm số sản phẩm trong bảng 'san_pham' mà có xuất ra ngoài trang chủ (cột 'trang_chu' mang giá trị là 'co' )

    $tv_1=mysql_query($tv);
    $tv_2=mysql_fetch_array($tv_1);
    $so_trang=ceil($tv_2[0]/$so_dong_tren_mot_trang);
    // tính số trang xuất ra của phần sản phẩm trang chủ (nếu lớn hơn 10 thì số trang lớn hơn 1 )
    // số trang bằng tổng dữ liệu của câu truy vấn trên chia cho số dòng (số sản phẩm) trong 1 trang rồi làm tròn số

   
    $vtbd=($_GET['trang']-1)*$so_dong_tren_mot_trang;
    // tính vị trí bắt đầu giới hạn của bảng 'san_pham' tùy theo trang hiện hành
    // ở đây , nếu là trang 1 thì $vtbd=0 , nếu là trang 2 thì $vtbd=10 , nếu là trang 3 thì $vtbd=20 ...
    $tv="select id,ten,gia,hinh_anh,sap_xep_trang_chu from san_pham where trang_chu='co' order by sap_xep_trang_chu desc limit $vtbd,$so_dong_tren_mot_trang";
        // lệnh truy cập vào bảng 'san_pham' (chỉ áp dụng cho sản phẩm xuất ra ngoài trang chủ : where trang_chu='co' )
        // sắp xếp theo cột 'sap_xep_trang_chu' giảm dần với giới hạn là tùy theo trang hiện tại

        // ban đầu thì vị trí bắt đầu giới hạn là 0

    $tv_1=mysql_query($tv);
?>

<form method="post" > // xuất biểu mẫu để cập nhật sản phẩm trang chủ
    <table width="990px" class="tb_a1" >
    // xuất ra bảng chứa danh sách các sản phẩm với class là 'tb_a1' , class này sẽ được dùng trong file 'giao_dien.css'
        <tr style="background:#CCFFFF;height:40px;" >
        // hàng đầu tiên có chiều cao 40px và có màu nền là 1 mã màu (#CCFFFF)
            <td width="120px" ><b>Hình ảnh</b></td>
            <td width="450px" ><b>Tên</b></td>
            <td align="center" width="140px" ><b>Giá</b></td>
            <td align="center" width="140px" ><b>Trang chủ</b></td>
            <td align="center" width="140px" ><b>Thứ tự</b></td>       
        </tr>
        <?php
            $i=1;
            // tạo biến $i để chạy cùng vòng lặp while (biến này dùng để tạo tên cho thẻ 'select' , 'input' )($i tăng 1 khi chạy trong vòng lặp while )
            while($tv_2=mysql_fetch_array($tv_1))
             // xuất dòng dữ liệu từ bảng 'san_pham' ra , dữ liệu được gán vào mảng $tv_2
            {
                $id=$tv_2['id']; // gán cột 'id' của dòng dữ liệu đang được lấy dữ liệu vào biến $id
                $ten=$tv_2['ten']; // gán cột 'ten' của dòng dữ liệu đang được lấy dữ liệu vào biến $ten
                $gia=$tv_2['gia']; // gán cột 'gia' của dòng dữ liệu đang được lấy dữ liệu vào biến $gia
                $gia=number_format($gia,0,",","."); // định dạng lại giá tiền cho dễ xem
                $link_hinh="../hinh_anh/san_pham/".$tv_2['hinh_anh'];
                // tạo ra liên kết hình , hình ảnh trong thư mục 'hinh_anh/san_pham' (cách viết ../ là lùi về 1 thư mục)
                $sap_xep_trang_chu=$tv_2['sap_xep_trang_chu'];
               
// gán cột 'sap_xep_trang_chu' của dòng dữ liệu đang được lấy dữ liệu vào biến $sap_xep_trang_chu
                $ten_select="select_".$i; // tạo tên ( name ) cho thẻ select (thẻ này nhằm xác định tùy chọn trang chủ của sản phẩm hiện tại)
                $ten_input="input_".$i; // tạo tên ( name ) cho thẻ input (thẻ này nhằm xác định thứ tự ở phía ngoài trang chủ của sản phẩm hiện tại)
                $ten_id="id_".$i; // tạo tên ( name ) cho thẻ input chứa id của sản phẩm hiện tại 
                ?>
                    <tr class="a_1" >
                        <td align="center" >
                            <img src="<?php echo $link_hinh; ?>" style="width:100px;margin-top:10px;margin-bottom:10px;" border="0" >
                            // xuất hình ảnh , hình ảnh rộng 100px , cách trên cách dưới 10px
                        </td>
                        <td>
                            <?php echo $ten; ?> // xuất tên sản phẩm
                        </td>
                        <td align="center" >
                            <?php echo $gia; ?> // xuất giá sản phẩm
                        </td>
                        <td align="center" >
                            <select name="<?php echo $ten_select; ?>" >
                            // xuất hộp chọn tùy chọn trang chủ , lấy dữ liệu hộp tùy chọn này bằng cách viết $_POST[$ten_select]
                                <option value="" >Không</option>
                                <option value="co" selected >Có</option> // cho tùy chọn "Có" hiển thị trước ( selected )
                            </select>
                        </td>
                        <td align="center" >
                            <input value="<?php echo $sap_xep_trang_chu; ?>" style="width:50px" name="<?php echo $ten_input; ?>" >
                            // xuất thứ tự sắp xếp trang chủ , lấy dữ liệu thứ tự này bằng cách viết $_POST[$ten_input]
                            <input  type="hidden" value="<?php echo $id; ?>" name="<?php echo $ten_id; ?>" >
                            // xuất thẻ input ẩn ( type="hidden" ) chứa id của sản phẩm xuất ra
                            // lấy dữ liệu chỗ này bằng cách viết $_POST[$ten_id]
                            // id này sẽ được dùng xác định vị trí sửa sản phẩm (được dùng tại chỗ where khi sửa sản phẩm trong cơ sở dữ liệu)
                        </td>                   
                    </tr>
                <?php               
                $i++;
                // tăng biến $i lên 1 , tăng lên như vậy để tạo sự khác nhau khi đặt tên cho thẻ select và input
                // do có 10 thẻ select và 20 thẻ input (trong đó có 10 thẻ input ẩn) khác nhau
            }
        ?>
        <tr>
            <td colspan="3" align="center" >
                &nbsp;
            </td>
            <td colspan="2" align="center" >
                <br>
                <input type="submit" name="bieu_mau_san_pham_trang_chu" value="Cập nhật" style="width:180px;height:50px;font-size:24px" >
                // tạo nút gửi biểu mẫu sửa sản phẩm trang chủ với name là 'bieu_mau_san_pham_trang_chu'
                // trong file 'xu_ly_post_get.php' sẽ dùng phần name này
                // để xác định biểu mẫu có được gửi hay không ( isset($_POST['bieu_mau_san_pham_trang_chu']) )
                // định dạng css của nút này (thuộc tính style) là : rộng 180px , cao 50px , kích cỡ chữ 24px
                <br><br>
            </td>           
        </tr>
        <tr>
            <td colspan="5" align="center" >
                <br>
                <?php
                    for($i=1;$i<=$so_trang;$i++) // chạy từ trang 1 đến trang cuối cùng
                    {
                        $link_phan_trang="?thamso=san_pham_trang_chu&trang=".$i;
                        // tạo liên kết phân trang , liên kết phân trang đến trang nào thì biến 'trang' trên url có giá trị là trang đó                       
                        echo "<a href='$link_phan_trang' class='phan_trang' >";
                        // xuất liên kết phân trang với class là 'phan_trang'
                            echo $i;
                        echo "</a> ";
                    }
                ?>
                <br><br>
            </td>
        </tr>
    </table>
</form>


- Mình bấm vào liên kết 'Sản phẩm trang chủ' tại trang chủ của trang quản trị thì nhận được kết quả sau :



- Kết quả phần dưới của liên kết mình đã bấm vào :


 
- Khi mình bấm vào liên kết sản phẩm trang chủ (ở file 'trang_chu_2.php' ) thì web sẽ đến trang ?thamso=san_pham_trang_chu , web sẽ tải file 'dieu_huong.php' và  gọi file 'san_pham_trang_chu.php' bằng đoạn code sau :

case "san_pham_trang_chu":
    include("chuc_nang/san_pham_trang_chu/san_pham_trang_chu.php");
break;

- Từ đó sẽ xuất ra trang sản phẩm trang chủ , nếu muốn chỉnh sửa sản phẩm trang chủ thì vào trang này