Domanda

L'I lavori dell'azienda per fornire un'estensione gratuita per implementare una requisiti B2B comuni in un negozio di Magento (questa non è una spina, ma un grido di aiuto onesti). La richiesta è venuto a fornire un'opzione di configurazione del sistema per rimuovere il pulsante Aggiungi al carrello, suona abbastanza semplice, come già facciamo per gli altri elementi come prezzo e carrello collegamenti.

Mi spiego un po 'di come ho cercato di risolvere questo finora.

  1. Abbiamo fornito all'utente con l'opzione tramite la sezione di amministrazione incluse le opzioni di configurazione su come identificare lì pulsante Aggiungi al carrello. L'impostazione predefinita è il Magento informazioni del modello standard, ma devono tener conto dei diversi temi

    • È possibile selezionare il tipo di elemento HTML (div / a / tasto, ecc.)

    • È possibile scegliere di identificare da id o classe

    • È possibile immettere il valore di identità o di classe

  2. Quindi, utilizzando un osservatore sulla core_block_abstract_to_html_after manifestazione e blocco Mage_Catalog_Block_Product_List (facciamo controllare più blocchi) costruiamo un'espressione regolare che viene travolto l'html e sostituisce il pulsante con un testo utile.

Questo funziona "bene", ma il problema che ho è che il nostro modulo può essere attivato su un livello di categoria. Ovviamente questo significa che si potrebbe avere una pagina di risultati di ricerca con entrambe le categorie attivi e inattivi. Attualmente il nostro approccio sarà solo rimuovere tutti i pulsanti Aggiungi al carrello in questo blocco anche su prodotti attivi in ??quanto non può controllare sulla base del prodotto.

Il nostro codice del modulo è disponibile all'indirizzo https://github.com/sitewards / B2BProfessional / albero / add-to-cart se si vuole dare una rapida occhiata. Sono felice di rispondere a più domande se le persone hanno qualche suggerimento.

È stato utile?

Soluzione

In base a quello che hai detto che sto facendo le seguenti ipotesi

  • I requisiti compiti vi impediscono di editting o la sostituzione di modelli.
  • Lei non è limitato al solo uso di osservatori e è possibile ignorare le classi esistenti fintanto che è improbabile che possa richiedere modifiche al codice dopo l'installazione del modulo.

Dato che questi requisiti si limitano (più o meno) a utilizzare il metodo regex che hai già impostato. Avremo bisogno di trovare qualche valore unico nella voce dell'elenco del prodotto a chiave fuori di al fine di ottenere informazioni specifiche del prodotto. Normalmente la voce id sarebbe disponibile in aggiunta al carrello url, ma questo non è il caso quando un prodotto ha richiesto opzioni.

Quindi, se si guarda al pulsante Aggiungi al carrello che l'utente sarà cliccando, si può vedere che ci sono solo due metodi utilizzati. Una è la funzione che non è affatto esclusiva al pulsante add cart tradurre. L'altro è getAddToCartUrl() (documentazione qui: http://docs.magentocommerce.com/Mage_Catalog/Mage_Catalog_Block_Product_Abstract .html # methodgetAddToCartUrl ). Io non sono del tutto sicuro che questo è in esclusiva per la metti in pulsanti carrello, in modo da testare a fondo è una buona idea.

Ora che abbiamo trovato il metodo getAddToCartUrl nel pulsante vogliamo rimuovere condizionale, e (bonus) che riceve già l'oggetto prodotto come uno dei suoi parametri.

Ora ci vorrà per creare un modulo che riscrive quel metodo. Non abbiamo bisogno di cambiare l'intera classe, in modo da impostare i valori di configurazione corretta e estendendo la classe esistente dovrebbe permetterci di avere un impatto minimo.

Dato che il cambiamento che stiamo cercando solo deve accadere nelle pagine di ricerca, suggerirei avvolgendo il cambiamento in un blocco if che è specifico tale controller / azione. (Come ottenere questi valori: http://blog.chapagain.com.np/magento-how-to-get-controller-action-and-module-name-in-template-file/ )

Ora che abbiamo l'accesso all'oggetto del prodotto come parametro del getAddToCartUrl ed è avvolto in una condizione che si applica solo la modifica alla pagina dei risultati di ricerca, abbiamo solo bisogno di logica di scrittura per vedere quale categoria quel prodotto appartiene e controllare se il pulsante Aggiungi al carrello dovrebbe essere visibile.

Se il risultato della nostra logica dice che il pulsante deve essere nascosto, abbiamo solo bisogno di rendere il metodo restituisce uno stringa univoca che possiamo facilmente trovare con regex e nascondere il pulsante quando si constata che stringa.

TL; DR Provare a modificare il metodo di getAddToCartUrl a qualcosa di uscita che indica alla funzione regex che è già in atto per rimuovere il pulsante.

Altri suggerimenti

Perché non è sufficiente aggiungere un attributo boolean al prodotto (show_add_to_cart) -. Quindi riscrivere il metodo isSaleable() per includere controllando il valore di tale attributo

In questo modo, sarebbe più o meno essere nativi per negare spesa aggiunta.

ero andato attraverso link indicato nella prima domanda da tutto sopra, ma che puntano non è disponibile in questo momento .Così come lei ha detto che si desidera nascondere pulsante Aggiungi al carrello per il prodotto specifico come per il mio suggerimento è possibile utilizzare questo libero ed eccellente estensione per la vostra esigenza.

Rimuovere pulsante aggiungi al carrello estensione gratuita

In Design > Custom Layout XML per i prodotti che si desidera rimuovere:

<reference name="content">
  <remove name="product.info.addtocart"/>
</reference>

Se si desidera rimuovere dalla lista dei prodotti su pagine di categoria, è necessario modificare il modello - rimuovere questo blocco da template/catalog/product/list.phtml:

<?php if($_product->isSaleable()): ?>
    <p><button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button></p>
<?php else: ?>
    <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
<?php endif; ?>

Assicurati di copiare questo file sul tema.

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