অ্যাডমিন প্যানেলে কীভাবে বর্তমান ওয়েবসাইট আইডি পাবেন?


10

আমি একাধিক ওয়েবসাইটের সাথে সম্পর্কিত কাস্টম এক্সটেনশনের সাথে কাজ করছি। আমি একটি সমস্যার মুখোমুখি হয়েছি, ওয়েবসাইট আইডি পেয়ে প্রশাসনিক প্যানেলে একটি স্ক্রিপ্ট কোড নির্বাহ করি। আমি website_id0 এর মতো ফলাফল আশা করেছি ( store_websiteটেবিলের ডিফল্ট আইডি )। তবে আমি যখন নীচে এই ফাংশনটি ব্যবহার করি তখন সর্বদা 1 ফিরে আসে।

/** @var \Magento\Store\Model\StoreManagerInterface */
$this->_storeManager->getStore()->getWebsiteId(); //return 1, expect 0
$this->_storeManager->getWebsite()->getId(); //return 1

আমার প্রশ্ন : website_idঅ্যাডমিন প্যানেলে কারেন্টটি পাওয়ার জন্য কোনও উপায় বা adminhtmlএলাকায় কোনও ফাংশন রান সংজ্ঞায়িত করতে চান ?

দ্রষ্টব্য: এই ক্রিয়াকলাপটি সম্মুখভাগ এবং ব্যাকএন্ড উভয় ক্ষেত্রেই কাজ করা দরকার।

কোন সাহায্য প্রশংসা করা হবে।


আপনার দোকানে প্রথম মাল্টি ওয়েবসাইট বিদ্যমান আছে কিনা তা যাচাই করুন।
সুরেশ চিকানী

উত্তর:


18

সাধারণ ধারণাটি অনুরোধ প্যারামিটারের মাধ্যমে নির্বাচিত সুযোগটি পাস করা pass

আমি মনে করি পণ্য সম্পাদনা ক্রিয়ায় আপনার অনুরূপ কোডটি ব্যবহার করা উচিত:

/** @var \Magento\Store\Model\StoreManagerInterface $storeManager */
$storeManager = $this->_objectManager->get('Magento\Store\Model\StoreManagerInterface');
$storeId = (int) $this->getRequest()->getParam('store', 0);
$store = $storeManager->getStore($storeId);
$storeManager->setCurrentStore($store->getCode());

এই ক্ষেত্রে $store->getWebsiteId()আসল (নির্বাচিত) ওয়েবসাইট আইডি হওয়া উচিত। তবে এটি কেবল তখনই করা যেতে পারে আপনি স্টোর ব্লকটি ব্যবহার করেন যা একটি স্ট্যান্ডার্ড ম্যাজেন্টো ব্লক (স্টোরের সুযোগ নির্বাচন করতে) হিসাবে একইভাবে কাজ করে:

স্টোর নির্বাচনকারী

আমি যখন ডিফল্ট স্টোর ভিউ (আইডি == 1) নির্বাচন করি তখন উদাহরণে আমার ফলাফল এখানে রয়েছে:

1 স্টোর ভিউ ডিবাগ উদাহরণ

এবং এখানে ডিফল্ট গ্লোবাল স্কোপের জন্য রয়েছে ( সমস্ত স্টোর দর্শন , ওয়েবসাইট আইডি 0):

গ্লোবাল স্কোপ ডিবাগ উদাহরণ


হালনাগাদ:

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

/**
 * @var \Magento\Framework\App\State
 */
protected $state;

/**
 * @var \Magento\Store\Model\StoreManagerInterface
 */
protected $storeManager;

/**
 * Data constructor.
 * @param Context $context
 * @param \Magento\Framework\App\State $state
 * @param \Magento\Store\Model\StoreManagerInterface $storeManager
 */
public function __construct(
    Context $context,
    \Magento\Framework\App\State $state,
    \Magento\Store\Model\StoreManagerInterface $storeManager
) {
    parent::__construct($context);
    $this->state = $state;
    $this->storeManager = $storeManager;
}

/**
 * @return int
 */
public function resolveCurrentWebsiteId()
{
    if ($this->state->getAreaCode() == \Magento\Framework\App\Area::AREA_ADMINHTML) {
        // in admin area
        /** @var \Magento\Framework\App\RequestInterface $request */
        $request = $this->_request;
        $storeId = (int) $request->getParam('store', 0);
    } else {
        // frontend area
        $storeId = true; // get current store from the store resolver
    }

    $store = $this->storeManager->getStore($storeId);
    $websiteId = $store->getWebsiteId();

    return $websiteId;
}

ফলাফলটি এমন হওয়া উচিত:

  1. স্কোপ সিলেক্টর ব্যাকএন্ড - 0

    স্টোর নির্বাচক ছাড়া ব্যাক

  2. স্কোপ সিলেক্টরের সাথে ব্যাকড - নির্বাচিত ওয়েবসাইট আইডি বা 0 টি না নির্বাচিত হলে (সমস্ত স্টোরের দর্শন)

    স্টোর সিলেক্টরের সাথে ব্যাকএন্ড

  3. সামনের - বর্তমান ওয়েবসাইট আইডি

    সামনের অংশ


আপনি যদি সামনের দিকে শর্ট-ওয়ে সন্ধান করছেন:

আপনি Magento\Store\Model\StoreResolverএই উদ্দেশ্যে ক্লাসটি ব্যবহার করতে পারেন :

/**
 * @var \Magento\Store\Model\StoreResolver
 */
private $storeResolver;

/**
 * @param \Magento\Store\Model\StoreResolver $storeResolver
 */
public function __construct(
    \Magento\Store\Model\StoreResolver $storeResolver
) {
    $this->storeResolver = $storeResolver;
}

/**
 * Returns the current store id, if it can be detected or default store id
 * 
 * @return int|string
 */
public function getCurrentStoreId()
{
    return $this->storeResolver->getCurrentStoreId();
}

এটি সামনের অংশে বর্তমানে নির্বাচিত স্টোর ভিউটি সঠিকভাবে সনাক্ত করে তবে প্রশাসক অঞ্চলের পক্ষে অকেজো।


এটি অ্যাডমিন প্যানেলে কাজ করছে। যাইহোক, আমি এটি চাই সীমান্তে বর্তমান ওয়েবসাইট পাবেন। এই ফাংশনটি সর্বদা ফিরে আসেwebsite_id = 0
থাও ফ্যাম

এই ফাংশনটি উভয় প্রান্ত এবং ব্যাকএন্ডে কাজ করা প্রয়োজন।
থাও ফাম

@ বিল আপনি কোন জায়গায় স্টোর আইডি পাওয়ার চেষ্টা করছেন তা পরিষ্কার করে বলতে পারেন? এটি প্লাগইন বা সম্ভবত পর্যবেক্ষক?
সিয়ারে উখুলেবাউ

হাই @ সিয়ারে উছুখলেবাউ, আমি এটি একটি ক্লাস থেকে পেতে চাই। এই ক্লাসটি অন্য যে কোনও ক্লাস থেকে ডেকে আনা যেতে পারে যেমন: কন্ট্রোলার, মডেল, হেল্পার, ব্লক, ...
থাও ফ্যাম

@ আমি উত্তর আপডেট করার আগে, দয়া করে চেক করুন
সিয়েরে উখখলেবাউ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.