回答:
Magentoは、view.xml
アプリケーションのテーマレベルで維持されるというファイルを使用します。
たとえば、デフォルトのテーマluma
を使用している場合は、view.xml
下にあるはずですvendor/magento/theme-frontend-luma/etc/view.xml
このファイルでは、<images/>
ノード内に<media>
ノードがあります。
<view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/view.xsd">
<media>
<images module="Magento_Catalog">
<image id="bundled_product_customization_page" type="thumbnail">
<width>140</width>
<height>140</height>
</image>
<image id="cart_cross_sell_products" type="thumbnail">
<width>200</width>
<height>248</height>
</image>
<image id="cart_page_product_thumbnail" type="small_image">
<width>165</width>
<height>165</height>
</image>
........
</images>
</media>
......
</view>
ここで、画像の寸法は<image/>
ノードの下で維持されます。
ノードのid
属性値は<image/>
コードベースで参照されます。
例えば:
<image id="related_products_list" type="small_image">
<width>152</width>
<height>190</height>
</image>
id値はビューファイルで使用されます vendor/magento/module-catalog/view/frontend/templates/product/list/items.phtml
case 'related':
/** @var \Magento\Catalog\Block\Product\ProductList\Related $block */
if ($exist = $block->getItems()->getSize()) {
$type = 'related';
$class = $type;
$image = 'related_products_list';
$title = __('Related Products');
$items = $block->getItems();
$limit = 0;
$shuffle = 0;
$canItemsAddToCart = $block->canItemsAddToCart();
$showWishlist = true;
$showCompare = true;
$showCart = false;
$templateType = null;
$description = false;
}
break;
ここで、$image
は画像サイズの値を参照しています:
<?php echo $block->getImage($_item, $image)->toHtml(); ?>
テーマにがない場合、ファイルview.xml
があるフォールバックテーマ(親テーマ)を使用している可能性がありview.xml
ます。
<theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/theme.xsd">
<title>Magento Luma</title>
<parent>Magento/blank</parent>
.....
</theme>
これMagento/blank
が親テーマです。
view.xml
ファイルの値を変更/上書きする場合は、ファイル全体view.xml
をカスタムテーマに完全にコピーして、値を変更する必要があります。
view.xml
ノード値フォールバックシステムがないため、ノードの値がカスタムテーマに存在しない場合、親テーマのview.xml値にフォールバックしview.xml
ないため、ファイル全体をコピーする必要があります。
値の変更が完了したら、実行する必要があります
php bin/magento catalog:images:resize
これにより、新しい画像サイズが再生成されます。
php bin/magento catalog:images:resize
が必要ないことを見つけました(それは多くの時間を要します)、私たちはキャッシュをクリアする必要があり、それから動作します。
Magento製品は、vendor / magento / theme-frontend-luma / etc / view.xmlのパスで画像サイズの寸法にview.xmlファイルを使用します
ここで、ノード内にノードがあります。
ファイルview.xmlをコピーしてテーマパスに配置し、app / design / frontend / MyThemePackage / MyTheme / etc / view.xmlのように変更します。
<view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/view.xsd">
<media>
<images module="Magento_Catalog">
........
<image id="category_page_list" type="small_image">
<width>270</width>
<height>450</height>
</image>
........
</images>
</media>
......
</view>
キャッシュをクリアし、カテゴリリストページをロードします。変更が反映されます。
次のように、テンプレートファイルで画像の寸法を直接指定することもできます。
<?php
/**
* @var $block \Magento\Catalog\Block\Product\Widget\NewWidget
*/
$image = 'new_products_content_widget_grid';
$items = $block->getProductCollection()->getItems();
$width = 100;
$height = 100;
foreach ($items as $_item) {
$resizedUrl = $block->resizeImage($_item, $image , $width, $height)->getUrl();
echo '<img src="'.$resizedUrl .'" alt="alt text" />';
}
その他のサンプルはこちら-https://nwdthemes.com/2017/12/19/magento-2-product-image-size/