কোথা থেকে আসে?


27

দ্রষ্টব্য: আপনি যদি পিএইচপি কোড দ্বারা পণ্যগুলি সম্পাদনা করে থাকেন তবে এগুলি পরে অ্যাডমিনে পুনরায় ইনডেক্স করুন, নীচে আমার মতো দেখাচ্ছেন না কেন তা চেষ্টা করার জন্য আপনার নিজের ঘন্টা বাঁচান ...

আমি চেনাশোনাগুলিতে ঘুরে বেড়াচ্ছি যে কীভাবে is_salableকোনও পণ্যের জন্য সেট করা আছে তা নিয়ে কাজ করার চেষ্টা করছি এবং এখন কেন আমার পণ্যগুলি প্রদর্শিত হচ্ছে work

কোডটিতে আমি কেবলমাত্র একটি জায়গা পেয়েছি যা এটি সেট করে:

$salable = $this->isAvailable();

তবে কীভাবে বা কোথা থেকে এটি পাওয়া যায় সে সম্পর্কে আমি কাজ করতে পারি না, যখন আমি isAvailableএটি অনুসরণ করি তখন মনে হয় এটি প্রায় ফিরে ফিরে আসে ...

/app/code/core/Mage/Catalog/Model/Product.php

    public function isSalable()
    {
        Mage::dispatchEvent('catalog_product_is_salable_before', array(
            'product'   => $this
        ));

        $salable = $this->isAvailable();

    $object = new Varien_Object(array(
        'product'    => $this,
        'is_salable' => $salable
    ));
    Mage::dispatchEvent('catalog_product_is_salable_after', array(
        'product'   => $this,
        'salable'   => $object
    ));
    return $object->getIsSalable();
}

নিম্নলিখিতটি - এটি-> উপলভ্য () এখান থেকে এটি কয়েকটি লাইনে চলেছে:

**public function isAvailable()
{ 
    return $this->getTypeInstance(true)->isSalable($this);
}**

এরপরে এটি অ্যাপ্লিকেশন / কোড / কোর / ম্যাজ / ক্যাটালগ / মডেল / পণ্য / প্রকার / কনফিগারযোগ্য.এফপি এর আইসকেলেবল

public function isSalable($product = null)
{
    $salable = parent::isSalable($product);

    if ($salable !== false) {
        $salable = false;
        if (!is_null($product)) {
            $this->setStoreFilter($product->getStoreId(), $product);
        }
        foreach ($this->getUsedProducts(null, $product) as $child) {
            if ($child->isSalable()) {
                $salable = true;
                break;
            }
        }
    }

    return $salable;
}

যা পিতামাতাকে কল করে: / অ্যাপ্লিকেশন / কোড / কোর / ম্যাজ / চ্যাটালগ / মডেল / প্রোডাক্ট / টাইপ / অ্যাবস্ট্র্যাক্ট.এফপি এর আইস্যাবলযোগ্য:

public function isSalable($product = null)
{
    $salable = $this->getProduct($product)->getStatus() == Mage_Catalog_Model_Product_Status::STATUS_ENABLED;
    if ($salable && $this->getProduct($product)->hasData('is_salable')) {
        $salable = $this->getProduct($product)->getData('is_salable');
    }
    elseif ($salable && $this->isComposite()) {
        $salable = null;
    }

    return (boolean) (int) $salable;
}

কোনটি কেবল is_saleable মানটিতে ডেটা কল / পেতে পারে?!?! আমি কি ঠিক ট্র্যাক করেছি? এই মানটি কোথা থেকে আসছে?

আমি_সেসেবলের জন্য আমার ইনস্টলেশনটিতে একটি পুনরাবৃত্ত গ্রিপ জারি করেছি, অবশ্যই এটি যেখানে সেট করা আছে সেখানে কোনও লাইন প্রদর্শন করা উচিত তবে আমি এখনই কোনও দেখতে পাচ্ছি না:

