Zastanawiałem się, jak wyłączyć przycisk Dodaj do koszyka w kilku konkretnych produktach i znalazłem porzucony przewodnik, jak to zrobić, co zadziałało, ale było nieco niekompletne, ponieważ było to tylko rozwiązanie na stronach widoku produktu, a nie na liście kategorii lub stronach siatki.
Odpowiem na własne pytanie tutaj za 8 godzin (ponieważ muszę poczekać 8 godzin, ponieważ moja reputacja jest poniżej pewnego poziomu), po wyjaśnieniu pierwszych kroków, a moją odpowiedzią będzie brakujący trzeci krok, który musiałem wymyślić dla siebie. Spróbuję to ułatwić:
[Krok 1]
[1]
Utwórz atrybut, który będzie używany w produktach, dla których nie chcesz przycisku Dodaj do koszyka. W panelu administracyjnym przejdź do ...
Katalog> Atrybuty> Zarządzaj atrybutami> Dodaj nowy atrybut
Nazwij swój atrybut, jak chcesz, na przykład: „No_cart_button”
Dzięki właściwościom:
Attribute Code: No_cart_button
Catalog Input Type for Store Owner: Yes/No
Use in Quick Search: No
Use in Advanced Search: No
Comparable on Front-end: No
Visible on Product View Page on Front-end: No
Used in Product Listing: YES
Used for Sorting in Product Listing: No
Za pomocą opcji Zarządzaj etykietą / opcjami:
Admin: Disable Add to Cart
English: Disable Add to Cart
Teraz zapisz ten atrybut.
[2]
Przypisz nowy atrybut do grupy, abyś mógł go użyć. Użyłem „Default”. Iść do...
Catalog > Attributes > Manage Attributes Sets > Select Set
Teraz zapisz ten zestaw atrybutów.
[Krok 2]
Dodamy trochę kodu do view.phtml
app/design/frontend/default/theme/template/catalog/product/view.phtml
Znajdź ten blok kodu:
<?php if (!$this->hasOptions()):?>
<div class="add-to-box">
<?php if($_product->isSaleable()): ?>
<?php echo $this->getChildHtml('addtocart') ?>
<?php if( $this->helper('wishlist')->isAllow() || $_compareUrl=$this->helper('catalog/product_compare')->getAddUrl($_product)): ?>
<span class="or"><?php echo $this->__('OR') ?></span>
<?php endif; ?>
<?php endif; ?>
<?php echo $this->getChildHtml('addto') ?>
</div>
<?php echo $this->getChildHtml('extra_buttons') ?>
<?php elseif (!$_product->isSaleable()): ?>
<div class="add-to-box">
<?php echo $this->getChildHtml('addto') ?>
</div>
<?php endif; ?>
ok, teraz zastąp go tym blokiem kodu:
<?php
//Checks if the "Disable Add to Cart" variable is set to 'Yes':
if(($_product->getAttributeText('No_cart_button')) == "Yes"){
//If set to Yes, tell PHP what to output:
echo "This Product is not available online, please call our representative if you wish to purchase this.";
}
//If set as No, then show the 'add to cart box' as usual.
else {
?>
<?php if (!$this->hasOptions()):?>
<div class="add-to-box">
<?php if($_product->isSaleable()): ?>
<?php echo $this->getChildHtml('addtocart') ?>
<?php if( $this->helper('wishlist')->isAllow() || $_compareUrl=$this->helper('catalog/product_compare')->getAddUrl($_product)): ?>
<span class="or"><?php echo $this->__('OR') ?></span>
<?php endif; ?>
<?php endif; ?>
<?php echo $this->getChildHtml('addto') ?>
</div>
<?php echo $this->getChildHtml('extra_buttons') ?>
<?php elseif (!$_product->isSaleable()): ?>
<div class="add-to-box">
<?php echo $this->getChildHtml('addto') ?>
</div>
<?php endif; ?>
<?php
}
?>
Ten kod sprawdza, czy No_cart_button jest ustawiony na yes. Jeśli jest ustawiony na tak, wyświetla kod, który usunie przycisk dodawania do koszyka, a zamiast tego pokaże tekst: „Ten produkt nie jest dostępny online, zadzwoń do naszego przedstawiciela, jeśli chcesz go kupić”.
Ok, te 2 kroki zostały zakończone i usuwa opcję Dodaj do koszyka na stronie widoku produktu.
Nie powoduje to jednak usunięcia przycisku „Dodaj do koszyka” na stronach z listami kategorii. Teraz chcemy utworzyć przycisk „Wyświetl szczegóły” na stronach list kategorii zamiast przycisku „Dodaj do koszyka”.
[EDYTOWAĆ]
Odpowiedź:
kevinkirchner ma rację, teraz dodamy tę logikę do list.phtml. Już upewniliśmy się, że ustawienia atrybutów „Używane na liście produktów” są ustawione na „TAK”.
Dobrze,
[Krok 3]
Sprawimy, że gdy Wyłącz opcję Dodaj do koszyka jest ustawiony na Tak, wyłącza również przycisk „Dodaj do koszyka” na stronach listy kategorii.
Przejdź do list.phtml
app/design/frontend/default/theme/template/catalog/product/list.phtml
i wyszukaj w tym pliku:
<?php if($_product->isSaleable()): ?>
Powinien pojawić się 2 razy w tym pliku.
Tuż pod tym wierszem wstaw następujący kod
<?php
if(($_product->getAttributeText('No_cart_button')) == "Yes"){ ?>
<p><button type="button" title="<?php echo $this->__('View Details') ?>" class="button btn-cart" onclick="location.href='<?php echo $_product->getProductUrl() ?>'"><span><span><?php echo $this->__('View Details') ?></span></span></button></p>
<?php
}
else {
?>
Następnie tuż pod kodem, który tworzy normalny przycisk „Dodaj do koszyka”, zobaczysz
<?php
}
?>
tuż pod tym, wstaw kolejny ten sam fragment kodu:
<?php
}
?>
Ok, teraz wykonaj dokładnie te same 2 kroki do drugiego bloku kodu w tym pliku, w którym się znajdujesz
<?php if($_product->isSaleable()): ?>
Musisz to zrobić dwa razy, ponieważ pierwszy raz dotyczy widoku listy, a drugi raz widoku siatki.
źródło
Odpowiedzi:
Upewnij się, że twój atrybut jest dostępny na stronie listy produktów, ustawiając „Używany na liście produktów” na „Tak” podczas edycji atrybutu - zrzut ekranu
Dodaj swoją logikę, aby
template/catalog/product/list.phtml
wyświetlić przycisk Dodaj do koszyka / Wyświetl szczegółyźródło