Question

Je ne suis pas sûr que ce soit un bug ou quelque chose avec ma configuration.

J'ai une base de données sur un magento installer deux magasins en cours d'exécution.

Certains produits ne sont activés que dans (1 magasin) et ceux-ci ne présentent que sous (1 magasin). Toutefois, grâce à l'analyse que j'ai trouvé quelques 404 pages qui viennent de / examen / produit / liste / id / pages qui nnn portées à ma connaissance, que les produits non (magasin 2) sont montrant le nom du produit, le prix et l'image. (Le produit a fait une fois et a été exist dans le plan du site donc ce serait pourquoi et comment il a été porté à mon attention).

Lorsque vous cliquez sur le dos de lien de la page du formulaire d'examen des produits, vous obtenez comme prévu une page 404 non trouvée Ma question est pourquoi et comment cette grande partie du produit ne montre du tout? Les modèles d'examen des produits semblent tous provenir des mêmes modèles qui ont déjà ne montrer permettent pas le produit, donc je me demande est-ce plus l'URL de routage contrôlant ce que montre ou dans le code lui-même?

Même si la sortie i la valeur pour $_product = $this->getProduct(); j'obtenir des renseignements sur le produit et l'information ne montre qu'il est magasin2 que ce produit doit par tous les comptes ne pas exister dans.

Était-ce utile?

La solution

Oh c'est bizarre, il ne semble qu'il ya un « bug » ou peut-être juste une « différence » dans les opinions quant au moment où un produit doit montrer à l'examen.

Voir le produit

actuellement la page catalogue voir les articles usages Mage_Catalog_Helper_Product à l'aide init et rendre le produit. Ça sonne bien et il fait quelques bons contrôles.

$product = Mage::getModel('catalog/product')
    ->setStoreId(Mage::app()->getStore()->getId())
    ->load($productId);
if (!$this->canShow($product)) {
    return false;
}
if (!in_array(Mage::app()->getStore()->getWebsiteId(), $product->getWebsiteIds())) {
    return false;
}

La fonction canShow quand on les regarde en plus profond renvoie simplement les résultats de $product->isVisibleInCatalog() && $product->isVisibleInSiteVisibility() le produit est chargé correctement.

Maintenant, tout cela semble bien fonctionner, bon travail Magento.

Examiner liste

Alors nous allons voir comment la liste d'évaluation fait.

Eh bien tout d'abord, il n'utilise pas la même aide, ce qui est un peu bizarre que je suppose que cela limite beaucoup de code en double comme la vérification si un produit peut être affiché, ce qui semble être la question que nous sommes à la recherche à ici: (

Nous savons donc ce qu'il ne le fait pas, nous allons vérifier ce qu'il fait.

Eh bien, il classe un produit comme le permet la vérification suivante:

if (!$product->getId() || !$product->isVisibleInCatalog() || !$product->isVisibleInSiteVisibility()) {

Ce que nous avons vu dans la fonction canShow d'aide, mais malheureusement qui est elle vérifie tout et donc ne pas faire une vérification supplémentaire pour les sites web. Maintenant, je ne sais pas si cela est en fait un bug ou les résultats souhaités, mais mais il devrait être assez simplement trier.

Fix

Pour résoudre ce problème, il semble être assez simple, heureusement, il y a deux événements qui peuvent être accrochés sur. Ils sont tous les deux ont tiré dans le Mage_Review_ProductController::_initProduct.

Mage::dispatchEvent('review_controller_product_init', array('product'=>$product));
Mage::dispatchEvent('review_controller_product_init_after', array(
    'product'           => $product,
    'controller_action' => $this
));

Je suggère donc la création d'un observateur qui travaille avec un de ces événements et contrôle les sites attachés à un produit et si elle ne peut pas être affiché sur le site Web actuel simplement appeler clearInstance

Autres conseils

Aller à l'admin catalog-> gérer le produit. maintenant trouver ce produit vu en magasin 2 .. vérifier le produit permet à la fois le site web entrer dans la description d'image ici ici dans cet écran, voir dans la colonne de site que l'affichage du magasin de diamant de sorte produit voir seulement en magasin de diamant. dans d'autres magasins ne peuvent pas voir ce produit

si vous trouvez des sites multiples à supprimer un seul produit il. produit modifier goto -> onglet site -> supprimer Cliquez pour désactiver d'autre magasin. (Sélectionnez stocker uniquement lorsque vous souhaitez afficher).

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top