Tujuan dari modul yang saya kembangkan saat ini adalah untuk menambahkan jenis gambar khusus yang disebut "opengraph_image". Saya menambahkan atribut EAV baru melalui skrip InstallData.php saya yang berfungsi dengan baik. Ketika saya sekarang masuk ke backend Magento2 dan mengubah produk saya dapat memilih jenis gambar "opengraph_image" saat mengunggah atau mengedit gambar produk.
Namun, di frontend saya ingin menampilkan gambar ini. Karena itu saya membuat file etc / view.xml dalam modul saya dengan konten berikut:
<?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>
Tapi sekarang saya mendapatkan kesalahan berikut:
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
Alasannya adalah sepertinya tidak memuat custom.xsd saya terletak di: di app/code/Esites/SEO/etc/custom.xsd
mana saya mendefinisikan opengraph_image. Sebaliknya tampaknya hanya memuat file XSD default:vendor/magento/framework/Config/etc/view.xsd
Konten custom.xsd saya adalah salinan (untuk tujuan pengujian) dari view.xsd asli ini di mana saya menambahkan yang berikut pada baris 75:
<xs:enumeration value="opengraph_image"/>
Frontend tidak berfungsi tanpa kesalahan jika saya menyertakan baris di atas dalam file view.xsd yang asli. Saya mengikuti dokumentasi di: http://devdocs.magento.com/guides/v2.0/extension-dev-guide/build/XSD-XML-validation.html dan jalur saya dibuat sesuai dengan informasi pada halaman itu. Cache dihapus beberapa kali.
Apa yang saya lewatkan?
module="Magento_Catalog"
kemodule="Esites_SEO"
?Jawaban:
Beban Magento2 bawaan view.xsd karena ConfigView Pembaca menggunakan
lib/internal/Magento/Framework/Config/SchemaLocator.php
dan mengembalikan standarview.xsd
Saya dapat menimpanya dengan mengikuti langkah-langkah di bawah ini:
Buat definisi plugin di
{MODULE}/etc/di.xml
Buat plugin di {MODULE} /Model/Plugin/SchemaLocator.php
Perbarui untuk Magento 2.0. versi
lib/internal/Magento/Framework/Config/etc/view.xsd
ke{MODULE}/etc/view.xsd
Untuk Magento 2.1. versi, Salin
Vendor/Magento/Framework/Config/etc/view.xsd
ke{MODULE}/etc/view.xsd
* Edit{MODULE}/etc/view.xsd
dan tambahkan tipe barumedia_attribute
sumber
Magento\Framework\Config\Dom\UrnResolver
karena ada tempat yang menggunakannya secara langsung alih-alih melaluiSchemaLocator
.Ini tampaknya menjadi cacat desain, dikombinasikan dengan bug Magento 2. Saya telah membuat laporan bug di sini: https://github.com/magento/magento2/issues/10161
Jika Anda menggunakan pembuat gambar langsung di templat untuk menampilkan opengraph_image, solusi yang lebih baik adalah meneruskan atribut khusus (menggunakan
Magento\Catalog\Block\Product\ImageBuilder::setAttributes
, atau parameter ketigaMagento\Catalog\Block\Product\View::getImage
).Namun, itu tidak akan berhasil (diberi laporan bug saya), jadi Anda masih harus mengganti metode ImageBuilder
create
untuk meneruskan atribut-atribut tersebut ke Katalog Image Helper.sumber
Ada cara yang lebih sederhana daripada jawaban Yaroslav. Dimungkinkan untuk mengubah parameter konstruktor ke SchemaLocator di di.xml modul Anda. Seperti:
Tidak perlu untuk Plugin.
sumber
Anda tidak perlu memodifikasi atau mengganti
view.xsd
, file ini hanya untuk validasi.Saya baru-baru ini mengimplementasikan solusi saya dengan melakukan hal berikut: Buat atribut katalog gambar (katakanlah bahwa atribut ID baru 162). Setelah Anda membuat atribut, Anda akan dapat menerapkannya pada gambar katalog apa pun. Sekarang Anda harus menerapkan padanya model yang tepat dan visibilitas ujung depan. Anda dapat melakukannya secara terprogram atau mengikuti panduan ini.
Buka database Anda dengan phpMyAdmin atau MySQL dan cobalah untuk mencerminkan atribut sistem apa pun seperti small_image
Pergi ke
www_root/magento2_root/app/design/frontend/Theme/package/etc/view.xml
dan tambahkan jenis gambar baru Anda:www_root/magento2_root/app/design/frontend/Theme/package/Magento_Catalog/templates/product/
Ini bekerja untuk saya untuk mengarahkan gambar pada daftar produk kategori, harap bantuan ini.
sumber