একটি কাস্টম ইমেজ টাইপ সহ "ইমেজ টাইপ" নামে জটিল টাইপ প্রসারিত করা


22

আমি বর্তমানে যে মডিউলটির বিকাশ করছি তার লক্ষ্য হ'ল "ওপেনগ্রাফ_মাজ" নামে একটি কাস্টম চিত্র প্রকার যুক্ত করা। আমি একটি নতুন EAV বৈশিষ্ট্য যুক্ত করেছি যদিও আমার ইনস্টলডেটা.এফপি স্ক্রিপ্টটি ভাল কাজ করে। আমি এখন ম্যাজেন্টো 2 ব্যাকএন্ডে লগইন করে এবং কোনও পণ্য পরিবর্তিত করার সময় আমি পণ্যের চিত্রগুলি আপলোড বা সম্পাদনার সময় চিত্র "টাইপ ওপেনগ্রাফ_মিজাজ" চয়ন করতে পারি।

তবে, সম্মুখভাগে আমি এই চিত্রটি প্রদর্শন করতে চাই। অতএব আমি আমার মডিউলে নিম্নলিখিত বিষয়বস্তু সহ একটি etc / view.xML ফাইল তৈরি করেছি:

<?xml version="1.0"?>
<view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Esites_SEO:etc/custom.xsd">
    <media>
        <images module="Magento_Catalog">
            <image id="opengraph_image" type="opengraph_image">
                <width>265</width>
                <height>265</height>
            </image>
        </images>
    </media>
</view>

তবে এখন আমি নিম্নলিখিত ত্রুটি পেয়েছি:

Invalid XML in file /var/www/html/vhosts/magento2/app/code/Esites/SEO/etc/view.xml:
Element 'image', attribute 'type': [facet 'enumeration'] The value 'opengraph_image' is not an element of the set {'thumbnail', 'small_image', 'image', 'swatch_image', 'swatch_thumb'}.
Line: 5

Element 'image', attribute 'type': 'opengraph_image' is not a valid value of the local atomic type.
Line: 5

কারণটি মনে হচ্ছে এটিতে আমার কাস্টম.এসএসডি লোড হবে না: app/code/Esites/SEO/etc/custom.xsdযেখানে আমি ওপেনগ্রাফ_ইমেজ সংজ্ঞায়িত করি। পরিবর্তে এটি কেবল এটির ডিফল্ট এক্সএসডি ফাইলটি লোড করা মনে হচ্ছে:vendor/magento/framework/Config/etc/view.xsd

আমার কাস্টম.এসএসডি এর বিষয়বস্তু হ'ল এই আসল ভিউ.এসএসডি এর একটি অনুলিপি (পরীক্ষার উদ্দেশ্যে) যেখানে আমি line৫ লাইনে নিম্নলিখিতটি যুক্ত করেছি:

 <xs:enumeration value="opengraph_image"/>

যদি আমি উপরের লাইনটি মূল ভিউ.এসএসডি ফাইলে অন্তর্ভুক্ত করি তবে অগ্রভাগ ত্রুটি ছাড়াই কাজ করে। আমি ডকুমেন্টেশনটি অনুসরণ করেছি: http://devdocs.magento.com/guides/v2.0/existance-dev-guide/build/XSD-XML-بودation.html এবং আমার পথগুলি সেই পৃষ্ঠার তথ্য অনুযায়ী নির্মিত build ক্যাশে একাধিকবার সাফ করা হয়েছে।

আমি কী মিস করছি?


আপনি কি পরিবর্তন module="Magento_Catalog" করার চেষ্টা করেছেন module="Esites_SEO"?
রাফেল ডিজিটাল পিয়ানিজমে

উত্তর:


9

Magento2 লোড ডিফল্ট view.xsd কারণ ConfigView রিডার ব্যবহার lib/internal/Magento/Framework/Config/SchemaLocator.phpএবং এটি ডিফল্ট ফেরৎview.xsd

