বিভাগ পৃষ্ঠা তৈরি করুন যা সমস্ত বিশেষ মূল্য পণ্য প্রদর্শন করে


12

মূলত, আমি 'বিক্রয় সম্পর্কিত পণ্য' একটি বিভাগ তৈরি করেছি, যা আমি আমার ক্যাটালগের সমস্ত পণ্য স্বয়ংক্রিয়ভাবে নিজের কাছে রাখতে চাই যা তাদের জন্য একটি বিশেষ মূল্য প্রয়োগ করা হয়েছে (ক্যাটালগ> পণ্য পরিচালনা করুন) এর মাধ্যমে। আমি চাই যে পৃষ্ঠাটি স্তরযুক্ত নেভিগেশন এবং বাছাইয়ের ক্ষমতাগুলি বজায় রাখতে পারে যা একটি মানক ম্যাগেন্টো বিভাগের পৃষ্ঠাতে রয়েছে।

দেখে মনে হচ্ছে এটি বেশিরভাগ ম্যাজেন্টো ব্যবহারকারীদের কাছে মূল্যবান হবে এবং আমি আশ্চর্য হয়েছি এটি মূল কার্যকারিতার অংশ হিসাবে অন্তর্ভুক্ত করা হয়নি।

আমি এক ডজন স্ট্যাক এক্সচেঞ্জ উত্তর, ব্লগ পোস্ট এবং ফোরাম চেষ্টা করেছি, এবং এখনও পর্যন্ত কিছুই কাজ করে নি। কারও কি এর জন্য কোনও প্রোগ্রামেটিক সমাধান রয়েছে?

=== সম্পাদনা ===

নীচের মন্তব্যে @ পিএসপাহনের সমালোচনার ভিত্তিতে, আমি অনুরূপ কার্যকারিতা অর্জনের একটি বিকল্প পদ্ধতি অনুসরণ করার সিদ্ধান্ত নিয়েছি। এই বলে যে, আপনি যদি এই লাইনটি অনুসরণ করতে আগ্রহী হন তবে @ স্যান্ডার-ম্যানজেল এমন একটি পদ্ধতি বর্ণনা করেছেন যা পুরোপুরি সম্ভবপর বলে মনে হচ্ছে।


আমার কাছে মনে হয় "স্বয়ংক্রিয়ভাবে সমস্ত বিশেষ দামের পণ্য ধারণ করে" এর প্রয়োজনটি কিছুটা অতিরিক্ত। আমি ধরে নিলাম শেষ ফলাফলটি হ'ল আপনি এটিতে বিশেষ দামের পণ্যগুলির সাথে একটি পৃষ্ঠা চান এবং এটি কোনও বিভাগের পৃষ্ঠার মতো দেখতে পান। এর পরিবর্তে আপনি কেবল নিজের মডেল / সংগ্রহ (বিশেষ মূল্যযুক্ত পণ্যগুলির উপর ভিত্তি করে) তৈরি করতে এবং বিভাগ ভিউ পৃষ্ঠাগুলির উপর ভিত্তি করে সেই সংগ্রহটি টেমপ্লেটে (গুলি) ব্যবহার করতে পারবেন বলে মনে হয়। আমি কেবল একটি বিভাগটি দেখতে পাচ্ছি না যা একটি ভাল সমাধান হিসাবে স্বয়ংক্রিয়ভাবে পপুলেশন হয়, উদাহরণস্বরূপ, আপনি কীভাবে কোনও ব্যবহারকারীকে পরিবর্তন করতে বাধা দেন?
pspahn

@pspahn আপনার প্রতিক্রিয়া জন্য আপনাকে ধন্যবাদ। আমি আপনার সমালোচনা বুঝতে এবং আপনার যুক্তির সাথে একমত। আমি ভাল পরিমাপের জন্য অতিরিক্ত ক্যাটাগরি_স্যাভ_ফরডো পর্যবেক্ষকের সাথে স্যান্ডার ম্যানগেলের বর্ণিত পদ্ধতিটি ব্যবহার করতে পারি, তবে এটি ওভারকিলের মতো বলে মনে হয়। আমি বিকল্প সমাধান নিয়ে এগিয়ে যাব।
রোককোর

@ স্পেসহান - 'আপনি কীভাবে কোনও ব্যবহারকারীকে এটির সংশোধন করতে বাধা দেন' এর সাথে আপনি কী বোঝাতে চেয়েছেন তা আমি বুঝতে পারি না - আপনি আরও কিছুটা ব্যাখ্যা করতে পারেন?
প্রক্সি ব্লু

