ম্যাজেন্টো 2 তে প্রোগ্রামিয়ালি কোনও সিএমএস ব্লক যুক্ত করবেন কীভাবে?


13

ইনস্টল / আপগ্রেড স্ক্রিপ্টের মাধ্যমে আমার একটি সিএমএস ব্লক যুক্ত করা দরকার। নীচের স্ক্রিপ্টে যেমন দেখানো হয়েছে "সাধারণ" সিএমএস পৃষ্ঠা কীভাবে যুক্ত করবেন তা ইতিমধ্যে আমি নির্ধারণ করেছি। তবে যেহেতু আমি গুগলে বা এখানে ম্যাজেন্টো 2 এর কোডে সিএমএস ব্লক যুক্ত করার কোনও উপায় খুঁজে পাচ্ছি না, তাই আমি বেশ জ্যাম পেয়েছি।

namespace [Vendor]\[Module]\Setup;

use Magento\Cms\Model\Page;
use Magento\Cms\Model\PageFactory;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\UpgradeDataInterface;

class UpgradeData implements UpgradeDataInterface
{
    /**
     * Page factory.
     *
     * @var PageFactory
     */
    private $pageFactory;

    /**
     * Init.
     *
     * @param PageFactory $pageFactory
     */
    public function __construct(PageFactory $pageFactory)
    {
        $this->pageFactory = $pageFactory;
    }

    /**
     * Upgrade.
     *
     * @param ModuleDataSetupInterface $setup
     * @param ModuleContextInterface $context
     */
    public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        $setup->startSetup();

        if (version_compare($context->getVersion(), '0.0.1') < 0) {
            $testPage = [
                'title' => 'Test page title',
                'identifier' => 'test-page',
                'stores' => [0],
                'is_active' => 1,
                'content_heading' => 'Test page heading',
                'content' => 'Test page content',
                'page_layout' => '1column'
            ];

            $this->pageFactory->create()->setData($testPage)->save();
        }

        $setup->endSetup();
    }
}

আমি বুঝেছি $testPageঅ্যারেতে সংজ্ঞায়িত সমস্ত মানের দরকার নেই , তাই আমি এটিকে নীচে থেকে নামিয়ে দিয়েছি:

$testPage = [
    'title' => 'Test block title',
    'identifier' => 'test-block',
    'stores' => [0],
    'is_active' => 1
    'content' => 'Test block content'
];

কেউ কি জানেন যে এই পরীক্ষার পৃষ্ঠাটিকে একটি পরীক্ষা ব্লক করতে আমার কী পরিবর্তন করতে হবে?

দ্রষ্টব্য: আমি আমার স্ক্রিপ্টটিতে অবস্থিত ম্যাজেন্টো 2 সিএমএস মডিউলটিতে ডেটা ইনস্টল ডেটা স্ক্রিপ্টের ভিত্তিতে তৈরি করেছি vendor/magento/module-cms/Setup/InstallData.php


এটি কোনও "সিএমএস ব্লক" নয় বরং একটি "সিএমএস পৃষ্ঠা" .. বিভ্রান্তিকর শিরোনাম ..
ওজেডিজি

@OZZIE এটি নয় আপনি যদি বিবরণটি পড়েন তবে আপনি জানতেন যে উপরের কোডটি আসলে একটি পৃষ্ঠা যুক্ত করা, তবে প্রশ্নটি এটি একটি সিএমএস ব্লক ইনস্টলারে পরিবর্তন করা।

উত্তর:


20

এটি আপনার শ্রেণিতে যুক্ত করুন:

private $blockFactory;

এবং আপনার নির্মাতাকে এটির মতো দেখান:

public function __construct(
    PageFactory $pageFactory,
    \Magento\Cms\Model\BlockFactory $blockFactory
  )
{
    $this->pageFactory = $pageFactory;
    $this->blockFactory = $blockFactory;
}

এমনকি $pageFactoryআপনার যদি প্রয়োজন না হয় তবে নির্ভরতাও সরিয়ে ফেলতে পারেন।

তারপরে প্রতিস্থাপন করুন:

$testPage = [
    'title' => 'Test page title',
    'identifier' => 'test-page',
    'stores' => [0],
    'is_active' => 1,
    'content_heading' => 'Test page heading',
    'content' => 'Test page content',
    'page_layout' => '1column'
];

$this->pageFactory->create()->setData($testPage)->save();

সঙ্গে

