किसी भी Magento टेम्पलेट में खाली विशेषता कैसे छिपाएं?


12

मैं Magento टेम्पलेट में कस्टम विशेषता छिपाना चाहता हूं। मेरा Magento संस्करण 1.8.1 है

हमने अपने उत्पाद जैसे ब्रांड, आयाम, उत्पाद प्रकार आदि के लिए कस्टम विशेषता जोड़ी है, लेकिन कभी-कभी हमने इन विशेषताओं में मान नहीं जोड़े। Magento उत्पाद दृश्य पृष्ठ में No या N / A दिखाता है।

इसलिए, हम उन विशेषताओं को छिपाना चाहते हैं जो टेम्पलेट में रिक्त या कोई मूल्य नहीं हैं।


मदद करने के लिए हमें और भी बहुत सारी जानकारी की आवश्यकता होगी (कौन सी विशेषता? कहाँ?)
संकेत

जवाबों:


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 मॉड्यूल बनाने के लिए और एक कोर ब्लॉक वर्ग को फिर से लिखना कैसे पर एक ट्यूटोरियल की तुलना में स्थानीय dir में एक कस्टम मॉड्यूल बनाने के लिए। या http://www.magentocommerce.com/magento-connect/ultimate-module-creator.html आज़माएं ।


टेम्पलेट फ़ाइल को बदलने वाला पहला समाधान ठीक है, लेकिन दो मुद्दे हैं। पहले यदि कोई विशेषता प्रकार है हाँ / नहीं के साथ कोई मान सेट करने के लिए नहीं, यह सामने वाले में छिपा होगा जो ठीक नहीं है। दूसरा अगर कोई विशेषता नहीं है तो आपको हेडर मिलेगा अतिरिक्त जानकारी जो ठीक नहीं है। यदि ऐसी कोई विशेषताएँ नहीं हैं, जो हैडर नहीं दिखनी चाहिए।
ADDISON74

6

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

कोड की निम्नलिखित पंक्तियों के साथ पूरे फॉरेस्ट लूप को बदलें:

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

मैं सटीक नहीं जानता, लेकिन मैंने इसे कहीं पढ़ा है।

खाली विशेषताओं को छिपाने के लिए केवल "विशेषताएँ.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 मान वाला है। टेक्स्ट फ़ील्ड, टेक्स्ट एरिया, मल्टीसेले, ड्रॉपडाउन का कोई मूल्य नहीं है। यदि अट्रिब्युट प्रकार डेटाइम है और वैल्यू सेट नहीं है तो इसे छिपाने के बजाय दिखाया जाना चाहिए।
ADDISON74

1

एप्लिकेशन / डिज़ाइन / फ्रंटएंड / बेस / डिफ़ॉल्ट / टेम्पलेट / कैटलॉग / उत्पाद / दृश्य / विशेषताएँ में निम्नलिखित कोड बदलें :

से:

<?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 कोड को जांचना चाहिए। यह इन मानों के साथ विशेषताओं को प्रस्तुत नहीं करेगा।

कोड इस तरह दिखेगा:

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

कोड की निम्नलिखित पंक्तियों के साथ पूरे फॉरेस्ट लूप को बदलें:

<?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/#t4026

यह मॉड्यूल Magento 1.8.1 के साथ ठीक काम करता है। मॉड्यूल खरीदने या किसी कोड को संपादित करने की आवश्यकता नहीं है।

धन्यवाद नीरो (इस मॉड्यूल के डेवलपर)


1
लिंक टूट गया है क्या मुझे लाइव लिंक अपडेट का पता चल सकता है?
चंद्रमा

4
या इससे भी बेहतर: यहाँ सही उत्तर पोस्ट करें। एक नई कड़ी फिर से
टूटेगी

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

कोड की निम्नलिखित पंक्तियों के साथ पूरे फॉरेस्ट लूप को बदलें:

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


कोड से ऊपर काम नहीं कर रहा है
जेम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.