$this->schema = $urnResolver
    ->getRealPath('urn:magento:framework:Config/etc/view.xsd');`

নীচে অনুসরণের পদক্ষেপগুলি দ্বারা আমি এটিকে ওভাররাইড করতে সক্ষম হয়েছি:

  • উদাহরণস্বরূপ Magento_SampleMinimal নতুন এক্সটেনশন তৈরি করুন
  • এতে প্লাগইন সংজ্ঞা তৈরি করুন {MODULE}/etc/di.xml

    <?xml version="1.0"?>
    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
        <type name="Magento\Framework\Config\SchemaLocator">
            <plugin name="SampleMinimal_SchemaLocator" type="Magento\SampleMinimal\Model\Plugin\SchemaLocator" sortOrder="1"/>
        </type>
    </config>
    
  • {মোডিয়ল} / মডেল / প্লাগইন / সেকায়োলোকেটার.এফপি-তে প্লাগইন তৈরি করুন

    <?php
    namespace Magento\SampleMinimal\Model\Plugin;
    
    use Magento\TestFramework\ObjectManager;
    
    class SchemaLocator
    {
        /**
         * After Get Schema
         *
         * @param \Magento\Framework\Config\SchemaLocator $schemaLocator
         * @param string $result
         * @return array
         */
        public function afterGetSchema(\Magento\Framework\Config\SchemaLocator $schemaLocator, $result)
        {
            $result = sprintf(realpath(__DIR__ . '/../../etc/view.xsd'));
            return $result;
        }
    }
    

    Magento 2.0 এর জন্য আপডেট Update সংস্করণ

  • অনুলিপি lib/internal/Magento/Framework/Config/etc/view.xsdকরুন{MODULE}/etc/view.xsd

ম্যাজেন্টো ২.১ এর জন্য। সংস্করণ, কপিVendor/Magento/Framework/Config/etc/view.xsdকরুন{MODULE}/etc/view.xsd * সম্পাদনা করুন{MODULE}/etc/view.xsdএবং নতুন ধরণের যুক্তকরুনmedia_attribute


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

এটাই সঠিক সমাধান। সেই ইয়ারোস্লাভের জন্য ধন্যবাদ গাদা।
মদিনা

এই মহান, আপনাকে ধন্যবাদ! তবে, আমি চারপাশে প্লাগইন লেখার পরামর্শ দিচ্ছি Magento\Framework\Config\Dom\UrnResolverকারণ এমন জায়গাগুলি রয়েছে যেগুলি কেবল এটির পরিবর্তে না গিয়ে সরাসরি ব্যবহার করে SchemaLocator
কুইকশিফ্টিন

0

এটি ম্যাজেন্টো 2 বাগের সাথে একত্রে ডিজাইনের ত্রুটি বলে মনে হচ্ছে। আমি এখানে একটি বাগ প্রতিবেদন তৈরি করেছি: https://github.com/magento/magento2/issues/10161

আপনি যদি ওপেনগ্রাফ_ইমজ আউটপুট করার জন্য চিত্রের নির্মাতাকে সরাসরি কোনও টেম্পলেটে ব্যবহার করছেন তবে কাস্টম বৈশিষ্ট্যগুলিতে (ব্যবহার করে Magento\Catalog\Block\Product\ImageBuilder::setAttributesবা তৃতীয় প্যারামিটার ব্যবহার করে Magento\Catalog\Block\Product\View::getImage) উত্তরণ করা আরও ভাল সমাধান ।

যাইহোক, এটি কাজ করবে না (আমার বাগ্রেপোর্ট দেওয়া হয়েছে), সুতরাং আপনাকে createক্যাটালগ চিত্র সহায়তাকারীকে এই বৈশিষ্ট্যগুলি পাস করতে ইমেজবিল্ডারের পদ্ধতিটি ওভাররাইড করতে হবে।


0

ইয়ারোস্লাভের উত্তরের চেয়ে সহজ উপায় আছে is আপনার মডিউলের di.xML এ কন্সট্রাক্টর পরামিতিগুলি স্কিমালোকেটরে পরিবর্তন করা সম্ভব। ভালো লেগেছে:

<type name="Magento\Framework\Config\SchemaLocator" >
    <arguments>
        <argument name="realPath" xsi:type="string">urn:magento:module:VendorName_ModuleName:etc/view.xsd</argument>
    </arguments>
</type>

প্লাগিনের দরকার নেই।


সাবধান, সেই সমাধানটি তখনই কাজ করে যদি আপনার কাছে স্কিমালোকেটারে যুক্তি হিসাবে P রিয়েলপথ থাকে। ম্যাজেন্টো 2 সংস্করণে নির্ভর করে।
পোল রাওয়ালিতের

-1

আপনাকে সংশোধন বা ওভাররাইড করার দরকার নেই view.xsd, এই ফাইলটি কেবল বৈধতার জন্য।
আমি সম্প্রতি নিম্নলিখিতগুলি করে আমার সমাধানটি প্রয়োগ করেছি: একটি চিত্র ক্যাটালগের বৈশিষ্ট্য তৈরি করুন (আসুন বলে নেওয়া যাক যে নতুন বৈশিষ্ট্য আইডি 162)। বৈশিষ্ট্যটি তৈরি করার পরে আপনি এটি কোনও ক্যাটালগ চিত্রে প্রয়োগ করতে সক্ষম হবেন। এখন আপনাকে অবশ্যই এটিতে সঠিক মডেল এবং সম্মুখ প্রান্তের দৃশ্যমানতা প্রয়োগ করতে হবে। আপনি প্রোগ্রামগতভাবে বা এই গাইড অনুসরণ করতে পারেন।

  1. আপনার ডেটাবেস পিএইচপিএমআইএডমিন বা মাইএসকিউএল দিয়ে খুলুন এবং ছোট_আইমেজের মতো কোনও সিস্টেম অ্যাট্রিবিউটকে মিরর দেওয়ার চেষ্টা করুন

    use magento2_database_name;
    SELECT * FROM  `eav_attribute`;
    UPDATE `magento2_database_name`.`eav_attribute` SET `frontend_model` = 'Magento\\Catalog\\Model\\Product\\Attribute\\Frontend\\Image' WHERE  `eav_attribute`.`attribute_id` =162;
    SELECT * FROM  `catalog_eav_attribute`;
    UPDATE `magento2_database_name`.`catalog_eav_attribute` SET `is_visible` = '1', 'using_in_product_listing' = '1' WHERE `catalog_eav_attribute`.`attribute_id` =162;
    
  2. যান www_root/magento2_root/app/design/frontend/Theme/package/etc/view.xmlএবং আপনার নতুন চিত্র প্রকার যোগ করুন:

        <image id="opengraph_image" type="opengraph_image">
            <width>265</width>
            <height>265</height>
        </image>
    
  3. নতুন চিত্রের ধরণটি যোগ করে টেমপ্লেট ফাইলগুলি আপডেট করুন www_root/magento2_root/app/design/frontend/Theme/package/Magento_Catalog/templates/product/
  4. আপনার ক্যাশে পরিষ্কার করুন এবং আপনি এটি প্রথম প্রান্তে দেখতে পাবেন।

এটি বিভাগের পণ্য তালিকাতে হোভার ইমেজের জন্য আমার পক্ষে কাজ করেছে, আশা করি এই সহায়তার সাহায্য।


thx 7ochem, এটি আমার প্রথম আসল পোস্ট।
JROCA22


@ বারবাজুল কেবল তখনই যদি আপনি বিকাশকারী মোডে থাকেন আমি যদি সঠিকভাবে স্মরণ করি ..
এরফান

@ ইরফান এটি হতে পারে। আমি চেক করিনি, সত্যই। তবে তবুও এটি একটি চিহ্ন যে এটি আপনি কীভাবে করবেন বলে মনে করা হচ্ছে না বা সেই নির্দিষ্ট
এক্সএসডি

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