2 votes

Masquer les produits sans images magento

J'ai suivi cette réponse pour masquer les produits sans image sur la page de liste des catégories. Cela a bien fonctionné pendant un certain temps.

Maintenant, pour une raison quelconque, il semble que les produits sans images apparaissent toujours sur la page de liste. Avez-vous une idée de la raison pour laquelle cela se produit ?

Note : La même page list.phtml est utilisée.

Merci.

4voto

shnozolla Points 470

Ajoutez ce qui suit à list.phtm :

//$_productCollection=$this->getLoadedProductCollection();
$_productCollection = clone $this->getLoadedProductCollection();
$_productCollection->clear()
                   ->addAttributeToFilter('small_image', array('neq' => 'no_selection'))
                   ->load();

Cette réponse a recommandé ce qui suit :

->addAttributeToFilter('image', array('neq' => 'no_selection'))

Alors que je l'ai réglé sur :

->addAttributeToFilter('small_image', array('neq' => 'no_selection'))

La raison pour laquelle la réponse précédente n'a pas fonctionné est que la collection de produits ne charge pas l'image normale, et donc l'image normale ne peut pas être ajoutée en tant qu'attribut du filtre, donc à la place, j'ai ajouté la petite_image comme attribut du filtre.

Vous pouvez également essayer La réponse de R.S. où il ajoute l'image à la page et donc à la collection. Vous devrez peut-être aussi ajouter tous les attributs en utilisant :

->addAttributeToSelect('*')

3voto

CarComp Points 1186

Il existe quelques astuces pour garder Magento en ligne. Une chose que j'ai apprise, c'est que le modèle Magento va changer pour de nombreuses raisons différentes, et il est assez difficile de comprendre pourquoi. Il y a de meilleures façons de faire (modifier la collection, etc) mais parfois cela ne fonctionne tout simplement pas et vous n'avez pas des jours pour comprendre pourquoi.

Si vous voulez un moyen infaillible de vous assurer que votre image existe, utilisez le code suivant... Ce n'est peut-être pas le 'magento way' mais ça marche, et je l'ai testé sur mon site (Magento EE 1.12). Mettez-le dans une fonction, ou utilisez-le directement dans votre phtml si vous voulez !

Il s'assure simplement que l'URL existe.

$exists = false;
$entity_id = 8800;
$product = Mage::getModel('catalog/product')->load($entity_id);
$mediaUrl= Mage::getBaseUrl('media');
$imageUrl = $mediaUrl . "catalog/product" . $product->getImage();

$file_headers = @get_headers($imageUrl);
if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
    $exists = false;
}
else {
    $exists = true;
}

var_dump($exists);
var_dump($imageUrl);
echo '<img src="' . $imageUrl . '" />';

$exists sera soit vrai (l'image existe), soit faux (l'image n'existe pas).

2voto

R.S Points 10623

Je pense que le problème est que vous essayez d'obtenir la propriété 'image' (image de base) sur le fichier list.phtml (par défaut, je ne peux accéder qu'à la vignette, small_image).

Sur list.phtml (ne charge pas la ressource produit complète comme sur view.pthml)

echo $_product->getImage() //null
echo $_product->getThumbnail() // path/name.jpg
echo $_product->getSmallImage() // path/name.jpg

Je pense que vous devez ajouter quelque chose comme ceci à app/design/frontend/default/yourtheme/layout/catalog.xml

  <action method="addAttribute"><name>image</name></action>

Voir Comment accéder à l'attribut Image personnalisé dans le fichier list.phtml de Magento ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X