Come posso modificare le dimensioni predefinite delle immagini dei prodotti su Magento 2?


25

In magento 1.xx , potremmo modificare le immagini di anteprima predefinite in admin:

Sistema> Configurazione> Catalogo

Ma in Magento 2.0 , come posso cambiare questo valore che non riesco a trovare alcuna configurazione per permetterlo? Il problema è che le immagini dei miei prodotti vengono visualizzate con grandi strisce bianche e vorrei evitarlo.

Risposte:


39

Magento utilizza il file chiamato view.xmlche viene mantenuto a livello di tema dell'applicazione.

Quindi, ad esempio, se stai usando il tema predefinito luma, dovresti trovare quello view.xmlsottovendor/magento/theme-frontend-luma/etc/view.xml

In questo file, vedresti il <images/>nodo all'interno del <media>nodo.

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

La dimensione delle immagini è mantenuta qui sotto il <image/>nodo.

Il idvalore dell'attributo del <image/>nodo è indicato nella base di codice.

Per esempio:

<image id="related_products_list" type="small_image">
    <width>152</width>
    <height>190</height>
</image>

Il valore ID viene utilizzato nel file di visualizzazione 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;

Qui il si $imageriferisce al valore della dimensione dell'immagine qui:

<?php echo $block->getImage($_item, $image)->toHtml(); ?>

Nel caso in cui il tema non abbia un view.xml, quindi potrebbe utilizzare un tema di fallback (tema principale) che ha il view.xmlfile.

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

Ecco Magento/blankil tema principale.

In caso di modifica / sovrascrittura dei valori del view.xmlfile, è necessario copiare completamente l'intero view.xmlfile sul tema personalizzato e modificare i valori.

view.xmlnon ha un sistema di fallback del valore del nodo, significa che se un valore di un nodo non è presente nel tema personalizzato view.xml , non ricadrà sul valore view.xml del tema principale, ecco perché è necessario copiare l'intero file.

Una volta apportate le modifiche ai valori, dovrai eseguirlo

php bin/magento catalog:images:resize

Questo rigenererà le nuove dimensioni dell'immagine.


Grazie. Non avrei mai immaginato dove questo veniva generato. +1
— andy jones

5
Ho imparato ad amare quanto sia ingegnerizzato e tuttavia privo di documentazione. Dovresti cercare nel codice o scavare nello schema di db solo per capire questi nomi.
— Miguel Felipe Guillen Calo,

Grazie per la risposta, ma mi sono stancato e ho scoperto che l'ultima esecuzione eseguita php bin/magento catalog:images:resize non ha bisogno (costa molto tempo) , abbiamo solo bisogno di svuotare la cache e quindi funzionerà.
— Key Shang,

@KeyShang hai ragione, le immagini ridimensionate vengono generate in fase di esecuzione se non già presenti. Si consiglia comunque di eseguire questo comando poiché aiuta con le prestazioni in produzione
— Atish Goswami,

6

Il prodotto Magento utilizza il file view.xml per le dimensioni delle dimensioni dell'immagine nel percorso vendor / magento / theme-frontend-luma / etc / view.xml

Qui troverai il nodo all'interno del nodo.

Copia il file view.xml e inseriscilo nel percorso del tuo tema e apporta le modifiche, ad esempio 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>

Svuota la cache e carica la pagina dell'elenco delle categorie. Le tue modifiche si rifletteranno.


È degno di nota che estendere il percorso "vendor / magento / theme-frontend-luma / etc / view.xml" può anche essere "vendor / magento / theme-frontend-blank / etc / view.xml" a seconda del pacchetto temi predefinito usate.
— Dynomite,

come modificare la dimensione dell'immagine in miniatura nella pagina dei dettagli del prodotto?
— jafar pinjar,

1

Puoi anche specificare le dimensioni dell'immagine direttamente nel file modello come questo:

<?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" />';
}

Altri esempi qui - https://nwdthemes.com/2017/12/19/magento-2-product-image-size/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.