$testBlock = [
    'title' => 'Test block title',
    'identifier' => 'test-block',
    'stores' => [0],
    'is_active' => 1,
];
$this->blockFactory->create()->setData($testBlock)->save();

2
আমার ভিতরে থাকা কিছু আমাকে বলে যে আমি এটি নিজেই বের করে নিতে পারি। সুন্দর এবং সহজ উত্তর। আপনাকে অনেক ধন্যবাদ. পিএস: আমি আপনার জবাব দিতে চাই, তবে আমার খ্যাতি আমাকে দেয় না।

সহজ কিন্তু কার্যকর। @ কিসহাক আমি আপনার জন্য এটি উত্সাহিত করেছি: পি
ওচেম

@ কিসহ্যাক ফ্যাক্টরিগুলির পরিবর্তে ডেটা ইন্টারফেস (ব্লকআইন্টারফেস) এবং সংগ্রহশালা (ব্লকরেপোসিটারি ইন্টারফেস) ব্যবহার করুন।
ভাসিলি বুড়ালাকু

@ ভাসিলিবার্লাকু আপনি ঠিক বলেছেন আমি এটি 1.5 বছর আগে লিখেছিলাম যখন ভান্ডারগুলি এখনও শেষ হয়নি।
মারিয়াস

13

আপনি নিম্নলিখিত সমাধান চেষ্টা করতে পারেন:

কনস্ট্রাক্টরে 2 ক্লাস যুক্ত করুন:

/**
 * @var \Magento\Cms\Model\BlockFactory
 */
protected $blockFactory;

/**
 * @var \Magento\Cms\Model\BlockRepository
 */
protected $blockRepository;

/**
 * @param PageFactory $resultPageFactory
 * @param \Magento\Cms\Model\BlockFactory $blockFactory
 * @param \Magento\Cms\Model\BlockRepository $blockRepository
 */
public function __construct(
    PageFactory $resultPageFactory,
    \Magento\Cms\Model\BlockFactory $blockFactory,
    \Magento\Cms\Model\BlockRepository $blockRepository
) {
    $this->resultPageFactory = $resultPageFactory;
    $this->blockFactory = $blockFactory;
    $this->blockRepository = $blockRepository;
}

এবং সেগুলি নিম্নলিখিত উপায়ে ব্যবহার করুন:

$data = [
    'title' => 'Test block title',
    'identifier' => 'test-block',
    'stores' => ['0'],
    'is_active' => 1,
    'content' => 'Test block content'
];
$newBlock = $this->blockFactory->create(['data' => $data]);
$this->blockRepository->save($newBlock);

কোডটি কাজ করছে। এই ব্লকের ফলাফল এখানে:

এখানে চিত্র বর্ণনা লিখুন


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

0

যদি আপনার মডিউলটির আপগ্রেড প্রয়োজন হয় তবে আপগ্রেডডাটা.এফপি ব্যবহার করুন এবং নীচের পদক্ষেপগুলি অনুসরণ করুন।

  1. মডিউল.এক্সএমএল- এ setup_version বৃদ্ধি করুন
  2. গোটো সেটআপ ডিরেক্টরি এবং আপগ্রেডডাটা.এফপি তৈরি করুন
  3. এর নির্ভরতা নীচে হিসাবে আমদানি করুন,

    namespace Vendor\YourModule\Setup;
    
    use Magento\Framework\Setup\UpgradeDataInterface;
    use Magento\Framework\Setup\ModuleContextInterface;
    use Magento\Framework\Setup\ModuleDataSetupInterface;
    use Magento\Cms\Model\BlockFactory;
    
    class UpgradeData implements UpgradeDataInterface {
    
    private $blockFactory;
    
    public function __construct(LoggerInterface $logger, BlockFactory $blockFactory) {
        $this->blockFactory = $blockFactory;
    }
    
    public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context) {
    
        $setup->startSetup();
    
        if (version_compare($context->getVersion(), '1.1.0') < 0) {
            try{
              $staticBlockInfo = [
                        'title' => 'Title of Sample block',
                        'identifier' => 'sample_block',
                        'stores' => ['0'],
                        'is_active' => 1,
                        'content' => 'This is the sample block content'
                      ];
                $this->blockFactory->create()->setData($staticBlockInfo)->save();
            }catch (Exception $e){
                echo $e->getMessage();
            }
         }
    
         $setup->endSetup();
       }
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.