কিভাবে কুকি ম্যাজেন্টো 2 যুক্ত করবেন?


16

আমি মান এবং কিছু সময়কাল সহ একটি কুকি যুক্ত করতে চাই , এটি ম্যাজেন্টো 2 তে কীভাবে করা যায়।

ধন্যবাদ

উত্তর:


26

আইএমওর সর্বোত্তম পন্থা হ'ল কুকি তৈরির মোড়কে ক্লাস তৈরি করা এবং তারপরে আপনি যেখানে চান সেখানে এটি ব্যবহার করুন use

কুকি ক্লাস

{বিক্রেতার} / {মডিউল} /Cookie/Example.php

<?php 

namespace Vendor\Module\Cookie;

use Magento\Framework\Stdlib\CookieManagerInterface;
use Magento\Framework\Stdlib\Cookie\CookieMetadataFactory;
use Magento\Framework\Session\SessionManagerInterface;

class Example
{
    /**
     * Name of cookie that holds private content version
     */
    const COOKIE_NAME = 'example';

    /**
     * CookieManager
     *
     * @var CookieManagerInterface
     */
    private $cookieManager;

    /**
     * @var CookieMetadataFactory
     */
    private $cookieMetadataFactory;

    /**
     * @var SessionManagerInterface
     */
    private $sessionManager;

    /**
     * @param CookieManagerInterface $cookieManager
     * @param CookieMetadataFactory $cookieMetadataFactory
     * @param SessionManagerInterface $sessionManager
     */
    public function __construct(
        CookieManagerInterface $cookieManager,
        CookieMetadataFactory $cookieMetadataFactory,
        SessionManagerInterface $sessionManager
    ) {
        $this->cookieManager = $cookieManager;
        $this->cookieMetadataFactory = $cookieMetadataFactory;
        $this->sessionManager = $sessionManager;
    }

    /**
     * Get form key cookie
     *
     * @return string
     */
    public function get()
    {
        return $this->cookieManager->getCookie(self::COOKIE_NAME);
    }

    /**
     * @param string $value
     * @param int $duration
     * @return void
     */
    public function set($value, $duration = 86400)
    {
        $metadata = $this->cookieMetadataFactory
            ->createPublicCookieMetadata()
            ->setDuration($duration)
            ->setPath($this->sessionManager->getCookiePath())
            ->setDomain($this->sessionManager->getCookieDomain());

        $this->cookieManager->setPublicCookie(
            self::COOKIE_NAME,
            $value,
            $metadata
        );
    }

    /**
     * @return void
     */
    public function delete()
    {
        $metadata = $this->cookieMetadataFactory
            ->createPublicCookieMetadata()
            ->setDuration($duration)
            ->setPath($this->sessionManager->getCookiePath())
            ->setDomain($this->sessionManager->getCookieDomain());

        $this->cookieManager->deleteCookie(
            self::COOKIE_NAME,
            $metadata
        );
    }
}

এই উদাহরণটি ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ অ্যাপ \ পেজক্যাচ \ ফর্মকির উপর ভিত্তি করে তৈরি হয়েছিল এবং "উদাহরণ" নামের একটি একক কুকিকে উপস্থাপন করে

আপনি যদি change মেটাডেটা ( পাবলিককুকিমেটাডেটা ) -এ কিছু কাস্টম বৈশিষ্ট্য যুক্ত করতে চান তবে এই পথটি, http_only ইত্যাদি পরিবর্তন করতে হবে আপনার set()এবং / অথবা delete()পদ্ধতি (গুলি) এর রিফেক্টর করা উচিত ।

এটি কিভাবে ব্যবহার করতে

আপনি প্রায় যে কোনও জায়গায় অবজেক্ট ম্যানেজারটি ব্যবহার করে class শ্রেণিতে অ্যাক্সেস করতে পারেন (কুরুচিপূর্ণ দৃষ্টিভঙ্গি):

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$objectManager->get('Vendor\Module\Cookie\Example')
    ->set('value', 3600);

"যেখানে" আপনার কুকি তৈরি করতে হবে তার উপর নির্ভর করে আপনি আপনার ক্লাসের কনস্ট্রাক্টরের দিকে একবার নজর রাখতে পারেন আপনার কাছে ইতিমধ্যে সেখানে কোনও অবজেক্ট ম্যানেজার রয়েছে, যদি না আপনি এটি কন্সট্রাক্টারেও ইনজেক্ট করতে পারেন।


@J। জন, আরে! আমি জটস দেখেছি যে আমি সম্পাদনা করার সময় আপনি উত্তরটি গ্রহণ করেছেন, এখনই একবার দেখুন, কারণ বাস্তবায়নকে সহজ করার জন্য আমি বেশ কয়েকটি পরিবর্তন করেছি।
মাউরোনিগ্রিল

3
আমি সম্পাদনা করতে করেছি createCookieMetaData()করার createPublicCookieMetadata()মধ্যে setত্রুটি (মারাত্মক ত্রুটি) সমাধান করতে পদ্ধতি। স্মার্ট অ্যাপ্রোচ যদিও!
আরটি

Magento\Framework\Session\SessionManagerInterfaceআপনি Magento\Framework\Session\Config\ConfigInterfaceব্যবহৃত এবং ব্যবহৃত মধ্যে পার্থক্য কি Magento\Framework\Session\SessionManager?
লুকস্কু

@ মাউরোনিগ্রিল ফাংশন কল সেট এবং মুছে ফেলার পদ্ধতিতে কুকিমেটাডাটা-র পরিবর্তে প্রাইপাবলিক কুকিমেটাটাটা হওয়া উচিত
শিবাম

1
ছেলেরা। আমি পরিবর্তনগুলি প্রস্তাব করেছি কারণ $this->createPublicCookieMetadata()এই শ্রেণিতে নেই। এটি $this->cookieMetadataFactory->createPublicCookieMetadata() ম্যাজেন্টো রেপোতে দেখা উচিত । কিন্তু আমি পেয়েছি 2 প্রত্যাখ্যান।
এলএল

-1

আপনি এই জাতীয় পিএইচপি বেসিক ফাংশন ব্যবহার করে কুকি সেট এবং পেতে পারেন:

//set cookie
$cookie_name = "magento";
$cookie_value = "How to Cookie";
setcookie($cookie_name, $cookie_value, time()+3600); /* expire in 1 hour */

//get cookie
if(!isset($_COOKIE[$cookie_name])) {
    echo "Cookie named '" . $cookie_name . "' is not set!";
} else {
    echo "Cookie '" . $cookie_name . "' is set!<br>";
    echo "Value is: " . $_COOKIE[$cookie_name];
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.