grep -r is_salable *
app/code/core/Mage/CatalogInventory/Model/Stock/Status.php:            $object = new Varien_Object(array('is_in_stock' => $product->getData('is_salable')));
app/code/core/Mage/XmlConnect/Block/Wishlist.php:                $itemXmlObj->addChild('is_salable', (int)$item->getProduct()->isSalable());
app/code/core/Mage/XmlConnect/Block/Catalog/Product.php:            $item->addChild('is_salable', (int)$product->isSalable());
app/code/core/Mage/XmlConnect/Block/Cart/Crosssell.php:                $itemXmlObj->addChild('is_salable', 0);
app/code/core/Mage/XmlConnect/Block/Cart/Crosssell.php:                $itemXmlObj->addChild('is_salable', (int)$product->isSalable());
app/code/core/Mage/Catalog/Model/Product.php:        Mage::dispatchEvent('catalog_product_is_salable_before', array(
app/code/core/Mage/Catalog/Model/Product.php:            'is_salable' => $salable
app/code/core/Mage/Catalog/Model/Product.php:        Mage::dispatchEvent('catalog_product_is_salable_after', array(
app/code/core/Mage/Catalog/Model/Product.php:        if ($this->hasData('is_salable')) {
app/code/core/Mage/Catalog/Model/Product.php:            return $this->getData('is_salable');
app/code/core/Mage/Catalog/Model/Product/Type/Abstract.php:        if ($salable && $this->getProduct($product)->hasData('is_salable')) {
app/code/core/Mage/Catalog/Model/Product/Type/Abstract.php:            $salable = $this->getProduct($product)->getData('is_salable');

পাওয়া গেছে:

grep -r setIsSalable *
app/code/core/Mage/CatalogInventory/Model/Stock/Status.php:        $product->setIsSalable($stockStatus);
app/code/core/Mage/CatalogInventory/Model/Stock/Status.php:                    $product->setIsSalable($status);

এটি সেটসেইসলেবল ছিল যা আমি কেবল সেট আইসসেলেবলের চেয়ে সন্ধান করার জন্য ভাবি / জানি না

উত্তর:


18

isAvailable() এটা এমন দেখতে:

public function isAvailable()
{
    return $this->getTypeInstance(true)->isSalable($this)
        || Mage::helper('catalog/product')->getSkipSaleableCheck();
}

এর অর্থ হ'ল পদ্ধতির ফলাফল পণ্যের ধরণের উপর নির্ভর করে।
প্রতিটি পণ্যের ধরণের একটি isSalable()পদ্ধতি রয়েছে:

  • Mage_Catalog_Model_Product_Type_Grouped::isSalable() - গ্রুপযুক্ত পণ্য জন্য
  • Mage_Catalog_Model_Product_Type_Configurable::isSalable() - কনফিগারযোগ্য পণ্যগুলির জন্য
  • Mage_Catalog_Model_Product_Type_Abstract::isSalable()- সমস্ত পণ্যের প্রকারের প্রসারিত হওয়ায় পণ্য প্রকারের জন্য Mage_Catalog_Model_Product_Type_Abstract
    আমি মনে করি যে কলটি $this->getTypeInstance(true)আপনাকে বিভ্রান্ত করেছে। পদ্ধতিটি getTypeInstance()পণ্যের মডেলটির উদাহরণ দেয় না, তবে কোনও পণ্যের ধরণের উদাহরণ দেয়।

[সম্পাদনা]
একটি সাধারণ পণ্য জন্য এটি বলা হয় Mage_Catalog_Model_Product_Type_Grouped::isSalable()। এই পদ্ধতিটি পণ্যটি সক্ষম কিনা তা পরীক্ষা করে। তা না হলে falseফেরত দেওয়া হয়। যদি এটি সক্ষম করা থাকে, তবে এটির এমন কোনও সম্পত্তি আছে is_salableযা আপনার পর্যবেক্ষকদের দ্বারা সেট করা যেতে পারে তা এটি পরীক্ষা করে।
যদি এর মধ্যে এমন সম্পত্তি না থাকে তবে এটি পণ্যের ধরণের উদাহরণটি পরীক্ষা করে $this->isComposite()। যদি তা হয় তবে তা বিক্রয়যোগ্য নয়।
কনফিগারযোগ্য পণ্যগুলির জন্য এটি পরীক্ষা করে তোলে যে উপরের শর্তগুলি পূরণ হয়েছে কিনা এবং যদি কনফিগারযোগ্য পণ্য সম্পর্কিত যা কোনও বিক্রয়ের যোগ্য (যদি উপরের শর্তগুলির সাথে আবার)
এর সাথে সম্পর্কিত একটি সাধারণ পণ্য থাকে তবে এটি একইভাবে গ্রুপযুক্ত পণ্যগুলির জন্য করা হয় তবে অন্যভাবে।

উপসংহারে is_salableঅস্তিত্ব আছে না। তবে কেবলমাত্র যদি আপনার কোনও পর্যবেক্ষক থাকেন যা পণ্যটি বিক্রি করা যায় কিনা তা যাচাই করার সময় সেই সম্পত্তিটি বিবেচনায় নেওয়া উচিত সেট করে।
এখানে মূলটি থেকে একটি উদাহরণ দেওয়া হয়েছে: পদ্ধতিটি একই Mage_CatalogInventory_Model_Stock_Status::assignProduct()কলটি কল করে । শেষটিকে ইভেন্ট দ্বারা ডাকা হয় ।$product->setIsSalable()
Mage_CatalogInventory_Model_Stock_Status::addStockStatusToProducts
catalog_product_collection_load_after


আপনার সাহায্যের জন্য আবারও অনেক ধন্যবাদ, আমি আইস্যাবলযোগ্য এবং কনফিগারেশন.এফপি এর আইস্যাবলকে পাওয়া যায় যা কেবল অ্যাবস্ট্রাক্ট.এফপি'র আইস্যালেবলকে কল করে তবে এটি যা করে তা 'is_salable' চেক করে তবে আমি এর কোনও স্থাপনা পাই না ?? আমি উপরে আমার কোড ট্রেইল যুক্ত করব।
হেডেন থ্রিং

আমার প্রশ্নের সাথে যুক্ত হয়েছে
হেডেন থ্রিং

2
হ্যা এখানে. আমি আমার উত্তরে এটি উল্লেখ করেছি catalog_product_collection_load_after। তবে এটি কেবল একটি উদাহরণ। রয়েছে cataloginventory/observer::addInventoryDataযে কল assignProductযে সেট is_salable। অন্যরাও থাকতে পারে তবে আমি সবার সন্ধান করি নি।
মারিয়াস

1
এটি করার জন্য আমার কাছে কোনও নির্ভরযোগ্য পদ্ধতি নেই। এই সমস্ত ইভেন্টগুলি catalog_product_পর্যবেক্ষকদের দ্বারা ডাকা পদ্ধতিগুলি দিয়ে শুরু এবং ডিবাগ করা সমস্ত ইভেন্ট পান get এবং দেখুন যে কোনও কল করেছে setIsSalableবাsetData('is_salable')
মারিয়াস

1
এক্সএমএল সংযোগ আপনাকে আপনার মোবাইল অ্যাপ্লিকেশনটিকে আপনার ওয়েবসাইটের সাথে সংযোগ করতে দেয়। বাদ দাও.
মারিয়াস


0

যদি পুনর্নির্মাণের পরে এবং ডিবাগিংয়ের পরে যদি শেষ হয় না - এবং আপনার কনফিগারযোগ্য পণ্যটি এখনও স্টক ছাড়াই প্রদর্শিত হচ্ছে তবে সমস্ত স্টোরের দৃশ্যে সমস্ত সরল ব্যক্তির স্ট্যাটাসটি সক্ষম করাতে সেট করা আছে তা নিশ্চিত করুন। আমি কেবল দু'ঘন্টা সময় নষ্ট করেছিলাম কেন আমি কনফিগারযোগ্য হিসাবে কেন স্টক আউট ছিল না কেন, যতক্ষণ না আমি সমস্ত স্টোরের ভিউ পরীক্ষা করে দেখেছি এবং কোনও শরীরের অবস্থানটি অক্ষম করে দিয়েছে।

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