@ প্রক্সি ব্লু মূলত, আপনি যদি একটি বিভাগ তৈরি করেন এবং পণ্যগুলি স্বয়ংক্রিয়ভাবে পপুলেশন করেন তবে একজন প্রশাসক ব্যবহারকারী কেবল ব্যাকএন্ডে সেই বিভাগে যেতে পারেন এবং ম্যানুয়ালি পণ্যগুলি যুক্ত / মুছে ফেলতে পারেন।
pspahn

@ স্প্যাসন ঠিক আছে, ব্যবহারকারীর সাথে আমি ফ্রন্ট-এন্ড ব্যবহারকারী হিসাবে ভুল বুঝেছি।
প্রক্সি ব্লু

উত্তর:


8

এটি করার সহজ উপায় হ'ল একটি পর্যবেক্ষক এবং ক্রোনজব এর সাথে কাজ করে এমন একটি কাস্টম এক্সটেনশন তৈরি করা।

বিক্রয় পণ্যগুলির জন্য একটি বিভাগ তৈরি করুন। আপনি এইভাবে প্রান্তে সাধারণ ম্যাজেন্টো কার্যকারিতা যেমন স্তরযুক্ত ন্যাভিগেশন ইত্যাদি ব্যবহার করতে পারেন etc.

এই বিভাগে পণ্যগুলি পেতে স্বয়ংক্রিয়ভাবে আমরা পর্যবেক্ষক এবং ক্রোনজব ব্যবহার করব। পর্যবেক্ষকরা catalog_product_save_afterযখন ইভেন্টটি ব্যাকএন্ডে সংরক্ষণ করা হয় তখন ট্রিগার হওয়া ইভেন্টটি পর্যবেক্ষণ করবে । যখন এটি ঘটে তখন আপনি পণ্যটি বিক্রয় বিভাগে রাখতে বা সেখান থেকে অপসারণ করতে হবে কিনা তা নির্ধারণ করার জন্য special_price, special_price_fromতারিখ এবং special_date_toতারিখটি পরীক্ষা করতে পারেন ।

ক্রোনজব সেখানে বিশেষ এবং তারিখের জন্য রয়েছে। প্রতি রাতে মধ্যরাতের পরে প্রথমে সমস্ত পণ্য বিক্রয় বিভাগ খালি করুন। তারপরে একটি বিশেষ মূল্য রয়েছে এবং বিশেষ থেকে এবং তারিখের মধ্যে পড়ে এমন সমস্ত পণ্য পুনরুদ্ধার করতে একটি সংগ্রহ ব্যবহার করুন। যদি তাই হয় তবে তাদের এই বিক্রয় বিভাগে সরিয়ে দিন।


7

@ স্যান্ডারম্যাঞ্জেল প্রদত্ত সমাধানটি শীর্ষস্থানীয়। আমি কিছু কোড দিয়ে এটিকে প্রসারিত করতে সাহায্য করতে পারি, যা আমি বর্তমানে আমার মডিউলটিতে স্বয়ংক্রিয় / গতিশীল বিভাগের পণ্যগুলিতে ব্যবহার করি - যা বিশেষে পণ্যগুলির বিভাগের নিয়মগুলি করার ক্ষমতা রাখে

কোডটি যেদিন চালিত হয়, বিশেষ মূল্য সেট সহ সমস্ত পণ্য পেতে কোডটি একটি মানক পণ্য সংগ্রহকে সামঞ্জস্য করে। আপনি 00:00 এ বিভাগগুলিকে পুনঃবাসিত করতে ক্রোনটিতে এটি ব্যবহার করতে পারেন এবং নিশ্চিত হন যে তারা আপডেট থাকে।

নোট করুন যে কোডটি একটি বৃহত মডিউল থেকে বের করা হয়েছে, সুতরাং আমি এখানে আপনার জন্য প্রাসঙ্গিক অংশগুলি সংক্রামিত করেছি। একটি পরিবর্তনশীল বা দুটি হতে পারে যা থিসি এক্সট্রাক্টটিতে প্রতিনিধিত্ব করা হয় না, তবে এগুলি সহজেই অনুমিত করা যায়, বা কেবল জিজ্ঞাসা করা যায় :)

$ বিভাগের অবজেক্ট হ'ল প্রকৃত বিভাগ যা পণ্যগুলি ধারণ করে। নীচের কোডটি আপনাকে একটি% মানেও ছাড়টি নির্দিষ্ট করার অনুমতি দেয় :)

$collection = $category->getProductCollection();

