10/10/2018, 11:39

Cho e hỏi thuật toán để lưu các sản phẩm đã xem

Em đang mắc ở chỗ này các bác ạ. Mỗi lần vào trang chi tiết xem sản phẩm thì sẽ dùng cookie để lưu lại thông tin sản phẩm đó. Khi lưu được 8 sản phẩm rồi thì nếu sang sản phẩm thứ 9 thì sản phẩm thứ 1 sẽ đc xóa đi vào thay vào đó là sản phẩm thứ 9. Bác nào pro thuật toán vào giúp e với. E xin cảm ơn các bác
_ThietKeMienPhi_ viết 13:55 ngày 10/10/2018
Bạn cũng có thể dùng session mà, đưa nó vào 1 mảng thôi bạn.
saurom_90 viết 13:55 ngày 10/10/2018
bạn có thuật toán thì cho mình xin với chứ nói như bạn thì mình cũng biết
webjquery viết 13:47 ngày 10/10/2018
Ý tưởng của tôi là bạn lưu các sản phẩm đã xem vào một mảng, bạn đếm số lượng sản phẩm đã xem trong mảng đã lưu, nếu số lượng lớn hơn 7 (vì mảng chạy từ 0) thì bắt đấu xóa bản ghi đầu tiền trong mảng sản phầm lưu ở Session đi, sắp xếp lại mảng và lưu tiếp sản phẩm thứ 9 vào mảng Session, quá trình cứ như thế sẽ làm được như yêu cầu của bạn. Ai có ý tưởng nào hay hơn thì bày ra anh em học hỏi
anhhd37 viết 13:42 ngày 10/10/2018
mỗi lần gán sản phẩm vào session thì bạn count mảng session ấy nếu chia hết cho 8 thì bạn xóa sp đầu tiên.

if (count($product)==8){
unset $product['1'];
foreach ($product as $key=>$value){
$product[] = $value;
}
}

ví dụ vậy,sau khi xóa sản phẩm có key là 1 trong mảng thì bạn gán lại 1 mảng product mới,vậy thôi
saurom_90 viết 13:48 ngày 10/10/2018
Xin cảm ơn các bạn rất nhiều đã giúp đỡ mình. Tuy nhiên mình thấy solution dùng mảng session ko đc hay lắm nên mình đã chuyển sang solution khác rồi. Solution mới của mình là chỉ lưu 1 biến session thôi. Sẽ lưu theo dạng sau:
Code:
1:2:3:4:5
mỗi số tương ứng với id của sản phẩm
và đây là code của mình, share cho bạn nào cần nhé. code này viết trên FW CI nhé
Code:
private function _get_viewed_product($product_id = 0)
    {
        $flag = FALSE;
        if($this->phpsession->get('viewed_product') == '')
            $this->phpsession->save('viewed_product', $product_id);
        else
        {
            $str = $product_id;
            $viewed_array = explode(':', $this->phpsession->get('viewed_product'));
            foreach($viewed_array as $a)
            {
                if($str == $a)
                {$flag = FALSE;break;}
                else
                {$flag = TRUE;}
            }
        }
        if($flag)
            $this->phpsession->save('viewed_product',$this->phpsession->get('viewed_product') . ':' . $str);

        $product_ids = explode(':', $this->phpsession->get('viewed_product'));
        if(count($product_ids) > 4)
        {
            array_shift($product_ids);
            $b = '';
            foreach($product_ids as $id)
            {
                if($b == '')
                    $b .= $id;
                else
                    $b .= ':' . $id;
            }
            $this->phpsession->save('viewed_product',$b);
        }
        return explode(':', $this->phpsession->get('viewed_product')) ;
    }
luuanhquyen viết 13:45 ngày 10/10/2018
Hay hơn hay không là tùy trường hợp lưu theo kiểu mảng sẽ dễ khai thác hơn chứ. Lưu theo kiểu chuỗi thì lại mất công phân tích ra mảng. Nếu dùng cookies thì sẽ hay hơn vì người dùng sẽ xem lại được sản phẩm đã xem trong thời gian lâu dài chứ ko giới hạn trong phiên làm việc.
saurom_90 viết 13:51 ngày 10/10/2018
Được gửi bởi luuanhquyen
Hay hơn hay không là tùy trường hợp lưu theo kiểu mảng sẽ dễ khai thác hơn chứ. Lưu theo kiểu chuỗi thì lại mất công phân tích ra mảng. Nếu dùng cookies thì sẽ hay hơn vì người dùng sẽ xem lại được sản phẩm đã xem trong thời gian lâu dài chứ ko giới hạn trong phiên làm việc.
Mình đã tham khảo hầu hết các website họ đều dùng cách này. Còn đương nhiên là mình phải lưu chuỗi này vào cookie rồi. Ai dùng session để lưu đâu mà bạn lo. Quan trọng là dùng cách nào đơn giản mà chính xác thôi
saurom_90 viết 13:44 ngày 10/10/2018
Được gửi bởi Việt Jyo
mình cũng đang cần ... thật may quá. Thanks bạn saurom_90!
Hi hem có chi, đc chia sẻ với mọi người thì còn gì bằng
Bài liên quan
0