마 젠토 템플릿에서 빈 속성을 숨기는 방법?


12

magento 템플릿에서 사용자 정의 속성을 숨기고 싶습니다. 내 마 젠토 버전은 1.8.1입니다.

브랜드, 치수, 제품 유형 등 제품에 대한 맞춤 속성을 추가했지만 때로는 이러한 속성에 값을 추가하지 않았습니다. magento는 제품보기 페이지에 아니요 또는 해당 사항 없음을 표시합니다.

따라서 템플릿에서 비어 있거나 값이없는 속성을 숨기려고합니다.


도움을 얻으려면 훨씬 더 많은 정보가 필요합니다 (어떤 속성? 어디에서?)
benmarks

답변:


7

빠른 수정 :

에서 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을 사용해보십시오 .


템플릿 파일을 변경하는 첫 번째 해결책은 괜찮지 만 두 가지 문제가 있습니다. 먼저 값이 No로 설정된 Yes / No 속성 유형이 있으면 프런트 엔드에서 숨겨져 확인되지 않습니다. 둘째, 속성이 없으면 OK (추가)가 아닌 추가 정보 헤더가 표시됩니다. 속성이 없으면 해당 헤더가 나타나지 않아야합니다.
ADDISON74

6

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/


4

잘 모르겠지만 어딘가에서 읽었습니다.

“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; ?>

1
솔루션은 속성 유형 날짜 시간 만 숨기고 N / A 값을 갖는 유일한 것입니다. 텍스트 필드, 텍스트 영역, 다중 선택, 드롭 다운에는 값이 없습니다. attribyte 유형이 datetime이고 value가 No로 설정되어 있으면 숨기는 대신 표시되어야합니다.
ADDISON74

1

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

2
기본 템플릿을 변경하지
마십시오

1

사용자 정의 테마에서 다음으로 이동하십시오 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가 추가되고 배열에 있는지 확인하여 코드에 추가되었습니다.

프런트 엔드를 변경 한 후 캐시를 비워야합니다.


위 코드가 작동하지 않음
Gem

1

이것은 작은 코드 조각으로 수행 할 수 있습니다. 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; ?>

0

해결 된 문제 :) 해결책은 여기 있습니다 : http://www.magentocommerce.com/boards%20/viewthread/294064/#t407742

이 모듈은 magento 1.8.1에서 잘 작동합니다. 모듈을 구매하거나 코드를 편집 할 필요가 없습니다.

감사합니다 Niro (이 모듈의 개발자)


1
링크가 깨졌습니다. 라이브 링크 업데이트를 알 수 있습니까?
Moon

4
또는 더 나은 방법 : 여기에 정답을 게시하십시오. 새로운 링크가 다시 끊어 질 것입니다 ...
simonthesorcerer

0

쉬운 방법이지만 다른 사람보다 더 나은 것은 아닙니다.

번역 파일을 업데이트하십시오 Mage_Catalog.csv. 아래와 같이 빈 값을 설정하십시오.

N/A,""
No,""

아니요 또는 해당 없음 인 경우 프런트 엔드 특성이 무시됩니다.


0

때로는 다양한 제품 속성을 원하지만 기본 속성 세트 만 원하는 상점을 발견하기도합니다. 즉, 모든 제품에는 특정 제품에는 적용되지 않는 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


위 코드가 작동하지 않음
Gem
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.