Я выполнил [эти указания] [1] для удаления "добавить в корзину". Я пытаюсь удалить кнопку "Добавить в корзину" для элементов с атрибутом "instore_only", и когда ответ "да", я хочу, чтобы он эховый статический блок, который я сделал для него. Когда я делаю первую часть, кнопка никогда не исчезает. Вот мой код:
//Check if the "Available in store only" variable is set to 'Yes':
if(($_product->getAttributeText('instore_only')) == "Yes"){
//If set to Yes, tell PHP what to output:
echo $this->getLayout()->createBlock('cms/block')->setBlockId('instore_only')->toHtml();
}
//If set to No, then show the 'add to cart box' as normal.
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 if ($_product->getShortDescription()):?>
<div class="short-description">
<h2><?php echo $this->__('Quick Overview') ?></h2>
<div class="std"><?php echo $_helper->productAttribute($_product, nl2br($_product->getShortDescription()), 'short_description') ?></div>
</div>
<?php endif;?>
<?php echo $this->getChildHtml('other');?>
<?php if ($_product->isSaleable() && $this->hasOptions()):?>
<?php echo $this->getChildChildHtml('container1', '', true, true) ?>
<?php endif;?>
<?php
}
?>
Я проверил местоположение правильного view.phtml, используя подсказки шаблона пути на моем интерфейсе.
Итак, короче говоря, этот код выглядит правильно, а если нет, могу ли я вызвать блок cms в view.phtml? Сайт поддерживает небольшой розничный магазин, поэтому некоторые предметы доступны только в магазине, а не для онлайн-покупок.
Мне около 1 недели в magento и код. Я пытаюсь сделать несколько твиков на базовом сайте с помощью базового шаблона.
Я полагаю, исходя из вашего вопроса, что статический блок никогда не отображается и что кнопка добавления в корзину всегда отображается. Я также предполагаю, что вы установите свой атрибут "Только для Instore" на "Да" на тестируемые продукты, вы создали и включили CMS Static с идентификатором instore_only
для текущего хранилища и что вы 'очищен или отключен Magento Cache.
$_product->getAttributeText('instore_only')
вернет текстовое значение для атрибутов, которые имеют тип Dropdown
или Multiple select
.
Если атрибут вашего продукта настроен с типом ввода каталога " Yes/No
", getAttributeText()
не вернет для него значения, поэтому он никогда не будет равен "Да" в вашем тесте, и ваш статический блок никогда не будет отображаться.
Вместо этого вы должны запрашивать значение атрибута напрямую. Тип ввода Yes/No
напрямую совместим с булевыми операциями, поэтому вы можете просто проверить значение в инструкции if. Вот так:
if ($_product->getInstoreOnly()) {
//output your static block
} else {
//output the add to cart form
}
Если ваша конфигурация атрибута вводится в качестве типа ввода Text
в Text
или Text area
, вы можете сравнить это:
if ($_product->getInstoreOnly() == "Yes") {
//output your static block
} else {
//ouput the add to cart form
}
В этом случае вам нужно вручную ввести " Yes
в поле в редакторе продуктов, чтобы сделать эту работу.
Если ваш атрибут настроен как вариант Multiple select
Dropdown
или Multiple select
выбор, к которому вы вручную добавили выбор с именем " Yes
, то ваш код выше должен быть правильным.
Вы также должны убедиться, что атрибут каталога, Used in product listing
установлен на Yes
, чтобы значение атрибута загружалось на страницу продукта, для вас, Magento.
Чтобы скрыть поле qty и кнопку "Добавить в корзину" из view.phtml, вы можете прокомментировать весь код в addtocart.phtml
расположенный в template/catalog/product/view/addtocart.phtml
Надеюсь это поможет
Проверьте настройки вашего атрибута, чтобы убедиться, что он доступен на передней панели. Кроме того, убедитесь, что для параметра "Используется в листинге" установлено значение "да", поэтому он добавляется в таблицы индексов. Это ускоряет вызов. Я подозреваю, что это позволит вашему текущему коду работать... но не уверен без тестирования.
Менее изящным способом является вызов его из ресурсной модели. Я не рекомендую этот путь, потому что вы обходите индексные таблицы...
Пытаться:
$_product->getResource()->getAttribute('instore_only')->getFrontend()->getValue($_product);
instore_only
продуктаinstore_only
тип ввода каталогаYes/No
?