“İmageType” adlı complexType'ı özel bir görüntü türüyle genişletme


22

Geliştirmekte olduğum modülün amacı, "opengraph_image" adlı özel bir resim türü eklemektir. Her şey iyi çalışan InstallData.php betiğim olsa yeni bir EAV özelliği ekledim. Şimdi Magento2 arka paneline giriş yaptığımda ve bir ürünü değiştirdiğimde, ürün resimlerini yüklerken veya düzenlerken "opengraph_image" resim türünü seçebilirim.

Ancak, ön uçta bu resmi görüntülemek istiyorum. Bu nedenle, modülümde etc / view.xml dosyasını aşağıdaki içerikle oluşturdum:

<?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>

Ancak şimdi aşağıdaki hatayı alıyorum:

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

Sebebim, custom.xsd'yi içinde bulunduğu görünmüyor: app/code/Esites/SEO/etc/custom.xsdnerede opengraph_image. Bunun yerine, sadece varsayılan XSD dosyasını yüklemek gibi görünüyor:vendor/magento/framework/Config/etc/view.xsd

Custom.xsd'nin içeriği, bu orijinal view.xsd'nin bir kopyasıdır (sınama amacıyla).

 <xs:enumeration value="opengraph_image"/>

Özgün görünüm.xsd dosyasına yukarıdaki satırı eklersem, ön uç hatasız çalışır. Belgeleri şu adresten takip ettim: http://devdocs.magento.com/guides/v2.0/extension-dev-guide/build/XSD-XML-validation.html ve yollarım bu sayfadaki bilgilere göre oluşturuluyor. Önbellek birden çok kez temizlendi.

Neyi kaçırıyorum?


Eğer değiştirmeyi denediniz mi module="Magento_Catalog" hiç module="Esites_SEO"?
Raphael, Digital Pianism'de

Yanıtlar:


9

Magento2 varsayılan view.xsd dosyasını yükler, çünkü ConfigView Reader kullanıyor lib/internal/Magento/Framework/Config/SchemaLocator.phpve varsayılana dönüyorview.xsd

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

Aşağıdaki adımları izleyerek geçersiz kılmayı başardım:

  • Yeni uzantı oluşturun, örneğin Magento_SampleMinimal
  • Eklenti tanımı içinde oluşturun {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>
  • {MODULE} /Model/Plugin/SchemaLocator.php içinde eklenti oluşturun

    <?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 Güncellemesi . versiyon

  • Kopya lib/internal/Magento/Framework/Config/etc/view.xsdiçin{MODULE}/etc/view.xsd

Magento için 2.1. versiyon, kopyalaVendor/Magento/Framework/Config/etc/view.xsdiçin{MODULE}/etc/view.xsd * Edit{MODULE}/etc/view.xsdve yeni türü eklememedia_attribute


Ciddi misin .. Bu tek yol mu? Overkill gibi görünüyor ve muhtemelen XSD
Erfan

Bu doğru çözüm. Bunun için teşekkürler Yaroslav.
medina

Bu harika, teşekkürler! Bununla birlikte, Eklentiyi Magento\Framework\Config\Dom\UrnResolver, yerine doğrudan geçmek yerine kullanan yerler olduğu için yazmanızı tavsiye ederim SchemaLocator.
kayma

0

Bu bir Magento 2 böceği ile birlikte bir tasarım hatası gibi görünüyor. Burada bir hata raporu oluşturdum: https://github.com/magento/magento2/issues/10161

Görüntü oluşturucuyu opengraph_image çıktısını almak için doğrudan bir şablonda kullanıyorsanız, daha iyi bir çözüm özel nitelikleri (kullanarak Magento\Catalog\Block\Product\ImageBuilder::setAttributesveya üçüncü parametresini kullanarak) iletmektir Magento\Catalog\Block\Product\View::getImage.

Ancak, bu işe yaramayacak (hata raporuma göre), bu yüzden createbu özellikleri Katalog Görüntü Yardımcısı'na aktarmak için ImageBuilder'ın yöntemini geçersiz kılmanız gerekecek .


0

Yaroslav'nın cevabından daha basit bir yol var. Yapıcı parametrelerini modülünüzün di.xml dosyasında SchemaLocator olarak değiştirmek mümkündür. Sevmek:

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

Eklentiye gerek yok.


Dikkat edin, bu çözüm yalnızca SchemaLocator'da bağımsız değişken olarak $ realPath varsa çalışır. Magento 2 versiyonuna bağlıdır.
Pol Ravalitera

-1

Değiştirmeniz veya geçersiz kılmanıza gerek yok view.xsd, bu dosya sadece doğrulama içindir.
Son zamanlarda, aşağıdakileri yaparak bir çözüm uygulamıştım: Bir görüntü katalog özelliği oluşturun (diyelim ki bu yeni öznitelik ID 162). Özelliği oluşturduktan sonra herhangi bir katalog görüntüsüne uygulayabilirsiniz. Şimdi doğru model ve önden görünürlük için buna başvurmalısınız. Programlı olarak veya bu kılavuzu izleyerek yapabilirsiniz.

  1. Veritabanınızı phpMyAdmin veya MySQL ile açın ve small_image gibi herhangi bir sistem özelliğini yansıtmayı deneyin

    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. Git www_root/magento2_root/app/design/frontend/Theme/package/etc/view.xmlve yeni resim türünü ekle:

        <image id="opengraph_image" type="opengraph_image">
            <width>265</width>
            <height>265</height>
        </image>
  3. Yeni resim türünü ekleyerek şablon dosyalarını güncelleyin www_root/magento2_root/app/design/frontend/Theme/package/Magento_Catalog/templates/product/
  4. Önbelleğinizi temizleyin ve ön tarafta göreceksiniz.

Bu kategorideki ürün listeleme vurgulu bir resim için benim için çalıştı, bu yardımı umarım


thx 7ochem, Bu benim ilk gerçek yazım.
JROCA22

Magento aktif olarak
XSD'yi onayladığı

@barbazul, eğer sadece doğru şekilde hatırlıyorsam, geliştirici modundaysanız ..
Erfan

@Erfan Olabilir. Gerçekten kontrol etmedim. Ama yine de, bunu yapmanız gerektiği gibi olmadığının ya da belirli bir
XSD'de

Belki de en iyi uygulama değil ama benim için çalıştı
JROCA22
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.