Domanda

Sto cercando di creare un collegamento per rimuovere un elemento dalla lista dei desideri se è lì. L'URL sta tornando / lista dei desideri / index / remove anziché l'URL corretto, che da quello che ho visto on-line dovrebbe essere / lista dei desideri / index / rimuovere / item / [ID]. Cercando l'URL manualmente non funziona. Questo è il mio modo di ottenere l'URL di rimozione:

$_wishlistRemoveUrl = $this->helper('wishlist')->getRemoveUrl($_product);
È stato utile?

Soluzione

In primo luogo, una panoramica di come funzionano liste dei desideri:

  1. Ogni lista dei desideri è memorizzato nel database con il proprio ID
  2. Ogni prodotto aggiunto a una wishlist viene assegnato un wishlist_item_id
  3. Questo ID non è lo stesso del product_id

Per questo motivo non si può semplicemente passare un ID del prodotto all'URL rimuovere perché in realtà è riferimento wishlist_item_id del prodotto.

Questo spiega il motivo per cui si stanno ottenendo un URL vuoto ( "/ lista dei desideri / index / Rimuovi"), perché quando si passa nel prodotto che non ha la wishlist_item_id necessario, è necessario recuperare questo in un modo diverso.

Per aggirare il problema, v'è un metodo in Mage_Wishlist_Model_Item è possibile utilizzare per ottenere una lista dei desideri articolo per ID prodotto:

    /** @var $_wishlistHelper Mage_Wishlist_Helper_Data */
    $_wishlistHelper = $this->helper('wishlist');

    /** @var $_wishlist Mage_Wishlist_Model_Wishlist */
    $_wishlist = $_wishlistHelper->getWishlist();

    /** @var $_wishlistItem Mage_Wishlist_Model_Item */
    $_wishlistItem = Mage::getModel('wishlist/item');
    $_wishlistItem->loadByProductWishlist(
        $_wishlist->getId(),
        $_product->getId(),
        $this->helper('core')->getStoreId()
    );

    $_wishlistRemoveUrl = $_wishlistHelper->getRemoveUrl($_wishlistItem);

O il modo più breve:

    $_wishlistItem = Mage::getModel('wishlist/item')->loadByProductWishlist(
        $this->helper('wishlist')->getWishlist()->getId(),
        $_product->getId(),
        $_product->getStoreId()
    );
    $_wishlistRemoveUrl = $this->helper('wishlist')->getRemoveUrl($_wishlistItem);

Questo codice è stato testato in blocchi di tipo Mage_Catalog_Block_Product_List e Mage_Catalog_Block_Product_View

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top