답변:
빠른 수정 :
에서 app/[mypackage]/[mytheme]/template/catalog/product/view/attributes.phtml
(또는 기본 또는 기본 사용자 정의 테마에서 테마로이 파일을 복사) :
<?php foreach ($_additional as $_data):
// Add these 2 lines
$_test_data_value = trim($_data['value']);
if ((empty($_test_data_value) || in_array($_test_data_value, array(Mage::helper('catalog')->__('N/A'), Mage::helper('catalog')->__('No'))))) continue;?>
요청한 내용을 달성하기 위해 다음 은 필요하지 않습니다.
이러한 속성은 여전히로드됩니다. 이를 최적화하려면 (속성 세트에 많은 수의 속성이있는 경우) 다음을 수행하십시오.
public function getAdditionalData(array $excludeAttr = array())
{
$data = array();
$product = $this->getProduct();
$attributes = $product->getAttributes();
foreach ($attributes as $attribute) {
// if ($attribute->getIsVisibleOnFront() && $attribute->getIsUserDefined() && !in_array($attribute->getAttributeCode(), $excludeAttr)) {
if ($attribute->getIsVisibleOnFront() && !in_array($attribute->getAttributeCode(), $excludeAttr)) {
// Fix:
//$value = $attribute->getFrontend()->getValue($product);
if (!$product->hasData($attribute->getAttributeCode())) {
$value = Mage::helper('catalog')->__('N/A');
}
// Fix:
elseif ((string) ($value = $attribute->getFrontend()->getValue($product)) == '') {
$value = Mage::helper('catalog')->__('No');
} elseif ($attribute->getFrontendInput() == 'price' && is_string($value)) {
$value = Mage::app()->getStore()->convertPrice($value, true);
}
if (is_string($value) && strlen($value)) {
$data[$attribute->getAttributeCode()] = array(
'label' => $attribute->getStoreLabel(),
'value' => $value,
'code' => $attribute->getAttributeCode()
);
}
}
}
return $data;
}
두 // Fix:
의견에 주목 하십시오 .
이 수정 된 함수는에서 온 것 Mage_Catalog_Block_Product_View_Attributes
입니다. 블록 클래스에서 위의 함수를 모듈에서 복사해야합니다. 블록 클래스는 핵심 블록 클래스를 다시 작성합니다. 이를 적용하면 프론트 엔드에서 제품보기 페이지로드가 상당히 향상됩니다.
로컬 디렉토리에 사용자 정의 모듈을 작성하는 방법을 모르는 경우 Magento 모듈 작성 방법 및 코어 블록 클래스를 다시 작성하는 방법에 대한 학습서를 검색하십시오. 또는 http://www.magentocommerce.com/magento-connect/ultimate-module-creator.html을 사용해보십시오 .
attributes.phtml 파일을 찾아서여십시오 . 이 파일은 여기에서 찾을 수 있습니다 :
/app/design/frontend/[YOUR PACKAGE]/[YOUR THEME]/template/catalog/product/view/attribute.phtml
파일을 열고 다음 줄을 검색하십시오.
<?php foreach ($_additional as $_data): ?>
<tr>
<th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php endforeach; ?>
전체 foreach 루프를 다음 코드 줄로 바꿉니다.
<?php foreach ($_additional as $_data): ?>
<?php $_attribute = $_product->getResource()->getAttribute($_data['code']);
if (!is_null($_product->getData($_attribute->getAttributeCode())) && ((string)$_attribute->getFrontend()->getValue($_product) != '')) { ?>
<tr>
<th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php } ?>
<?php endforeach; ?>
출처 : http://codingbasics.net/hide-magento-attributes-value/
출처 : http://www.magthemes.com/magento-blog/empty-attributes-showing-na-fix/
잘 모르겠지만 어딘가에서 읽었습니다.
“attributes.phtml”이라는 템플릿 파일을 편집하여 빈 속성을 숨 깁니다.
코드에서 다음 줄을 찾으십시오.
<?php foreach ($_additional as $_data): ?>
<tr>
<th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php endforeach; ?>
그리고 이 라인 교체 다음과를 :
<?php foreach ($_additional as $_data): ?>
<?php if ((string)$_data['value'] != '' and $_data['value'] != 'N/A'): ?>
<tr>
<th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php endif; ?>
<?php endforeach; ?>
app / design / frontend / base / default / template / catalog / product / view / attributes.phtml 에서 다음 코드를 변경하십시오 .
에서:
<?php foreach ($_additional as $_data): ?>
<tr>
<th class="label"><?php echo $this->escapeHtml($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php endforeach; ?>
에:
<?php foreach ($_additional as $_data): ?>
<?php if ($_product->getAttributeText($_data['code']) == '') continue; ?>
<tr>
<th class="label"><?php echo $this->escapeHtml($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php endforeach; ?>
사용자 정의 테마에서 다음으로 이동하십시오 catalog\product\view\attributes.phtml
. PHP 코드는 모든 언어에서 속성 값이 "No"또는 "N / A"인지 확인해야합니다. 이 값으로 속성을 렌더링하지는 않습니다.
코드는 다음과 같습니다.
<?php
$_helper = $this->helper('catalog/output');
$_product = $this->getProduct();
$emptyValues = array($this->__('N/A'), $this->__('No'));
?>
<?php if($_additional = $this->getAdditionalData()): ?>
<h2><?php echo $this->__('Additional Information') ?></h2>
<table class="data-table" id="product-attribute-specs-table">
<col width="25%" />
<col />
<tbody>
<?php foreach ($_additional as $_data): ?>
<?php if(!in_array($_data['value'], $emptyValues)): ?>
<tr>
<th class="label"><?php echo $this->escapeHtml($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php endif; ?>
<?php endforeach; ?>
</tbody>
</table>
<script type="text/javascript">decorateTable('product-attribute-specs-table')</script>
<?php endif;?>
변수 $emptyValues
가 추가되고 배열에 있는지 확인하여 코드에 추가되었습니다.
프런트 엔드를 변경 한 후 캐시를 비워야합니다.
이것은 작은 코드 조각으로 수행 할 수 있습니다. attributes.phtml
파일을 찾아서 엽니 다 . 이 파일은 여기에서 찾을 수 있습니다 :/app/design/frontend/[theme name]/[package name]/template/catalog/product/view/attribute.phtml
파일을 열고 다음 줄을 검색하십시오.
<?php foreach ($_additional as $_data): ?>
<tr>
<th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php endforeach; ?>
전체 foreach 루프를 다음 코드 줄로 바꿉니다.
<?php foreach ($_additional as $_data): ?>
<?php $_attribute = $_product->getResource()->getAttribute($_data['code']);
if (!is_null($_product->getData($_attribute->getAttributeCode())) && ((string)$_attribute->getFrontend()->getValue($_product) != '')) { ?>
<tr>
<th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php } ?>
<?php endforeach; ?>
해결 된 문제 :) 해결책은 여기 있습니다 : http://www.magentocommerce.com/boards%20/viewthread/294064/#t407742
이 모듈은 magento 1.8.1에서 잘 작동합니다. 모듈을 구매하거나 코드를 편집 할 필요가 없습니다.
감사합니다 Niro (이 모듈의 개발자)
때로는 다양한 제품 속성을 원하지만 기본 속성 세트 만 원하는 상점을 발견하기도합니다. 즉, 모든 제품에는 특정 제품에는 적용되지 않는 10 개 이상의 옵션이 있습니다. 예를 들어, 의류는 크기 속성이 필요할 수 있지만 가구는 필요하지 않습니다. 상점은 각 제품에 대해 동일한 속성 세트를 사용하므로 빈 크기 속성은 다음과 같이 표시됩니다.
이것은 물론 고객에게 매우 혼란 스럽기 때문에 더 나은 옵션은 비어있는 속성 값을 숨기는 것입니다. 이것은 작은 코드 조각으로 수행 할 수 있습니다. attributes.phtml
파일을 찾아서 엽니 다 . 이 파일은 여기에서 찾을 수 있습니다 :app/design/frontend/default/[theme name]/template/catalog/product/view/attribute.phtml
파일을 열고 다음 줄을 검색하십시오.
<?php foreach ($_additional as $_data): ?>
<?php $_attribute = $_product->getResource()->getAttribute($_data['code']);
if (!is_null($_product->getData($_attribute->getAttributeCode())) && ((string)$_attribute->getFrontend()->getValue($_product) != '')) { ?>
<tr>
<th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php } ?>
<?php endforeach; ?>
전체 foreach 루프를 다음 코드 줄로 바꿉니다.
<?php foreach ($_additional as $_data): ?>
<?php $_attribute = $_product->getResource()->getAttribute($_data['code']);
if (!is_null($_product->getData($_attribute->getAttributeCode())) && ((string)$_attribute->getFrontend()->getValue($_product) != '')) { ?>
<tr>
<th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
</tr>
<?php } ?>
<?php endforeach; ?>
그게 다야! 빈 속성은 이제 제품 페이지에서 숨겨집니다. 변경 사항을 확인하려면 캐시를 새로 고치는 것을 잊지 마십시오.
SOurce : https://tejabhagavan.blogspot.in/2016/03/hide-magento-attributes-with-no-value-2.html