Jak wyłączyć „Dodaj do koszyka” w określonych produktach i zamiast tego wyświetlać przycisk „Wyświetl szczegóły” w widoku listy kategorii?

20

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.

Stephen mądry
źródło
To nie jest strona internetowa dla „showcase” lub „show off”. IT Q&A. Zalecam zamknięcie tego tak zwanego pytania.
Marius
Aha, miałem nadzieję pomóc ludziom - czy powinienem to usunąć, czy zostawić, aby można je było przeszukiwać?
Stephen mądry
@Marius Nie sądzę, że to „popisuje się” tak bardzo, że PO musi pracować wystarczająco dużo przedstawicieli, aby opublikować własną odpowiedź. Głosuję za zamknięciem do tego czasu, a następnie odpowiemy na ponowne otwarcie lub możesz ponownie opublikować swoje pytania i odpowiedzi.
philwinkle
Przepraszam, powinienem lepiej poznać sposoby Stack Exchange. Nauczę się również z doświadczeniem, dzięki za pomoc w zrozumieniu tych rzeczy.
Stephen mądry

Odpowiedzi:

7
  1. 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

  2. Dodaj swoją logikę, aby template/catalog/product/list.phtmlwyświetlić przycisk Dodaj do koszyka / Wyświetl szczegóły

kevnk
źródło
Tak! Wybieram twoją odpowiedź. Podam bardziej szczegółowe informacje w edycji mojego oryginalnego postu.
Stephen mądry