$todayDate = Mage::app()->getLocale()->date()->toString(Varien_Date::DATE_INTERNAL_FORMAT);
$collection->addAttributeToFilter(array(
    array(
        'attribute' => "special_to_date",
        'null' => true
    ),
    array(
        'attribute' => "special_to_date",
        'from' => $todayDate,
        //'to'      => $todayDate,
        'date' => true
    )
));
$collection->addAttributeToFilter(array(
    array(
        'attribute' => "special_from_date",
        'null' => true
    ),
    array(
        'attribute' => "special_from_date",
        //'from'    => $todayDate,
        'to' => $todayDate,
        'date' => true
    )
));

$collection->addAttributeToSelect('special_price','left');
$collection->addAttributeToSelect('price','left');
$select = $collection->getSelect();

if (strpos($value, '%') > 0) {
    $value = str_replace('%', '', $value);
    $select->where('( 100 - (( at_special_price.value * 100 ) / at_price.value ) )  ' . $operator . ' ' . $value);
} else {
    $select->where('((at_price.value - at_special_price.value)) ' . $operator . ' ' . $value);
}

এখন, লক্ষণীয় যে সংগ্রহটি পণ্যগুলি ফেরত দেবে না, কারণ এতে সাধারণ ক্যাটালগের লিঙ্কগুলি রয়েছে <-> পণ্যের লিঙ্ক টেবিলগুলি। যেহেতু আপনি বর্তমান সংযুক্ত পণ্যগুলিতে আগ্রহী নন, আপনার সংগ্রহের বাইরে টেবিলের সম্পর্কটি পরিষ্কার করতে হবে।

এটি সম্পন্ন করতে আমি নিম্নলিখিত কোডটি ব্যবহার করি:

/**
 * Remove Catalog Product Link elements from collection
 * 
 * @param type $collection
 * @return type
 */
public function removeCatProPart($collection)
{
    $select = $collection->getSelect();
    $fromPart = $select->getPart(Zend_Db_Select::FROM);
    $select->reset(Zend_Db_Select::FROM);

    if (array_key_exists('cat_pro', $fromPart)) {
        unset($fromPart['cat_pro']);
        // also remove any reference to the table in the rest of the query
        $columns = $select->getPart(Zend_Db_Select::COLUMNS);
        $columnRemoved = false;
        foreach ($columns as $columnKey => $column) {
            if ($column[0] == 'cat_pro') {
                unset($columns[$columnKey]);
                $columnRemoved = true;
            }
        }

        if ($columnRemoved) {
            $select->setPart(Zend_Db_Select::COLUMNS, $columns);
        }

        $orderPart = $select->getPart(Zend_Db_Select::ORDER);
        $orderRemoved = false;
        foreach ($orderPart as $orderKey => $order) {
            if ($order[0] == 'cat_pro') {
                unset($orderPart[$orderKey]);
                $orderRemoved = true;
            }
        }

        if ($orderRemoved) {
            $select->setPart(Zend_Db_Select::ORDER, $orderPart);
        }
    }
    $select->setPart(Zend_Db_Select::FROM, $fromPart);
    return $collection;
}

যুক্ত বোনাস হিসাবে, আপনি ক্যাটালগ পণ্য সংগ্রহ সামঞ্জস্য করতে একই টেকনিক ব্যবহার করতে পারেন এবং ক্যাটালগ বিধিগুলির কারণে বিশেষ মোডে থাকা পণ্যগুলি খুঁজে পেতে পারেন:

$storeDate = Mage::app()->getLocale()->storeTimeStamp($this->getStoreId());
$value = $this->getValue();
$conditions = 'price_rule.product_id = e.entity_id AND ';
$conditions .= "(from_time = 0
    OR from_time <= " . $storeDate . ")
    AND (to_time = 0
    OR to_time >= " . $storeDate . ") AND ";
$conditions .= "price_rule.rule_id IN (" . $value . ")";
$collection->getSelect()->joinInner(
        array('price_rule' => $collection->getTable('catalogrule/rule_product')), $conditions);
$collection->setFlag('applied_catalog_rule_id', true);
$collection->setFlag('applied_rule', true);

একবার আপনার কাজ করার সংগ্রহটি শেষ হয়ে গেলে সংগ্রহ থেকে সমস্ত আইডিগুলি সংগ্রহ করতে হবে, অ্যারেটি ফ্লিপ করুন $category->setPostedProducts($products);এবং একটি $ বিভাগ-> সেভ () এল ব্যবহার করুন; আপডেট সম্পূর্ণ করতে।

সম্পূর্ণতার জন্য, এখানে আমার দৈনিক ক্রোন যা গতিশীল বিভাগগুলি আপ-টু-ডেট রাখে। (আবার, এটি এখানে অন্তর্ভুক্ত না করা পদ্ধতিগুলি বোঝায়, তবে আমি নিশ্চিত যে এটি আপনাকে সঠিক দিকে নিয়ে যাবে)

