Как отключить «Добавить в корзину» на определенных товарах и вместо этого отобразить кнопку «Подробнее» в списке категорий?

20

Мне было интересно, как отключить кнопку «Добавить в корзину» на некоторых конкретных продуктах, и я нашел заброшенное руководство о том, как это сделать, и это сработало, но оно было несколько неполным, поскольку это было всего лишь решение на страницах просмотра продукта, а не на странице списка категорий или сетки.

Я отвечу на свой вопрос здесь через 8 часов (так как мне нужно подождать 8 часов, так как моя репутация ниже определенного уровня), после того, как я объясню первые шаги, и мой ответ будет отсутствующим третьим шагом, который я должен был вычислить для себя. Я постараюсь сделать это простым для подражания:

[Шаг 1]

[1]

Создайте атрибут, который вы будете использовать в продуктах, для которых не требуется кнопка «Добавить в корзину». В панели администратора, перейдите к ...

Каталог> Атрибуты> Управление атрибутами> Добавить новый атрибут

Назовите свой атрибут как хотите, например: «No_cart_button»

Со свойствами:

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

С управлением меткой / опциями:

Admin: Disable Add to Cart
English: Disable Add to Cart

Теперь сохраните этот атрибут.

[2]

Присвойте свой новый атрибут группе, чтобы вы могли использовать его. Я использовал «По умолчанию». Перейти к...

Catalog > Attributes > Manage Attributes Sets > Select Set

Теперь сохраните этот набор атрибутов.

[Шаг 2]

Мы добавим немного кода в view.phtml

app/design/frontend/default/theme/template/catalog/product/view.phtml

Найдите этот блок кода:

    <?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
//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
}
?>

Этот код проверяет, установлено ли для No_cart_button значение yes. Если для этого параметра установлено значение «да», он выводит код, который удаляет кнопку «Добавить в корзину» и вместо этого отображает текст с надписью «Этот продукт недоступен в Интернете, пожалуйста, позвоните нашему представителю, если вы хотите приобрести его».

Хорошо, эти 2 шага завершены, и удаляет Добавить в корзину на странице просмотра продукта.

Но это не удаляет кнопку «Добавить в корзину» на страницах списка категорий. Теперь мы хотим сделать кнопку «Подробнее» на страницах списка категорий вместо кнопки «Добавить в корзину».

[РЕДАКТИРОВАТЬ]

Ответ:

kevinkirchner верен, мы добавим эту логику в list.phtml сейчас. Мы уже убедились, что для атрибутов «Использовано в списке товаров» установлено значение «ДА».

В порядке,

[Шаг 3]

Мы сделаем так, когда для параметра «Отключить добавление в корзину» установлено значение «Да», также отключается кнопка «Добавить в корзину» на страницах списка категорий.

Перейти к list.phtml

app/design/frontend/default/theme/template/catalog/product/list.phtml

и найдите в этом файле:

<?php if($_product->isSaleable()): ?>

Он должен появиться в этом файле 2 раза.

Прямо под этой строкой введите следующий код

<?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 {
?>

Затем прямо под вашим кодом, который создает обычную кнопку «Добавить в корзину», вы увидите

<?php
}
?>

прямо под этим вставьте еще один фрагмент кода:

<?php
}
?>

Хорошо, теперь сделайте те же самые 2 шага к другому блоку кода в этом файле, где вы найдете

<?php if($_product->isSaleable()): ?>

Вы должны сделать это дважды, потому что первый раз для просмотра списка, а второй раз для просмотра таблицы.

Стивен Мудрый
источник
Это не я веб-сайт для «витрина» или «выпендриваться». IT Q & A. Я рекомендую закрыть этот «так называемый» вопрос.
Мариус
О, я надеялся помочь людям. Должен ли я вместо этого удалить это или оставить его для поиска?
Стивен Мудрый
@Marius Я не думаю, что это «хвастается» настолько, что ОП нужно набрать достаточно репутации, чтобы опубликовать свой собственный ответ. Я проголосую за закрытие до этого времени, затем сообщу о повторном открытии или вы можете повторно опубликовать свои вопросы и ответы.
Philwinkle
Извините, ребята, я должен лучше изучить способы Stack Exchange. Я тоже буду учиться с опытом, спасибо, что помогли мне понять эти вещи.
Стивен Мудрый

Ответы:

7
  1. Убедитесь, что ваш атрибут доступен на странице со списком товаров, установив «Использовать в списке товаров» на «Да» при редактировании вашего атрибута - скриншот

  2. Добавьте свою логику, чтобы template/catalog/product/list.phtmlпоказать кнопку Добавить в корзину / Подробнее

kevnk
источник
Ага! Я собираюсь выбрать ваш ответ. Я предоставлю более конкретные детали в редактировании моего оригинального сообщения.
Стивен Мудрый