วิธีการซ่อนแอตทริบิวต์ที่ว่างเปล่าในแม่แบบคุณภาพเยี่ยมใด ๆ


12

ฉันต้องการซ่อนแอตทริบิวต์ที่กำหนดเองในแม่แบบคุณภาพเยี่ยม เวอร์ชั่นวีโอไอพีของฉันคือ 1.8.1

เราได้เพิ่มแอตทริบิวต์ที่กำหนดเองสำหรับผลิตภัณฑ์ของเราเช่นแบรนด์มิติประเภทผลิตภัณฑ์ ฯลฯ แต่บางครั้งเราไม่ได้เพิ่มคุณค่าในแอตทริบิวต์เหล่านี้ magento แสดง No หรือ N / A ในหน้ามุมมองผลิตภัณฑ์

ดังนั้นเราต้องการซ่อนคุณลักษณะที่ไม่มีค่าหรือไม่มีค่าในเทมเพลต


เราจะต้องการข้อมูลมากขึ้นเพื่อช่วย (คุณลักษณะใดที่ไหน?)
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ฟังก์ชั่นนี้มีการปรับเปลี่ยนจาก คุณต้องคัดลอกฟังก์ชั่นด้านบนในคลาสบล็อกของคุณจากโมดูลของคุณ คลาสบล็อกของคุณเขียนคลาสบล็อกหลักอีกครั้ง การใช้สิ่งนี้จะช่วยปรับปรุงการโหลดหน้าการดูสินค้ามากขึ้นในส่วนหน้า

หากคุณไม่ทราบวิธีการสร้างโมดูลที่กำหนดเองในท้องถิ่น dir กว่าค้นหาการสอนเกี่ยวกับวิธีการสร้างโมดูลวีโอไอพีและวิธีการเขียนคลาสบล็อกหลัก หรือลองhttp://www.magentocommerce.com/magento-connect/ultimate-module-creator.html


วิธีแก้ไขปัญหาแรกในการเปลี่ยนไฟล์เท็มเพลตนั้นใช้ได้ แต่มีสองประเด็น ก่อนอื่นหากมีประเภทแอททริบิวต์ใช่ / ไม่ใช่โดยมีการตั้งค่าเป็นไม่ใช่มันจะถูกซ่อนไว้ที่ส่วนหน้าซึ่งไม่เป็นที่ยอมรับ ข้อสองหากไม่มีแอททริบิวต์คุณจะได้รับข้อมูลส่วนหัวเพิ่มเติมซึ่งไม่เป็นที่ยอมรับ หากไม่มีแอตทริบิวต์ที่ส่วนหัวไม่ควรปรากฏขึ้น
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 และค่าถูกตั้งค่าเป็น No มันควรจะแสดงแทนการล้อเล่น
ADDISON74

1

เปลี่ยนรหัสต่อไปนี้ในแอพ / 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
อย่าเปลี่ยนแม่แบบฐาน ...
Jelle Siderius

1

catalog\product\view\attributes.phtmlในรูปแบบของคุณเองให้ไปที่: รหัส PHP ของคุณควรตรวจสอบว่าค่าแอตทริบิวต์เป็น "ไม่" หรือ "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มีการเพิ่มตัวแปรและตรวจสอบว่ามีการเพิ่มลงในอาร์เรย์ในรหัสหรือไม่

ตรวจสอบให้แน่ใจว่าได้ล้างแคชหลังจากคุณทำการเปลี่ยนแปลงส่วนหน้า


ไม่ทำงานข้างต้นสำหรับฉัน
อัญมณี

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
ลิงค์เสียฉันจะรู้ได้ไหมว่าอัพเดตลิงค์อยู่?
ดวงจันทร์

4
หรือดียิ่งขึ้น: โพสต์คำตอบที่ถูกต้องที่นี่ ลิงค์ใหม่จะไม่สามารถใช้งานได้อีกครั้ง ...
simonthesorcerer

0

วิธีง่ายๆ แต่ไม่จำเป็นต้องดีกว่าอย่างอื่น

Mage_Catalog.csvอัพเดทแปลไฟล์ ตั้งค่าว่างเปล่าเหมือนด้านล่าง

N/A,""
No,""

แอ็ตทริบิวต์ส่วนหน้าจะถูกละเว้นเมื่อ No หรือ N / A


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

แค่นั้นแหละ! แอตทริบิวต์ที่ว่างเปล่าจะถูกซ่อนจากหน้าผลิตภัณฑ์ของคุณ อย่าลืมรีเฟรชแคชเพื่อดูการเปลี่ยนแปลง

แหล่งที่มา : 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.