আনন্দ কর :)

public static function rebuildAllDynamic($schedule)
{
    try {
        $tempDir = sys_get_temp_dir() . "/";
        $fp = fopen($tempDir . "dyncatprod_rebuild.lock", "w+");
        if (flock($fp, LOCK_EX | LOCK_NB)) {
            if (Mage::getStoreConfig('dyncatprod/debug/enabled')) {
                   mage::log("DynCatProd - rebuildAllDynamic");
            }
            if (!Mage::getStoreConfig('dyncatprod/rebuild/max_exec')) {
                ini_set('max_execution_time', 3600); // 1 hour
            }
            $categories = Mage::getModel('catalog/category')
                ->getCollection()
                ->addAttributeToSelect('*')
                ->addIsActiveFilter()
                ->addAttributeToFilter('dynamic_attributes', array('notnull' => true));

            foreach ($categories as $category) {
                $products = Mage::helper('dyncatprod')->getDynamicProductIds($category);
                if (is_array($products)) {
                    if (Mage::getStoreConfig('dyncatprod/debug/enabled')) {
                        mage::log("rebuilding :" . $category->getName() . ' ' . $category->getPath() );
                    }
                    $products = array_flip($products);
                    $category->setPostedProducts($products);
                    $category->setIsDynamic(true);
                    $category->save();
                }
            }
            flock($fp, LOCK_UN); 
            unlink($tempDir . "dyncatprod_rebuild.lock");
        } else {
            mage::log('Could not execute cron for rebuildAllDynamic -file lock is in place, job may be running');
        }
    } catch (Exception $e) {
        flock($fp, LOCK_UN); 
        unlink($tempDir . "dyncatprod_rebuild.lock");
        mage::logException($e);
        return $e->getMessage();
    }
}

রেফ: HTTP


5

এখানে একটি সংগ্রহ যা আপনার ক্যাটালগের সমস্ত বিশেষ মূল্য পণ্যগুলির ফলাফল সেট প্রদান করবে যা আপনি একটি পৃষ্ঠায় প্রদর্শন করতে পারেন

$collection = Mage::getResourceModel('catalog/product_collection')
    ->addAttributeToSelect('price')
    ->setStoreId($this->getStoreId());

$date = strtotime(date('Y-m-d')); $current_date = date("Y-m-d hh:mm:ss",$date);

$collection = $collection
    ->addAttributeToFilter('price',
        array('gt'=>0))
    ->addAttributeToFilter('visibility',
        array('neq'=>Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE));

if (Mage::getStoreConfigFlag(Mage_Catalog_Helper_Product_Flat::XML_PATH_USE_PRODUCT_FLAT, $this->getStoreId())){
    $collection = $collection->addAttributeToFilter('special_price',array('lt'=>new Zend_Db_Expr('e.price')));
}
else{
    $collection = $collection->addAttributeToFilter(array(
        array('attribute'=>'special_price','lt'=>new Zend_Db_Expr('at_price.value'))
    ));
}

$collection = $collection->addAttributeToFilter(array(
        array('attribute'=>'special_from_date','lteq'=>$current_date),
        array('attribute'=>'special_from_date','eq'=>''),
        array('attribute'=>'special_from_date','null'=>true)
    ),'','left')
    ->addAttributeToFilter(array(
        array('attribute'=>'special_to_date','gteq'=>$current_date),
        array('attribute'=>'special_to_date','eq'=>''),
        array('attribute'=>'special_to_date','null'=>true)
            ),'','left');

$collection->getSelect()->group('e.entity_id');

return $collection;

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

আপনি যদি কিছু ব্যয় করতে পারেন তবে আমি Magento সংযোগের জন্য নিম্নলিখিত বর্ধনের সুপারিশ করব

ম্যাজেন্টো 1 - এর জন্য:

http://www.magentocommerce.com/magento-connect/dynamic-sale-category.html ( http://www.scommerce-mage.co.uk/magento-dynamic-sale-category.html )

ম্যাজেন্টো 2 - এর জন্য:

https://www.scommerce-mage.com/magento2-dynamic-sale-category.html

আশা করি এটা সাহায্য করবে!

চিয়ার্স এস


0

আমি ম্যাজেন্টো 2 এর জন্য একটি এক্সটেনশন তৈরি করেছি যা স্তরযুক্ত নেভিগেশনের সাথে এটির নিজস্ব নিয়ামকের অধীনে বিশেষত পণ্যগুলি প্রদর্শন করে। সুতরাং বিভাগ বা ক্রোন প্রয়োজন হয় না।

https://github.com/DominicWatts/Special

আশা করি এটি কাউকে সাহায্য করবে

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